Android

[Android] ์•ˆ๋“œ๋กœ์ด๋“œ ExoPlayer2์˜ Deprecated์™€ Media3์— ๋Œ€ํ•ด์„œ

๋ށ์š” 2023. 7. 19. 16:58

 

์•ˆ๋…•ํ•˜์„ธ์š” ๐Ÿ‘‹

์˜ค๋Š˜์€ ExoPlayer2๊ฐ€ Deprecated ๋œ ๊ฒƒ๊ณผ

๊ทธ๋กœ ์ธํ•ด ์—…๋ฌด์ค‘์— ๊ฒช์—ˆ๋˜ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ผ์ƒ(?)๋“ค์— ๋Œ€ํ•ด ๊ฐ„๋‹จํ•˜๊ฒŒ ์ ์–ด๋ณด๋ ค ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ˜Ž

 

1.  ํฌ์ŠคํŒ… ํ•˜๊ฒŒ๋œ ์ด์œ  ๐Ÿค”

์ตœ๊ทผ ํšŒ์˜์—์„œ ExoPlayer์˜ ๋ฒ„์ „์ด ๋„ˆ๋ฌด ๋‚ฎ๋‹ค๋Š” ์–˜๊ธฐ๋ฅผ ์‹œ์ž‘์œผ๋กœ ํ”„๋กœ์ ํŠธ์˜ ExoPlayer์˜ ๋ฒ„์ „์„ ๋†’์ด์ž๋Š” ์ œ์•ˆ์ด ๋‚˜์˜ค๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. (์ œ์ผ ๋‚ฎ์€ ๋ฒ„์ „์„ ์‚ฌ์šฉํ•˜๋˜ ํ”„๋กœ์ ํŠธ๋Š” 1.5.5๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ œ๊ฐ€ ๋‹ด๋‹นํ•œ ํ”„๋กœ์ ํŠธ๋Š” 2.9.3์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์—ˆ๋‹ค..)

์ƒ๋Œ€์ ์œผ๋กœ ์ ์šฉํ•˜๊ธฐ ์‰ฌ์šด ํ”„๋กœ์ ํŠธ๋ฅผ ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๋˜ ์ €๋Š” ํ•ด๋‹น ์‚ฌํ•ญ์— ๋Œ€ํ•ด ๋จผ์ € ๊ฒ€ํ† ๋ฅผ ํ•ด๋ณด์•˜๊ณ  ์ด๋ ‡๊ฒŒ ํฌ์ŠคํŒ…์„ ํ•˜๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

 

2. ExoPlayer2์˜ Deprecated

ํ•ด๋‹น ์‚ฌ์‹ค์— ๋Œ€ํ•ด์„œ ์•Œ๊ฒŒ ๋œ ๊ฒƒ์€ build.gradle์—์„œ ExoPlayer๋ฅผ ์ตœ์‹ ๋ฒ„์ „์œผ๋กœ ์˜ฌ๋ฆฌ๋ฉด์„œ ์•Œ๊ฒŒ ๋˜์—ˆ๋Š”๋ฐ, ์˜ฌ๋ฆฌ๊ณ  ๋‚˜๋‹ˆ ๊ฐ‘์ž๊ธฐ ๋ชจ๋“  ExoPlayer๊ด€๋ จ class๊ฐ€ deprecated ๋˜์—ˆ๋‹ค๊ณ  ๋‚˜ํƒ€๋‚˜๋Š” ๊ฒƒ..๐Ÿ™€

 

๋ฌด์Šจ ์ด์œ ์ธ์ง€ ์•Œ์•„๋ณด๊ธฐ ์œ„ํ•ด release note๋ฅผ ํ™•์ธํ•ด๋ณด์•˜๊ณ  23.7.5 ๋ถ€๋กœ ExoPlayer2 Project๊ฐ€ deprecated ๋˜์—ˆ๋‹ค๊ณ  ์ ํ˜€์žˆ๋”๊ตฐ์š”..

์•„์šธ๋Ÿฌ, ๋ชจ๋“  ์‚ฌ์šฉ์ž๋“ค์€ ์ด์ œ Media3๋กœ ์ด์ „ ํ•˜๋ผ๊ณ  ์ ํ˜€์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

GitHub - google/ExoPlayer: An extensible media player for Android

An extensible media player for Android. Contribute to google/ExoPlayer development by creating an account on GitHub.

github.com

3. Media3๋ž€?

Media3์— ๋Œ€ํ•ด์„œ Android Developer๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ๋งํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์ •๋ฆฌํ•˜์ž๋ฉด ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๋ฏธ๋””์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” Android์˜ ์ƒˆ๋กœ์šด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๋” ์ž์„ธํ•œ ์ •๋ณด๋Š” ๋งํฌ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด์ฃผ์„ธ์š” :)


Jetpack Media3๋Š” Android ์•ฑ์ด ํ’๋ถ€ํ•œ ์˜ค๋””์˜ค ๋ฐ ์‹œ๊ฐ์  ๊ฒฝํ—˜์„ ํ‘œ์‹œํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ๋ฏธ๋””์–ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ƒˆ๋กœ์šด ํ™ˆ์ž…๋‹ˆ๋‹ค.


 

Media3  |  Android Developers

Stay organized with collections Save and categorize content based on your preferences. Media3 overview Jetpack Media3 is the new home for media libraries that enables Android apps to display rich audio and visual experiences. It introduces a simpler archit

developer.android.com

 

4. Media3๋ฅผ ์ ์šฉํ•˜๋ฉฐ(?)

์—„๋ฐ€ํžˆ ๋งํ•˜๋ฉด ์•„์ง Media3์„ ์ ์šฉํ•˜์ง€๋Š” ์•Š๊ณ  '์ถœ์‹œ ํ›„๋ณด๋ฒ„์ „'์„ ํ…Œ์ŠคํŠธํ•ด๋ณธ๊ฒƒ ์ด์ง€๋งŒ(์•„์ง ์ •์‹๋ฒ„์ „์ด ๋‚˜์˜ค์ง€ ์•Š์Œ) ์ด์ „ ExoPlayer์—์„œ ์‚ฌ์šฉํ•˜๋Š” API๋“ค์„ ์ „๋ถ€ ๋Œ€์ฒดํ•ด์ฃผ์–ด Media3๋กœ ์ด์ „ํ•˜๋Š”๋ฐ ํฐ ์–ด๋ ค์›€์€ ์—†์„ ๊ฒƒ์œผ๋กœ ๋ณด์ž…๋‹ˆ๋‹ค.(2.18.7 ๋ฒ„์ „ ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค!)

์„ฑ๋Šฅ์ ์ธ ๋ถ€๋ถ„๋“ค์— ๋Œ€ํ•ด์„œ ํ–ฅ์ƒ๋œ์ ์€ ๋ชจ๋ฅด๊ฒ ์œผ๋‚˜ ์ดํ›„ ์ƒˆ๋กญ๊ฒŒ ์—…๋ฐ์ดํŠธ๋  ๋ถ€๋ถ„๋“ค์ด ๊ธฐ๋Œ€๋ฉ๋‹ˆ๋‹ค! 

 

5. ๊ธ€์„ ๋งˆ์น˜๋ฉฐ

์šฐ์„  ํ˜„์žฌ๋Š” Media3๋ฅผ ํ”„๋กœ์ ํŠธ์— ์ง์ ‘ ์ ์šฉํ•˜์ง€๋Š” ์•Š์•˜์Šต๋‹ˆ๋‹ค. (์ •์‹ ์ถœ์‹œ๋ฒ„์ „์ด ๋‚˜์˜ฌ ๋•Œ ์ผ๊ด„์ ์œผ๋กœ ์ ์šฉํ•  ๊ฒƒ ๊ฐ™๋„ค์š”.)

๋‹ค๋งŒ, ์ด์ „์— ์‚ฌ์šฉํ•˜๋˜ ExoPlayer์˜ ๋ฒ„์ „์€ ํ˜„์žฌ Media3์—์„œ ์ œ๊ณตํ•ด์ฃผ๊ณ  ์žˆ๋Š” API๋“ค๊ณผ๋Š” ๋Œ€์ฒด๊ฐ€ ๋˜์ง€ ์•Š๊ธฐ์— ํ•ด๋‹น ๋ถ€๋ถ„์€ ํ˜„์žฌ release ๋˜๊ณ  deprecated ๋˜์ง€ ์•Š์€ ๊ฐ€์žฅ ์ตœ์‹  ๋ฒ„์ „(2.18.7)์„ ์ ์šฉํ•œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ๋ถ„๋“ค๋„ ํ›„์— Media3์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ExoPlayer์˜ ๋ฒ„์ „์„ ๋ฏธ๋ฆฌ ์—…๊ทธ๋ ˆ์ด๋“œํ•ด๋ณด๋Š” ๊ฑด ์–ด๋– ์‹ ๊ฐ€์š”?? ๋งˆ์ง€๋ง‰์œผ๋กœ 2.9.3 -> 2.18.7๋กœ ๋ฒ„์ „์„ ๋ณ€๊ฒฝํ•˜๋ฉฐ ๋ณ€๊ฒฝํ•ด ์ค€ API์™€ class์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ •๋ฆฌํ•˜๊ณ  ํฌ์ŠคํŒ…์„ ๋งˆ์น˜๊ฒ ์Šต๋‹ˆ๋‹ค ๐Ÿ˜ƒ 

 

// ์ธ์Šคํ„ด์Šค ๋ฐ Listener
// private var player: SimpleExoPlayer? = null
// private var eventListener: Player.EventListener? = null

private var player: ExoPlayer? = null
private var eventListener: Player.Listener? = null

// ์ธ์Šคํ„ด์Šค ์ƒ์„ฑ
// player = ExoPlayerFactory.newSimpleInstance(context)

player = ExoPlayer.Builder(context).build()

/**
* PlayerView , PlayerControlView๋Š” Deprecated๋จ (Media3์—์„œ๋Š” ๋‹ค์‹œ ๋‚˜์˜ค๋Š”๊ฑธ๋กœ ๋ณด์ž„)
* ๋Œ€์‹  StyledPlayerView , StyledPlayerControlView๋ฅผ ์‚ฌ์šฉํ•˜์„ธ์š”.
**/

// MediaResource ์ƒ์„ฑ ๋ฐ prepare()
// player?.prepare(buildMediaSource(Uri.parse(uri)), resetPostion, resetState)

player?.run {
    setMediaSource(buildMediaSource(Uri.parse(uri)), resetPostion)
    prepare()
}

// MediaSource ๋งŒ๋“œ๋Š” class ๊ด€๋ จ
// ExtractorMediaSource.Factory()
ProgressiveMediaSource.Factory()

// DefaultHttpDataSourceFactory
DefaultHttpDataSource.Factory()

// createMediaSource(uri)
createMediaSource(MediaItem.fromUri(uri))

 

์˜ค๋Š˜์€ ์ƒˆ๋กญ๊ฒŒ ์•Œ๊ฒŒ๋œ ์‚ฌ์‹ค๋“ค์— ๋Œ€ํ•ด์„œ ํ•จ๊ป˜ ๊ณต์œ ํ•ด ๋ณด๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์กŒ์Šต๋‹ˆ๋‹ค. ๐Ÿ˜Ž

์ด๊ธ€์ด ์—ฌ๋Ÿฌ๋ถ„์—๊ฒŒ ๋งŽ์€ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์˜ค๋Š˜๋„ ์ฆ์ฝ”ํ•˜์„ธ์š” :)

๋Œ“๊ธ€์ˆ˜0