ExoPlayer, कई कंटेनर फ़ॉर्मैट वाले एचएलएस के साथ काम करता है. शामिल ऑडियो और वीडियो सैंपल प्रारूप भी समर्थित होने चाहिए ( ज़्यादा जानकारी के लिए, फ़ॉर्मैट का सैंपल सेक्शन देखें). बुध एचएलएस कॉन्टेंट बनाने वालों को अच्छी क्वालिटी की एचएलएस स्ट्रीम जनरेट करने के लिए कहें. जैसा बताया गया है यहां पढ़ें.
सुविधा | इनकी अनुमति है | टिप्पणियां |
---|---|---|
कंटेनर | ||
एमपीईजी-टीएस | हां | |
FMP4/CMAF | हां | |
ADTS (AAC) | हां | |
MP3 | हां | |
सबटाइटल/सबटाइटल | ||
सीईए-608 | हां | |
CEA-708 | हां | |
WebVTT | हां | |
मेटाडेटा | ||
ID3 | हां | |
एससीटीई-35 | नहीं | |
कॉन्टेंट की सुरक्षा | ||
एईएस-128 | हां | |
AES-128 का नमूना | नहीं | |
वाइडवाइन | हां | एपीआई 19+ ("सेंस" स्कीम) और 25+ ("cbcs" स्कीम) |
प्लेरेडी 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
पर खत्म नहीं होता है, तो आप MimeTypes.APPLICATION_M3U8
को पास कर सकते हैं
MediaItem.Builder
के setMimeType
तक को साफ़ तौर पर यह बताने के लिए कि
कॉन्टेंट.
मीडिया आइटम का यूआरआई किसी मीडिया प्लेलिस्ट या मल्टीवैरिएंट की ओर इशारा कर सकता है
प्लेलिस्ट. अगर यूआरआई कई वैरिएंट वाली ऐसी प्लेलिस्ट पर ले जाता है जिसमें कई वैरिएंट के बारे में बताया गया है
#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
पर कॉल करके, मौजूदा मेनिफ़ेस्ट को वापस लाया जा सकता है.
एचएलएस के लिए, आपको लौटाए गए ऑब्जेक्ट को 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 में, पूरी जानकारी देखें. खास बातें यहां दी गई हैं:
- सेगमेंट की सटीक अवधि का इस्तेमाल करें.
- लगातार चलने वाली मीडिया स्ट्रीम का इस्तेमाल करें; हर मीडिया स्ट्रक्चर में बदलाव न होने दें सेगमेंट.
#EXT-X-INDEPENDENT-SEGMENTS
टैग का इस्तेमाल करें.- जिन फ़ाइलों में वीडियो और ऑडियो, दोनों शामिल होते हैं उनके बजाय डिमक्स की गई स्ट्रीम को प्राथमिकता दें.
- मल्टीवैरिएंट प्लेलिस्ट में ऐसी सारी जानकारी शामिल करें जो आपके पास उपलब्ध हो.
नीचे दिए गए दिशा-निर्देश, खास तौर पर लाइव स्ट्रीम पर लागू होते हैं:
#EXT-X-PROGRAM-DATE-TIME
टैग का इस्तेमाल करें.#EXT-X-DISCONTINUITY-SEQUENCE
टैग का इस्तेमाल करें.- एक लंबी लाइव विंडो उपलब्ध कराएं. एक मिनट या उससे ज़्यादा का समय बढ़िया है.