پخش ویدیو در اندروید با Exo Player
در توسعه اپلیکیشنهای اندرویدی، پخش ویدیو یکی از قابلیتهای کلیدی است—از اپهای خبری و آموزشی گرفته تا استریم آنلاین. در این میان، کتابخانه ExoPlayer که توسط Google توسعه داده شده، یکی از قدرتمندترین و منعطفترین گزینهها برای مدیریت و پخش ویدیو است.
🎯 ExoPlayer چیست؟
ExoPlayer یک Media Player متنباز برای اندروید است که جایگزین پیشرفتهتری نسبت به MediaPlayer پیشفرض سیستم محسوب میشود. این کتابخانه امکانات گستردهای برای پخش فایلهای محلی و آنلاین ارائه میدهد.
🚀 چرا ExoPlayer؟
✅ مزایا:
- پشتیبانی از استریم آنلاین (HLS، DASH و…)
- کنترل کامل روی Buffering
- قابلیت شخصیسازی بالا
- پشتیبانی از DRM
- مدیریت دقیق کیفیت و Adaptive Streaming
❌ معایب:
- پیچیدگی بیشتر نسبت به MediaPlayer
- نیاز به مدیریت Lifecycle
📦 افزودن ExoPlayer به پروژه
در فایل build.gradle:
implementation "androidx.media3:media3-exoplayer:1.3.1"
implementation "androidx.media3:media3-ui:1.3.1"
نسخههای جدید ExoPlayer تحت پکیج Media3 منتشر میشوند.
⚙️ راهاندازی ساده ExoPlayer
1. ایجاد Player
val player = ExoPlayer.Builder(context).build()
2. اتصال به PlayerView
در XML:
<androidx.media3.ui.PlayerView
android:id="@+id/playerView"
android:layout_width="match_parent"
android:layout_height="200dp"/>
در Activity یا Fragment:
playerView.player = player
3. بارگذاری و پخش ویدیو
val mediaItem = MediaItem.fromUri("https://example.com/video.mp4")
player.setMediaItem(mediaItem)
player.prepare()
player.play()
🎬 مدیریت Lifecycle (خیلی مهم!)
برای جلوگیری از Memory Leak:
override fun onStart() {
super.onStart()
player.playWhenReady = true
}
override fun onStop() {
super.onStop()
player.release()
}
🌐 پخش ویدیو آنلاین (Streaming)
ExoPlayer به صورت حرفهای از استریم پشتیبانی میکند:
val mediaItem = MediaItem.fromUri("https://example.com/stream.m3u8")
player.setMediaItem(mediaItem)
player.prepare()
فرمتهای پشتیبانیشده:
- HLS (.m3u8)
- DASH (.mpd)
- Progressive (.mp4)
⚡ کنترلهای پیشرفته
⏸ کنترل پخش:
player.pause()
player.seekTo(5000) // رفتن به ثانیه 5
🔊 تنظیم صدا:
player.volume = 0.5f
🔁 Loop کردن:
player.repeatMode = Player.REPEAT_MODE_ALL
🎨 شخصیسازی Player UI
PlayerView دارای کنترلهای آماده است، اما میتوانید UI اختصاصی بسازید:
app:use_controller="true"
app:resize_mode="zoom"
یا کنترلها را کاملاً حذف و UI دلخواه طراحی کنید.
🧠 نکات حرفهای
🔹 کش کردن ویدیو (Caching)
برای بهبود عملکرد و کاهش مصرف اینترنت از Cache استفاده کنید.
🔹 مدیریت کیفیت
برای Adaptive Streaming از TrackSelector استفاده کنید.
🔹 زیرنویس (Subtitle)
پشتیبانی کامل از فایلهای SRT و WebVTT.
🆚 ExoPlayer vs MediaPlayer
| ویژگی | ExoPlayer | MediaPlayer |
|---|---|---|
| استریم | ✅ | محدود |
| سفارشیسازی | بالا | کم |
| DRM | ✅ | محدود |
| سادگی | متوسط | ساده |
📱 استفاده در Jetpack Compose
اگر با Compose کار میکنید:
AndroidView(
factory = {
PlayerView(it).apply {
player = exoPlayer
}
}
)
🔥 سناریوهای واقعی استفاده
- اپهای آموزشی (پخش ویدیو دورهها)
- اپهای خبری (ویدیوهای آنلاین)
- اپهای IPTV و استریم
- شبکههای اجتماعی (مثل YouTube)
🏁 جمعبندی
اگر به دنبال یک پلیر حرفهای، قابلاعتماد و قابلسفارشیسازی برای اندروید هستید، ExoPlayer بهترین انتخاب است. این کتابخانه با امکانات گسترده خود، نیاز اکثر پروژههای ویدیویی را پوشش میدهد.