ExoPlayer: یہ کیا ہے، خصوصیات اور ترتیب

مصنف: IT Sectr اشاعت: 2026-05-23 مطالعے کا وقت: 8 منٹ

ExoPlayer Android کے لیے ایک اوپن سورس میڈیا پلیئر لائبریری ہے جسے Google نے بلٹ ان MediaPlayer کے متبادل کے طور پر تیار کیا ہے۔ ExoPlayer DASH، HLS، SmoothStreaming اور عام میڈیا فائلوں سمیت مختلف فارمیٹس میں آڈیو اور ویڈیو پلے بیک فراہم کرتا ہے، انکولی سٹریمنگ کی معاونت کے ساتھ ایک واحد API کے ذریعے۔ Google I/O (2024) کے مطابق، ExoPlayer 60,000 سے زیادہ Android ایپلیکیشنز میں استعمال ہوتا ہے، جن میں YouTube، Google TV اور Netflix شامل ہیں۔

اہم نکات

  • ExoPlayer — Google کی جانب سے Android کے لیے ایک اوپن سورس میڈیا پلیئر لائبریری۔
  • کراس پلیٹ فارم فارمیٹس — ExoPlayer ماڈیولر ایکسٹینشن سسٹم کے ذریعے DASH، HLS، SmoothStreaming اور RTSP کو سپورٹ کرتا ہے۔
  • تخصیص — پلیئر کا ہر جزو (رینڈرر، ڈیٹا سورس، DRM) اپنی مرضی کے نفاذ سے تبدیل کیا جا سکتا ہے۔
  • Canvas اور Compose — ExoPlayer روایتی View طریقہ (SurfaceView) اور Jetpack Compose دونوں کے ساتھ ضم ہوتا ہے۔
  • DRM — ماڈیولر DRM سسٹم کے ذریعے Widevine، PlayReady اور ClearKey کی معاونت۔

ExoPlayer کیا ہے؟

ExoPlayer Android کے لیے ایک اوپن سورس (Apache 2.0) ملٹی میڈیا پلے بیک لائبریری ہے، جس کا پہلا ورژن Google نے 2014 میں جاری کیا تھا۔ بلٹ ان MediaPlayer کے برعکس، جو سسٹم میڈیا کوڈیک (MediaCodec) کے اوپر ایک پتلی تہہ ہے، ExoPlayer مکمل طور پر Java/Kotlin سطح پر نافذ کیا گیا ہے، جو ڈویلپرز کو پلے بیک کے ہر مرحلے پر مکمل کنٹرول دیتا ہے۔

معماری کے لحاظ سے، ExoPlayer ماڈیولر اصول پر بنایا گیا ہے: پلے بیک کے ہر پہلو کو ایک علیحدہ جزو سے نافذ کیا گیا ہے۔ بنیادی ماڈیول (exoplayer-core) میں پلیئر، رینڈررز، ٹریک سلیکٹرز اور بفر مینجمنٹ شامل ہے۔ اضافی ماڈیولز (exoplayer-dash, exoplayer-hls, exoplayer-rtsp, exoplayer-smoothstreaming) متعلقہ سٹریمنگ پروٹوکولز کی معاونت شامل کرتے ہیں۔ یہ معماری ایپلیکیشنز کو صرف ضروری اجزاء شامل کرنے کی اجازت دیتی ہے، APK سائز کو کم سے کم کرتی ہے۔

ExoPlayer 2 (موجودہ بڑا ورژن) 2018 میں جاری کیا گیا تھا اور اس نے API میں بنیادی تبدیلی لائی: Player Interface کا تعارف، AndroidX Media3 کے ذریعے Compose سپورٹ، بہتر ایرر ہینڈلنگ اور انکولی ٹریک سلیکشن الگورتھم۔ ورژن 2.19 (2024) سے، ExoPlayer AndroidX Media لائبریری کا حصہ بن گیا ہے، جس نے معیاری Android ڈیپنڈنسی مینیجر کے ذریعے انضمام اور اپ ڈیٹس کو آسان بنا دیا ہے۔

ExoPlayer کی معماری

ExoPlayer کے مرکز میں ExoPlayerImpl جزو ہے، جو پلے بیک لائف سائیکل کا انتظام کرتا ہے۔ اس میں MediaSource (میڈیا ماخذ)، TrackSelector (ٹریک انتخاب)، LoadControl (بفرنگ مینجمنٹ) اور Renderer کی فہرست (ویڈیو، آڈیو، سب ٹائٹلز اور میٹا ڈیٹا کے لیے رینڈررز) شامل ہے۔ ہر جزو Builder یا فیکٹری طریقوں کے ذریعے اپنی مرضی کے نفاذ سے تبدیل کیا جا سکتا ہے۔

ویڈیو رینڈرنگ کے لیے، ExoPlayer SurfaceView، TextureView یا SphericalSurfaceView (360 ڈگری ویڈیو کے لیے) استعمال کرتا ہے۔ تجویز کردہ آپشن SurfaceView ہے، کیونکہ یہ ہارڈویئر ایکسلریشن اور کم سے کم بجلی کی کھپت فراہم کرتا ہے۔ Jetpack Compose کے لیے، AndroidX Media3 لائبریری `AndroidView` جزو فراہم کرتی ہے، جو SurfaceView کو لپیٹتی ہے، اور تجرباتی `Media3Compose` مقامی Compose انضمام کے ساتھ فراہم کرتی ہے۔

ExoPlayer کی خصوصیات

ExoPlayer ایک عام میڈیا پلیئر سے آگے وسیع خصوصیات فراہم کرتا ہے۔ اہم صلاحیتوں میں تمام مقبول سٹریمنگ پروٹوکولز کی معاونت، ایک لچکدار DRM نظام، انکولی بٹ ریٹ سوئچنگ (ABR) اور پلے بیک تجزیہ کے اوزار شامل ہیں۔

خصوصیتتفصیلماڈیول
DASHMPEG معیار کے مطابق انکولی سٹریمنگexoplayer-dash
HLSApple سے HTTP Live Streamingexoplayer-hls
SmoothStreamingMicrosoft سے انکولی سٹریمنگexoplayer-smoothstreaming
RTSPلائیو کے لیے ریئل ٹائم سٹریمنگ پروٹوکولexoplayer-rtsp
WidevineDRM مواد کا تحفظexoplayer-drm
Concatenationمتعدد میڈیا فائلوں کو جوڑناexoplayer-core
Adsاشتہار کے لیے IMA SDK انضمامexoplayer-ima

انکولی بٹ ریٹ سوئچنگ

ExoPlayer میں ABR (Adaptive Bitrate) AdaptiveTrackSelection انٹرفیس کے ذریعے نافذ کیا گیا ہے۔ ڈیفالٹ طور پر، AdaptiveTrackSelectionFactory استعمال کیا جاتا ہے، جو DefaultAdaptiveTrackSelection بناتا ہے — ایک متوازن الگورتھم جو نیٹ ورک بینڈوتھ اور بفر سائز کو مدنظر رکھتا ہے۔ مخصوص منظرناموں کے لیے، متبادل نفاذات منسلک کیے جا سکتے ہیں: BOLA (سوئچنگ کو کم سے کم کرنا)، RandomAdaptiveTrackSelection (ٹیسٹنگ) یا TrackSelection انٹرفیس کے ذریعے اپنی مرضی کا نفاذ۔

BandwidthMeter — ایک اور اہم جزو جو نیٹ ورک بینڈوتھ کی پیمائش کے لیے ذمہ دار ہے۔ ڈیفالٹ طور پر، DefaultBandwidthMeter استعمال کیا جاتا ہے، جو پلیئر کی تمام HTTP درخواستوں کے اعدادوشمار جمع کرتا ہے۔ ڈویلپر اضافی عوامل کو شامل کرنے کے لیے اسے بڑھا سکتا ہے: نیٹ ورک کی قسم (Wi-Fi, 4G, 5G)، سیل ٹاور سگنل یا صارف کے لیے ڈیٹا لاگت۔

DRM اور مواد کا تحفظ

ExoPlayer Widevine (L1, L3)، PlayReady اور ClearKey DRM کو سپورٹ کرتا ہے۔ لائسنس کا حصول DrmSessionManager کے ذریعے ترتیب دیا جاتا ہے، جو لائسنس سرور کے ساتھ تعامل کرتا ہے۔ پریمیم ویڈیو (4K HDR) کے لیے، Widevine L1 کی ہارڈویئر سپورٹ درکار ہے، جو چپ سطح پر تحفظ فراہم کرتی ہے اور اسکرین کیپچر کو روکتی ہے۔ DRM نظام کا انتخاب ہدف پلیٹ فارم پر منحصر ہے: Widevine Android اور Chromecast پر، PlayReady Xbox اور Windows پر، FairPlay iOS اور Apple TV پر استعمال ہوتا ہے۔ ExoPlayer MPD فائل کی بنیاد پر دستیاب DRM نظام خودکار طور پر متعین کرتا ہے اور بنیادی منظرناموں کے لیے دستی ترتیب کی ضرورت نہیں ہوتی۔

Android پروجیکٹ میں ExoPlayer کیسے ضم کریں

ExoPlayer کو Android پروجیکٹ سے جوڑنا Gradle انحصار کے ذریعے کیا جاتا ہے۔ ورژن 2.19 سے، ExoPlayer AndroidX Media (androidx.media3) کا حصہ ہے، جو Jetpack Compose اور دیگر AndroidX اجزاء کے ساتھ مطابقت کو یقینی بناتا ہے۔ آئیے Kotlin میں مرحلہ وار انضمام دیکھتے ہیں۔

انحصار شامل کرنا

ExoPlayer ماڈیولز کو build.gradle فائل (Module) میں شامل کریں۔ کم از کم سیٹ میں core، ui اور مطلوبہ سٹریمنگ پروٹوکول کے لیے ماڈیول شامل ہے۔ DASH مواد کے پلے بیک کے لیے exoplayer-dash درکار ہے، HLS کے لیے — exoplayer-hls۔

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 میں بنیادی انضمام

Activity یا Fragment میں پلیئر بنانا اور ترتیب دینا۔ ExoPlayer ویڈیو اور بلٹ ان کنٹرولز کو ظاہر کرنے کے لیے PlayerView (یا تخصیص کے لیے StyledPlayerView) استعمال کرتا ہے۔ کم از کم ترتیب میں ExoPlayer.Builder کے ذریعے پلیئر بنانا اور ماخذ URI کے ساتھ MediaItem پاس کرنا شامل ہے۔

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()
    }
}

ایرر ہینڈلنگ اور حالتیں

پروڈکشن ایپلیکیشنز کے لیے، ممکنہ پلے بیک غلطیوں کا انتظام ضروری ہے: نیٹ ورک کی ناکامی، غیر معاون فارمیٹس، DRM لائسنسنگ کی غلطیاں۔ ExoPlayer onPlayerError، onPlaybackStateChanged اور onPlayWhenReadyChanged طریقوں کے ساتھ Player.Listener انٹرفیس فراہم کرتا ہے۔ صارف کو دوبارہ کوشش کے آپشن کے ساتھ معلوماتی غلطی کے پیغامات دکھانے کی سفارش کی جاتی ہے۔

ExoPlayer بمقابلہ MediaPlayer: موازنہ

ExoPlayer اور بلٹ ان MediaPlayer کے درمیان انتخاب Android ایپلیکیشن تیار کرتے وقت ایک عام سوال ہے۔ MediaPlayer ورژن 1.0 سے Android SDK کا حصہ ہے، جبکہ ExoPlayer ایک لائبریری ہے جس کے لیے Gradle انحصار درکار ہے۔ آئیے اہم معیاروں پر ان کے فرق دیکھتے ہیں۔

معیارExoPlayerMediaPlayer
معماریماڈیولر، مکمل طور پر Java/Kotlin میںسسٹم C++ اجزاء پر تہہ
سٹریمنگDASH, HLS, SmoothStreaming, RTSPصرف مقامی فائلیں اور HLS (Android 9+)
تخصیصمکمل (کوئی بھی جزو تبدیل کیا جا سکتا ہے)کم سے کم (صرف پیرامیٹرز)
اپ ڈیٹسGoogle Play یا APK کے ذریعے (OS سے آزاد)صرف Android اپ ڈیٹ (OTA) کے ذریعے
APK سائز+1–3 MB (ماڈیول کے مطابق)0 (OS کا حصہ)
کم از کم SDKAPI 16+ (Android 4.1)API 1+
DRMWidevine, PlayReady, ClearKeyWidevine (محدود)

ExoPlayer بہتر ہے ان منظرناموں میں جن میں سٹریمنگ (DASH, HLS)، UI تخصیص، DRM سپورٹ اور Android ورژن سے آزادی درکار ہوتی ہے۔ MediaPlayer سادہ ایپلیکیشنز کے لیے موزوں ہے جو مقامی میڈیا فائلیں چلاتی ہیں جہاں APK سائز اہم ہے اور انکولی سٹریمنگ کی کوئی ضرورت نہیں۔ نیٹ ورک سے مواد والی جدید ایپلیکیشنز کے لیے، ExoPlayer واضح انتخاب ہے۔

استثنا — API 16 (Android 4.1) سے کم کم از کم SDK والی ایپلیکیشنز، جو مارکیٹ میں تقریباً موجود نہیں ہیں۔ targetSdk 33+ اور کم از کم SDK 21+ والی تمام ایپلیکیشنز کے لیے، ExoPlayer نہ صرف ترجیحی ہے بلکہ مناسب ایکسٹینشنز کے ذریعے AV1 اور Dolby Vision جیسے جدید فارمیٹس کی معاونت کے لیے ضروری ہے۔

ExoPlayer کی جدید ترتیب

پروڈکشن ایپلیکیشنز کے لیے، ExoPlayer کے بنیادی انضمام میں اکثر اضافی ترتیب درکار ہوتی ہے: کیش مینجمنٹ، موبائل نیٹ ورکس کے لیے بفر آپٹیمائزیشن، تجزیہ انضمام اور آڈیو ٹریک سلیکشن تخصیص۔ آئیے جدید استعمال کے منظرنامے دیکھتے ہیں۔

مواد کیشنگ

CacheDataSourceFactory ڈاؤن لوڈ کردہ سیگمنٹس کو مقامی اسٹوریج میں کیش کرنے کی اجازت دیتا ہے، بار بار دیکھنے پر ٹریفک بچاتا ہے اور آف لائن پلے بیک کو قابل بناتا ہے۔ ExoPlayer exoplayer-cas لائبریری سے SimpleCache استعمال کرتا ہے — LRU اخراج سپورٹ اور سائز کی حدود کے ساتھ فائل پر مبنی کیشنگ۔

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()

نیٹ ورک سوئچنگ کا انتظام

موبائل ایپلیکیشنز میں، Wi-Fi اور سیلولر نیٹ ورک کے درمیان سوئچنگ کا انتظام اہم ہے۔ ExoPlayer نیٹ ورک کی حالت کو ٹریک کرنے کے لیے ConnectivityManager فراہم کرتا ہے۔ کنکشن ضائع ہونے پر، پلیئر کو روکنے کے بجائے پوزیشن محفوظ رکھتے ہوئے PAUSED حالت میں ڈالنے کی سفارش کی جاتی ہے۔ کنکشن بحال ہونے کے بعد، سیگمنٹس کو دوبارہ لوڈ کر کے پلے بیک دوبارہ شروع کریں۔

Jetpack Compose کے ساتھ انضمام

AndroidX Media3 کی ریلیز کے ساتھ، لائبریری کو Jetpack Compose کے لیے تجرباتی سپورٹ ملی۔ `AndroidView` جزو SurfaceView یا PlayerView کو لپیٹتا ہے، Compose درجہ بندی کے ساتھ مطابقت کو یقینی بناتا ہے۔ گہرے انضمام کے لیے، `androidx.media3:media3-ui-compose` لائبریری استعمال کی جاتی ہے، جو Compose مطابقت پلیئر کنٹرولز فراہم کرتی ہے۔

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 } }
    )
}

اکثر پوچھے گئے سوالات

ExoPlayer کے لیے کم از کم Android ورژن کیا ہے؟

ExoPlayer Android API 16+ (Android 4.1 Jelly Bean) کو سپورٹ کرتا ہے۔ تاہم، fMP4 سیگمنٹس کے ساتھ DASH اور HLS کے لیے API 21+ (Android 5.0 Lollipop) تجویز کی جاتی ہے۔ DRM ماڈیولز (Widevine) API 19+ درکار ہیں، اور ہارڈویئر HEVC ڈی کوڈنگ API 21 سے دستیاب ہے۔

کیا ExoPlayer ویڈیو کے بغیر صرف آڈیو کے لیے استعمال کیا جا سکتا ہے؟

ہاں، ExoPlayer آڈیو کے لیے بہترین ہے۔ صرف آڈیو پلے بیک کے لیے SurfaceView یا PlayerView کی ضرورت نہیں۔ ExoPlayer خود بخود آڈیو رینڈرر منتخب کرے گا اور پس منظر میں کام کرے گا۔ پس منظر میں پلے بیک کے لیے، سسٹم کنٹرولز کے ساتھ انضمام کے لیے MediaSessionService استعمال کرنے کی سفارش کی جاتی ہے۔

ExoPlayer میں آڈیو ٹریکس کے درمیان کیسے سوئچ کریں؟

ExoPlayer میں TrackSelector آڈیو ٹریک انتخاب کا انتظام کرتا ہے۔ سوئچ کرنے کے لیے، ترجیحی آڈیو زبان متعین کرتے ہوئے player.getCurrentTracks().groups اور player.setTrackSelectionParameters() استعمال کریں۔ متعدد آڈیو ٹریکس والے DASH اور HLS سٹریمز کے لیے، سوئچنگ پلے بیک میں رکاوٹ کے بغیر ہوتی ہے۔

کیا ExoPlayer سب ٹائٹلز کو سپورٹ کرتا ہے؟

ہاں، ExoPlayer ایمبیڈڈ (MP4، WebM کنٹینرز میں) اور بیرونی سب ٹائٹلز کو TTML، SRT، VTT اور CEA-608 فارمیٹس میں سپورٹ کرتا ہے۔ بیرونی سب ٹائٹلز کے لیے، ویڈیو سٹریم کے ساتھ ضم کرنے کے لیے SingleSampleMediaSource یا MergingMediaSource استعمال کیا جاتا ہے۔ اسٹائلائزڈ سب ٹائٹل ڈسپلے CaptionStyleCompat کے ذریعے ترتیب دیا جاتا ہے۔

ExoPlayer میں لائیو سٹریمنگ میں تاخیر کیسے کم کریں؟

کم تاخیر والی سٹریمنگ کے لیے، LoadControl کو چھوٹے ہدف بفر اقدار کے ساتھ ترتیب دیں: HLS LL اور DASH LL کے لیے DefaultLoadControl.Builder().setTargetBufferBytes(1024 * 512).setBufferDurationsMs(500, 2000, 500, 1000) استعمال کریں۔ نیز، لائیو نشریات سے پیچھے رہنے پر تیز بفر بھرنے کے لیے minPlaybackSpeed = 1.02 سیٹ کریں۔

خلاصہ

  • ExoPlayer — ماڈیولر آرکیٹیکچر اور مکمل تخصیص کے ساتھ Google کی اوپن سورس میڈیا پلیئر لائبریری۔
  • انکولی سٹریمنگ — ماڈیولر ایکسٹینشن سسٹم کے ذریعے DASH، HLS، SmoothStreaming اور RTSP کو سپورٹ کرتا ہے۔
  • DRM — Widevine، PlayReady اور ClearKey متحد API کے ساتھ exoplayer-drm ماڈیول کے ذریعے ضم ہوتے ہیں۔
  • کیشنگ — SimpleCache آف لائن پلے بیک کو قابل بناتا ہے اور بار بار دیکھنے پر ٹریفک بچاتا ہے۔
  • Compose — AndroidX Media3 سے، ExoPlayer AndroidView کے ذریعے Jetpack Compose کے ساتھ ضم ہوتا ہے۔
  • تخصیص — ہر جزو (MediaSource, TrackSelector, LoadControl, Renderer) تبدیل کیا جا سکتا ہے۔
  • سفارش کردہ تمام پروجیکٹس کے لیے ExoPlayer استعمال کریں جنہیں سٹریمنگ، DRM یا پلے بیک تخصیص کی ضرورت ہے۔

ہم ایک موبائل ایپلیکیشن ٹرنکی تیار کریں گے

IT Sectr 2017 سے اسٹارٹ اپس اور کاروبار کے لیے iOS اور Android ایپلیکیشنز بناتا ہے۔ ہم آپ کو مشورہ دیں گے اور بہترین حل تجویز کریں گے۔

پروجیکٹ پر بحث کریں

مزید پڑھیں