ExoPlayer, कई कंटेनर फ़ॉर्मैट वाले एचएलएस के साथ काम करता है. इसमें शामिल ऑडियो और वीडियो सैंपल के फ़ॉर्मैट भी काम करने चाहिए. ज़्यादा जानकारी के लिए, सैंपल फ़ॉर्मैट सेक्शन देखें. हम एचएलएस कॉन्टेंट के प्रोड्यूसर को, अच्छी क्वालिटी वाली एचएलएस स्ट्रीम जनरेट करने का सुझाव देते हैं. इसके बारे में यहां बताया गया है.
सुविधा | इनकी अनुमति है | टिप्पणियां |
---|---|---|
कंटेनर | ||
MPEG-TS | हां | |
FMP4/CMAF | हां | |
ADTS (AAC) | हां | |
MP3 | हां | |
सबटाइटल/कैप्शन | ||
सीईए-608 | हां | |
CEA-708 | हां | |
WebVTT | हां | |
मेटाडेटा | ||
आईडी3 | हां | |
एससीटीई-35 | नहीं | |
कॉन्टेंट की सुरक्षा | ||
एईएस-128 | हां | |
AES-128 का सैंपल | नहीं | |
वाइडवाइन | हां | एपीआई 19+ ("सेंस" स्कीम) और 25+ ("cbcs" स्कीम) |
PlayReady SL2000 | हां | सिर्फ़ Android TV के लिए |
सर्वर कंट्रोल | ||
डेल्टा अपडेट | हां | |
प्लेलिस्ट को फिर से लोड होने से रोकना | हां | |
पेज को पहले से लोड करने के सुझावों को लोड होने से रोकना | हां | जिन बाइट रेंज की लंबाई तय नहीं की गई है उनके लिए |
लाइव वीडियो चलाना | ||
नियमित तौर पर लाइव वीडियो चलाना | हां | |
लो-लेटेंसी एचएलएस (Apple) | हां | |
लो-लेटेंसी एचएलएस (कम्यूनिटी) | नहीं | |
कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) | हां | इंटिग्रेशन गाइड |
MediaItem का इस्तेमाल करना
एचएलएस स्ट्रीम चलाने के लिए, आपको एचएलएस मॉड्यूल का इस्तेमाल करना होगा.
Kotlin
implementation("androidx.media3:media3-exoplayer-hls:1.4.1")
ग्रूवी
implementation "androidx.media3:media3-exoplayer-hls:1.4.1"
इसके बाद, HLS प्लेलिस्ट यूआरआई के लिए MediaItem
बनाया जा सकता है और उसे
प्लेयर.
Kotlin
// Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(hlsUri)) // Prepare the player. player.prepare()
Java
// Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the media item to be played. player.setMediaItem(MediaItem.fromUri(hlsUri)); // Prepare the player. player.prepare();
अगर आपका यूआरआई .m3u8
पर खत्म नहीं होता है, तो कॉन्टेंट के टाइप के बारे में साफ़ तौर पर बताने के लिए, MediaItem.Builder
के setMimeType
में MimeTypes.APPLICATION_M3U8
को पास किया जा सकता है.
मीडिया आइटम का यूआरआई, मीडिया प्लेलिस्ट या मल्टीवैरिएंट प्लेलिस्ट पर ले जा सकता है. अगर यूआरआई कई वैरिएंट वाली ऐसी प्लेलिस्ट पर ले जाता है जिसमें कई वैरिएंट के बारे में बताया गया है
#EXT-X-STREAM-INF
टैग हैं, तो ExoPlayer अपने-आप इनके बीच में बदल जाएगा
उपलब्ध बैंडविथ और डिवाइस की सुविधाओं, दोनों को ध्यान में रखते हुए वैरिएंट बनाने के लिए किया जा सकता है.
HlsMediaSource का इस्तेमाल करना
पसंद के मुताबिक बनाने के ज़्यादा विकल्पों के लिए, HlsMediaSource
बनाएं और उसे MediaItem
के बजाय सीधे प्लेयर को पास करें.
Kotlin
// Create a data source factory. val dataSourceFactory: DataSource.Factory = DefaultHttpDataSource.Factory() // Create a HLS media source pointing to a playlist uri. val hlsMediaSource = HlsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(hlsUri)) // Create a player instance. val player = ExoPlayer.Builder(context).build() // Set the HLS media source as the playlist with a single media item. player.setMediaSource(hlsMediaSource) // Prepare the player. player.prepare()
Java
// Create a data source factory. DataSource.Factory dataSourceFactory = new DefaultHttpDataSource.Factory(); // Create a HLS media source pointing to a playlist uri. HlsMediaSource hlsMediaSource = new HlsMediaSource.Factory(dataSourceFactory).createMediaSource(MediaItem.fromUri(hlsUri)); // Create a player instance. ExoPlayer player = new ExoPlayer.Builder(context).build(); // Set the HLS media source as the playlist with a single media item. player.setMediaSource(hlsMediaSource); // Prepare the player. player.prepare();
मेनिफ़ेस्ट ऐक्सेस करना
Player.getCurrentManifest
को कॉल करके, मौजूदा मेनिफ़ेस्ट को वापस पाया जा सकता है.
HLS के लिए, आपको दिखाए गए ऑब्जेक्ट को HlsManifest
पर कास्ट करना चाहिए. कॉन्टेंट बनाने
Player.Listener
के onTimelineChanged
कॉलबैक को कभी भी कॉल किया जाता है
मेनिफ़ेस्ट लोड हो जाता है. मांग पर उपलब्ध कॉन्टेंट के लिए ऐसा एक बार होगा और लाइव कॉन्टेंट के लिए कई बार. नीचे दिया गया कोड स्निपेट दिखाता है कि कोई ऐप्लिकेशन
जब भी मेनिफ़ेस्ट लोड होता है, तो कुछ काम किया जा सकता है.
Kotlin
player.addListener( object : Player.Listener { override fun onTimelineChanged(timeline: Timeline, @TimelineChangeReason reason: Int) { val manifest = player.currentManifest if (manifest is HlsManifest) { // Do something with the manifest. } } } )
Java
player.addListener( new Player.Listener() { @Override public void onTimelineChanged( Timeline timeline, @Player.TimelineChangeReason int reason) { Object manifest = player.getCurrentManifest(); if (manifest != null) { HlsManifest hlsManifest = (HlsManifest) manifest; // Do something with the manifest. } } });
प्लेबैक को अपनी पसंद के मुताबिक बनाया जा रहा है
ExoPlayer में, वीडियो चलाने के अनुभव को अपने ऐप्लिकेशन की ज़रूरतों के हिसाब से बनाने के कई तरीके उपलब्ध हैं. उदाहरणों के लिए, पसंद के मुताबिक बनाने वाला पेज देखें.
बिना चंक वाली तैयारी की सुविधा बंद करना
डिफ़ॉल्ट रूप से, ExoPlayer बिना चंक वाले तरीके का इस्तेमाल करेगा. इसका मतलब है कि ExoPlayer, स्ट्रीम तैयार करने के लिए सिर्फ़ मल्टीवैरिएंट प्लेलिस्ट में मौजूद जानकारी का इस्तेमाल करेगा. ऐसा तब होता है, जब #EXT-X-STREAM-INF
टैग में CODECS
एट्रिब्यूट मौजूद हो.
अगर आपके मीडिया सेगमेंट में, मल्टीप्लेक्स किए गए ऐसे सबटाइटल ट्रैक शामिल हैं जिन्हें #EXT-X-MEDIA:TYPE=CLOSED-CAPTIONS
टैग के साथ मल्टीवैरिएंट प्लेलिस्ट में नहीं बताया गया है, तो आपको इस सुविधा को बंद करना पड़ सकता है. अगर ऐसा नहीं है, तो ये सबटाइटल ट्रैक
का पता नहीं लगाया और चलाया नहीं जा सकता. आसानी से की जाने वाली तैयारी को यहां से बंद किया जा सकता है:
HlsMediaSource.Factory
जैसा कि नीचे दिए गए स्निपेट में दिखाया गया है. ध्यान दें कि इससे वीडियो शुरू होने में लगने वाला समय बढ़ जाएगा. ऐसा इसलिए, क्योंकि ExoPlayer को इन अतिरिक्त ट्रैक को खोजने के लिए, मीडिया सेगमेंट डाउनलोड करना होगा. इसलिए, बेहतर होगा कि आप मल्टीवैरिएंट प्लेलिस्ट में सबटाइटल वाले ट्रैक का एलान करें.
Kotlin
val hlsMediaSource = HlsMediaSource.Factory(dataSourceFactory) .setAllowChunklessPreparation(false) .createMediaSource(MediaItem.fromUri(hlsUri))
Java
HlsMediaSource hlsMediaSource = new HlsMediaSource.Factory(dataSourceFactory) .setAllowChunklessPreparation(false) .createMediaSource(MediaItem.fromUri(hlsUri));
अच्छी क्वालिटी का एचएलएस कॉन्टेंट बनाना
ExoPlayer का ज़्यादा से ज़्यादा फ़ायदा पाने के लिए, HLS कॉन्टेंट को बेहतर बनाने के लिए कुछ दिशा-निर्देशों का पालन किया जा सकता है. पूरी जानकारी के लिए, ExoPlayer में एचएलएस प्लेबैक के बारे में Medium पर पोस्ट पढ़ें. खास बातें यहां दी गई हैं:
- सेगमेंट की सटीक अवधि का इस्तेमाल करें.
- लगातार चलने वाली मीडिया स्ट्रीम का इस्तेमाल करें; हर मीडिया स्ट्रक्चर में बदलाव न होने दें सेगमेंट.
#EXT-X-INDEPENDENT-SEGMENTS
टैग का इस्तेमाल करें.- वीडियो और ऑडियो, दोनों तरह की फ़ाइलों के बजाय, डिमक्स की गई स्ट्रीम को प्राथमिकता दें.
- मल्टीवैरिएंट प्लेलिस्ट में ऐसी सारी जानकारी शामिल करें जो आपके पास उपलब्ध हो.
नीचे दिए गए दिशा-निर्देश, खास तौर पर लाइव स्ट्रीम पर लागू होते हैं:
#EXT-X-PROGRAM-DATE-TIME
टैग का इस्तेमाल करें.#EXT-X-DISCONTINUITY-SEQUENCE
टैग का इस्तेमाल करें.- लाइव विंडो की अवधि ज़्यादा होनी चाहिए. एक मिनट या उससे ज़्यादा समय का वीडियो अच्छा होता है.