برنامه‌نویسی اندروید

پخش ویدیو در اندروید با Exo Player

پخش ویدیو در اندروید با 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 بهترین انتخاب است. این کتابخانه با امکانات گسترده خود، نیاز اکثر پروژه‌های ویدیویی را پوشش می‌دهد.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *