ExoPlayer: bu nima, imkoniyatlari va sozlanishi

Muallif: IT Sectr Nashr etilgan: 2026-05-23 O'qish vaqti: 8 daq

ExoPlayer — Android uchun ochiq kodli media pleer kutubxonasi bo'lib, Google tomonidan o'rnatilgan MediaPlayer-ga muqobil sifatida ishlab chiqilgan. ExoPlayer turli formatlarda, jumladan DASH, HLS, SmoothStreaming va oddiy media fayllarda audio va videoni qayta tiklashni yagona API orqali adaptiv striming qo'llab-quvvatlashi bilan ta'minlaydi. Google I/O (2024) ma'lumotlariga ko'ra, ExoPlayer 60 000 dan ortiq Android ilovalarida, jumladan YouTube, Google TV va Netflix-da qo'llaniladi.

Asosiy ma'lumotlar

  • ExoPlayer — Google-dan Android uchun ochiq kodli media pleer kutubxonasi.
  • Platformalararo formatlar — ExoPlayer modulli kengaytmalar tizimi orqali DASH, HLS, SmoothStreaming va RTSP-ni qo'llab-quvvatlaydi.
  • Sozlash — pleerning har bir komponenti (renderer, ma'lumot manbai, DRM) o'z tatbiqi bilan almashtirilishi mumkin.
  • Canvas va Compose — ExoPlayer an'anaviy View yondashuvi (SurfaceView) bilan ham, Jetpack Compose bilan ham integratsiyalanadi.
  • DRM — modulli DRM tizimi orqali Widevine, PlayReady va ClearKey qo'llab-quvvatlashi.

ExoPlayer nima?

ExoPlayer — Android uchun ochiq kodli (Apache 2.0) multimedia qayta tiklash kutubxonasi bo'lib, birinchi versiyasi Google tomonidan 2014-yilda chiqarilgan. O'rnatilgan MediaPlayer-dan farqli o'laroq, tizim media kodekining (MediaCodec) yupqa qatlami bo'lgan ExoPlayer to'liq Java/Kotlin darajasida amalga oshirilgan bo'lib, bu dasturchilarga qayta tiklashning har bir bosqichi ustidan to'liq nazorat beradi.

Arxitektura jihatidan ExoPlayer modulli prinsip asosida qurilgan: qayta tiklashning har bir jihati alohida komponent tomonidan amalga oshiriladi. Asosiy modul (exoplayer-core) pleer, rendererlar, trek tanlagichlari va bufer boshqaruvini o'z ichiga oladi. Qo'shimcha modullar (exoplayer-dash, exoplayer-hls, exoplayer-rtsp, exoplayer-smoothstreaming) tegishli striming protokollarini qo'llab-quvvatlashni qo'shadi. Bunday arxitektura ilovalarga faqat kerakli komponentlarni ulash imkonini beradi, APK hajmini minimallashtiradi.

ExoPlayer 2 (joriy asosiy versiya) 2018-yilda chiqarilgan va API-ni tubdan qayta ishlashni olib kelgan: Player Interface joriy etilishi, AndroidX Media3 orqali Compose qo'llab-quvvatlashi, yaxshilangan xato boshqaruvi va adaptiv trek tanlash algoritmlari. 2.19 versiyasidan (2024) boshlab ExoPlayer AndroidX Media kutubxonasining tarkibiy qismiga aylandi, bu standart Android bog'liqlik menejeri orqali integratsiya va yangilanishni soddalashtirdi.

ExoPlayer arxitekturasi

ExoPlayer asosida ExoPlayerImpl komponenti yotadi, u qayta tiklash hayotiy siklini boshqaradi. U MediaSource (media manbai), TrackSelector (trek tanlash), LoadControl (buferlash boshqaruvi) va Renderer (video, audio, subtitr va metadata rendererlari) ro'yxatini o'z ichiga oladi. Har bir komponent Builder yoki fabrika metodlari orqali o'z tatbiqi bilan almashtirilishi mumkin.

Video render qilish uchun ExoPlayer SurfaceView, TextureView yoki SphericalSurfaceView (360 daraja video uchun) dan foydalanadi. Tavsiya etilgan variant SurfaceView hisoblanadi, chunki u apparat tezlashuvi va minimal energiya sarfini ta'minlaydi. Jetpack Compose uchun AndroidX Media3 kutubxonasi SurfaceView-ni o'rab oluvchi `AndroidView` komponentini va eksperimental `Media3Compose`-ni taqdim etadi.

ExoPlayer imkoniyatlari

ExoPlayer oddiy media pleerdan tashqariga chiqadigan keng funksiyalar to'plamini taqdim etadi. Asosiy imkoniyatlarga barcha mashhur striming protokollarini qo'llab-quvvatlash, moslashuvchan DRM tizimi, adaptiv bitrate almashtirish (ABR) va qayta tiklash analitika vositalari kiradi.

FunksiyaTavsifModul
DASHMPEG standarti bo'yicha adaptiv strimingexoplayer-dash
HLSApple-dan HTTP Live Streamingexoplayer-hls
SmoothStreamingMicrosoft-dan adaptiv strimingexoplayer-smoothstreaming
RTSPJonli efir uchun Real-Time Streaming Protocolexoplayer-rtsp
WidevineDRM kontent himoyasiexoplayer-drm
ConcatenationBir nechta media fayllarni birlashtirishexoplayer-core
AdsReklama uchun IMA SDK integratsiyasiexoplayer-ima

Adaptiv bitrate almashtirish

ABR (Adaptive Bitrate) ExoPlayer-da AdaptiveTrackSelection interfeysi orqali amalga oshirilgan. Standart sifatida AdaptiveTrackSelectionFactory ishlatiladi, u DefaultAdaptiveTrackSelection yaratadi — tarmoq o'tkazish qobiliyati va bufer hajmini hisobga oluvchi muvozanatli algoritm. Muayyan stsenariylar uchun muqobil tatbiqlar ulanishi mumkin: BOLA (almashtirishlarni minimallashtirish), RandomAdaptiveTrackSelection (test) yoki TrackSelection interfeysi orqali o'z tatbiqingiz.

BandwidthMeter — tarmoq o'tkazish qobiliyatini o'lchash uchun yana bir asosiy komponent. Standart sifatida DefaultBandwidthMeter ishlatiladi, u pleerning barcha HTTP so'rovlari bo'yicha statistika to'playdi. Dasturchi uni qo'shimcha omillarni hisobga olish uchun kengaytirishi mumkin: tarmoq turi (Wi-Fi, 4G, 5G), uyali signali yoki foydalanuvchi uchun trafik narxi.

DRM va kontent himoyasi

ExoPlayer Widevine (L1, L3), PlayReady va ClearKey DRM-ni qo'llab-quvvatlaydi. Litsenziya olish litsenziya serveri bilan o'zaro aloqada bo'lgan DrmSessionManager orqali sozlanadi. Premium video (4K HDR) uchun Widevine L1 apparat qo'llab-quvvatlashi talab qilinadi, bu chip darajasida himoyani ta'minlaydi va ekranni qo'lga kiritishning oldini oladi. DRM tizimini tanlash maqsadli platformaga bog'liq: Widevine Android va Chromecast-da, PlayReady Xbox va Windows-da, FairPlay iOS va Apple TV-da ishlatiladi. ExoPlayer MPD fayli asosida mavjud DRM tizimini avtomatik aniqlaydi va asosiy stsenariylar uchun qo'lda sozlashni talab qilmaydi.

ExoPlayer-ni Android loyihasiga qanday integratsiya qilish

ExoPlayer-ni Android loyihasiga ulash Gradle bog'liqliklari orqali amalga oshiriladi. 2.19 versiyasidan boshlab ExoPlayer AndroidX Media (androidx.media3) tarkibiga kiradi, bu Jetpack Compose va boshqa AndroidX komponentlari bilan moslikni ta'minlaydi. Keling, Kotlin-da bosqichma-bosqich integratsiyani ko'rib chiqaylik.

Bog'liqliklarni ulash

build.gradle (Module) fayliga ExoPlayer modullarini qo'shing. Minimal to'plam core, ui va kerakli striming protokoli uchun modulni o'z ichiga oladi. DASH kontentini qayta tiklash uchun exoplayer-dash, HLS uchun exoplayer-hls talab qilinadi.

groovy
dependencies {
    implementation "androidx.media3:media3-exoplayer:1.5.0"
    implementation "androidx.media3:media3-ui:1.5.0"
    implementation "androidx.media3:media3-exoplayer-dash:1.5.0"
    implementation "androidx.media3:media3-exoplayer-hls:1.5.0"
}

Activity-da asosiy integratsiya

Activity yoki Fragment-da pleerni yaratish va sozlash. ExoPlayer video va o'rnatilgan boshqaruv elementlarini ko'rsatish uchun PlayerView (yoki sozlash uchun StyledPlayerView) dan foydalanadi. Minimal konfiguratsiya ExoPlayer.Builder orqali pleerni yaratish va manba URI bilan MediaItem-ni uzatishni o'z ichiga oladi.

kotlin
class PlayerActivity : AppCompatActivity() {

    private var player: ExoPlayer? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_player)

        player = ExoPlayer.Builder(this).build()
        val playerView = findViewById<StyledPlayerView>(R.id.playerView)
        playerView.player = player

        val mediaItem = MediaItem
            .Builder()
            .setUri("https://example.com/video.mp4")
            .build()
        player?.setMediaItem(mediaItem)
        player?.prepare()
    }

    override fun onDestroy() {
        player?.release()
        super.onDestroy()
    }
}

Xato va holatlarni boshqarish

Ishlab chiqarish ilovalari uchun mumkin bo'lgan qayta tiklash xatolarini boshqarish zarur: tarmoq nosozliklari, qo'llab-quvvatlanmaydigan formatlar, DRM litsenziyalash xatolari. ExoPlayer onPlayerError, onPlaybackStateChanged va onPlayWhenReadyChanged metodlari bilan Player.Listener interfeysini taqdim etadi. Takrorlash imkoniyati bilan foydalanuvchiga ma'lumot beruvchi xato xabarlarini ko'rsatish tavsiya etiladi.

ExoPlayer vs MediaPlayer: taqqoslash

ExoPlayer va o'rnatilgan MediaPlayer o'rtasidagi tanlov Android ilovalarini ishlab chiqishda keng tarqalgan savoldir. MediaPlayer Android SDK-ning 1.0 versiyasidan boshlab qismidir, ExoPlayer esa Gradle orqali ulanishni talab qiladigan kutubxonadir. Keling, ularning farqlarini asosiy mezonlar bo'yicha ko'rib chiqaylik.

MezonExoPlayerMediaPlayer
ArxitekturaModulli, to'liq Java/Kotlin-daTizim C++ komponentlari ustidagi qatlam
StrimingDASH, HLS, SmoothStreaming, RTSPFaqat mahalliy fayllar va HLS (Android 9+)
SozlashTo'liq (har bir komponent almashtiriladi)Minimal (faqat parametrlar)
YangilanishlarGoogle Play yoki APK orqali (OS-dan mustaqil)Faqat Android yangilanishi (OTA) bilan
APK hajmi+1-3 MB (modullarga qarab)0 (OS qismi)
Min SDKAPI 16+ (Android 4.1)API 1+
DRMWidevine, PlayReady, ClearKeyWidevine (cheklangan)

ExoPlayer ustun striming (DASH, HLS), UI sozlash, DRM qo'llab-quvvatlash va Android versiyasidan mustaqillik talab qiladigan stsenariylarda. MediaPlayer APK hajmi kritik bo'lgan va adaptiv striming talablari bo'lmagan mahalliy media fayllarni qayta tiklaydigan oddiy ilovalar uchun mos keladi. Tarmoqdagi kontentga ega zamonaviy ilovalar uchun ExoPlayer aniq tanlovdir.

Istisno — minimal SDK-si API 16-dan (Android 4.1) past bo'lgan ilovalar, ular bozorda deyarli qolmagan. targetSdk 33+ va minimal SDK 21+ bo'lgan barcha ilovalar uchun ExoPlayer nafaqat afzal, balki AV1 va Dolby Vision kabi zamonaviy formatlarni tegishli kengaytmalar orqali qo'llab-quvvatlash uchun zarurdir.

ExoPlayer-ni ilg'or sozlash

Ishlab chiqarish ilovalari uchun asosiy ExoPlayer integratsiyasi ko'pincha qo'shimcha sozlash ni talab qiladi: keshlashni boshqarish, mobil tarmoqlar uchun buferlashni optimallashtirish, analitika bilan integratsiya va audio treklarni tanlashni sozlash. Keling, ilg'or foydalanish stsenariylarini ko'rib chiqaylik.

Kontentni keshlash

CacheDataSourceFactory yuklangan segmentlarni mahalliy xotirada keshlash imkonini beradi, bu takroriy ko'rishda trafikni tejaydi va oflayn qayta tiklashni ta'minlaydi. ExoPlayer exoplayer-cas kutubxonasidan SimpleCache dan foydalanadi — LRU evakuatsiyasi va hajm cheklovlari bilan fayl keshlash.

kotlin
val cache = SimpleCache(
    cacheDir,
    LeastRecentlyUsedCacheEvictor(50 * 1024 * 1024),
    AppDatabaseProvider(this)
)

val cacheDataSourceFactory = CacheDataSource
    .Factory()
    .setCache(cache)

val player = ExoPlayer.Builder(this)
    .setMediaSourceFactory(
        DefaultMediaSourceFactory(cacheDataSourceFactory)
    )
    .build()

Tarmoq almashtirishni boshqarish

Mobil ilovalarda Wi-Fi va mobil tarmoq o'rtasidagi almashtirishni boshqarish muhimdir. ExoPlayer tarmoq holatini kuzatish uchun ConnectivityManager ni taqdim etadi. Ulanish yo'qolganda, pleerni to'xtatmasdan, pozitsiyani saqlagan holda PAUSED holatiga o'tkazish tavsiya etiladi. Ulanish tiklangandan so'ng, segmentlarni qayta yuklash bilan qayta tiklashni davom ettiring.

Jetpack Compose bilan integratsiya

AndroidX Media3 chiqarilishi bilan kutubxona Jetpack Compose uchun eksperimental qo'llab-quvvatlashga ega bo'ldi. `AndroidView` komponenti SurfaceView yoki PlayerView-ni o'rab oladi, Compose ierarxiyasi bilan moslikni ta'minlaydi. Chuqurroq integratsiya uchun `androidx.media3:media3-ui-compose` kutubxonasi ishlatiladi, u Compose-mos pleer boshqaruv elementlarini taqdim etadi.

kotlin
@Composable
fun VideoPlayer(uri: String) {
    val context = LocalContext.current
    val player = remember {
        ExoPlayer.Builder(context).build()
            .also { it.setMediaItem(MediaItem.fromUri(uri)) }
    }

    DisposableEffect(key = null) {
        player.prepare()
        onDispose { player.release() }
    }

    AndroidView(
        factory = { StyledPlayerView(context).also { it.player = player } }
    )
}

Tez-tez beriladigan savollar

ExoPlayer uchun minimal Android versiyasi qanday?

ExoPlayer Android API 16+ (Android 4.1 Jelly Bean) ni qo'llab-quvvatlaydi. Biroq, fMP4 segmentlari bilan DASH va HLS uchun API 21+ (Android 5.0 Lollipop) tavsiya etiladi. DRM modullari (Widevine) API 19+ talab qiladi, HEVC apparat dekodlash esa API 21 dan boshlab mavjud.

ExoPlayer-ni videosiz faqat audio uchun ishlatish mumkinmi?

Ha, ExoPlayer audio uchun juda mos keladi. Faqat tovushni qayta tiklash uchun SurfaceView yoki PlayerView talab qilinmaydi. ExoPlayer avtomatik audio renderer-ni tanlaydi va fon rejimida ishlaydi. Fon qayta tiklash uchun tizim boshqaruv elementlari bilan integratsiya uchun MediaSessionService dan foydalanish tavsiya etiladi.

ExoPlayer-da audio treklar o'rtasida qanday almashish mumkin?

TrackSelector ExoPlayer-da audio treklarni tanlashni boshqaradi. Almashish uchun player.getCurrentTracks().groups va player.setTrackSelectionParameters() dan afzal ko'rgan audio tilini ko'rsatib foydalaning. Bir nechta audio trekli DASH va HLS strimlari uchun almashish qayta tiklashni to'xtatmasdan amalga oshadi.

ExoPlayer subtitrlar qo'llab-quvvatlaydimi?

Ha, ExoPlayer ichki (MP4, WebM konteynerida) va tashqi subtitrlarni TTML, SRT, VTT va CEA-608 formatlarida qo'llab-quvvatlaydi. Tashqi subtitrlar uchun SingleSampleMediaSource yoki video oqimi bilan birlashtirish uchun MergingMediaSource ishlatiladi. Stilizatsiyalangan subtitrlar ko'rinishi CaptionStyleCompat orqali sozlanadi.

ExoPlayer-da jonli striming kechikishini qanday kamaytirish mumkin?

Past Kechikish strimingi uchun LoadControl-ni kichikroq maqsadli bufer qiymatlari bilan sozlang: HLS LL va DASH LL uchun DefaultLoadControl.Builder().setTargetBufferBytes(1024 * 512).setBufferDurationsMs(500, 2000, 500, 1000) dan foydalaning. Shuningdek, jonli efirdan orqada qolganda buferning tezlashtirilgan to'ldirilishi uchun minPlaybackSpeed = 1.02 ni belgilang.

Xulosa

  • ExoPlayer — Google-dan modulli arxitektura va to'liq sozlash bilan ochiq kodli media pleer kutubxonasi.
  • Adaptiv striming — modulli kengaytmalar tizimi orqali DASH, HLS, SmoothStreaming va RTSP-ni qo'llab-quvvatlaydi.
  • DRM — Widevine, PlayReady va ClearKey yagona API bilan exoplayer-drm moduli orqali integratsiyalanadi.
  • Keshlash — SimpleCache oflayn qayta tiklash va takroriy ko'rishlarda trafikni tejashni ta'minlaydi.
  • Compose — AndroidX Media3 dan boshlab ExoPlayer AndroidView orqali Jetpack Compose bilan integratsiyalanadi.
  • Sozlash — har bir komponent (MediaSource, TrackSelector, LoadControl, Renderer) almashtirilishi mumkin.
  • Tavsiya etiladi — striming, DRM yoki qayta tiklash sozlashini talab qiladigan barcha loyihalar uchun ExoPlayer dan foydalaning.

Biz kalit topshirig'i bilan mobil ilovani ishlab chiqamiz

IT Sectr 2017-yildan beri startaplar va korxonalar uchun iOS va Android ilovalarini yaratadi. Biz sizga maslahat beramiz va eng yaxshi yechimni taklif qilamiz.

Loyihani muhokama qilish

Shuningdek o'qing