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

एडेप्टिव बिटरेट स्विचिंग

ABR (Adaptive Bitrate) ExoPlayer में 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) सपोर्ट करता है। हालाँकि, DASH और HLS के लिए fMP4 सेगमेंट के साथ, 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 एप्लिकेशन बनाता है। हम आपको सलाह देंगे और सर्वोत्तम समाधान प्रस्तावित करेंगे।

परियोजना पर चर्चा करें

यह भी पढ़ें