एचएलएस

ExoPlayer, कई कंटेनर फ़ॉर्मैट वाले एचएलएस के साथ काम करता है. शामिल ऑडियो और वीडियो सैंपल प्रारूप भी समर्थित होने चाहिए ( ज़्यादा जानकारी के लिए, फ़ॉर्मैट का सैंपल सेक्शन देखें). बुध एचएलएस कॉन्टेंट बनाने वालों को अच्छी क्वालिटी की एचएलएस स्ट्रीम जनरेट करने के लिए कहें. जैसा बताया गया है यहां पढ़ें.

सुविधा इनकी अनुमति है टिप्पणियां
कंटेनर
एमपीईजी-टीएस हां
FMP4/CMAF हां
ADTS (AAC) हां
MP3 हां
सबटाइटल/सबटाइटल
सीईए-608 हां
CEA-708 हां
WebVTT हां
मेटाडेटा
आईडी3 हां
एससीटीई-35 नहीं
कॉन्टेंट की सुरक्षा
एईएस-128 हां
AES-128 का नमूना नहीं
वाइडवाइन हां एपीआई 19+ ("सेंस" स्कीम) और 25+ ("cbcs" स्कीम)
प्लेरेडी SL2000 हां सिर्फ़ Android TV के लिए
सर्वर कंट्रोल
डेल्टा से जुड़े अपडेट हां
प्लेलिस्ट को फिर से लोड करने से रोका जा रहा है हां
पहले से लोड किए जाने वाले संकेतों का लोड ब्लॉक करना हां अनिश्चित लंबाई वाली बाइटरेंज को छोड़कर
लाइव वीडियो चलाना
नियमित तौर पर लाइव वीडियो चलाना हां
लो-लेटेंसी एचएलएस (Apple) हां
लो-लेटेंसी एचएलएस (कम्यूनिटी) नहीं
कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) हां इंटिग्रेशन गाइड

MediaItem का इस्तेमाल किया जा रहा है

एचएलएस स्ट्रीम चलाने के लिए, आपको एचएलएस मॉड्यूल पर निर्भर होना होगा.

Kotlin

implementation("androidx.media3:media3-exoplayer-hls:1.4.0")

ग्रूवी

implementation "androidx.media3:media3-exoplayer-hls:1.4.0"

इसके बाद, 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 टैग का इस्तेमाल करें.
  • एक लंबी लाइव विंडो उपलब्ध कराएं. एक मिनट या उससे ज़्यादा का समय बढ़िया है.