ExoPlayer के साथ काम करने वाले फ़ॉर्मैट तय करते समय, यह ध्यान रखना ज़रूरी है कि "मीडिया फ़ॉर्मैट" कई लेवल पर तय किए जाते हैं. सबसे कम लेवल से लेकर सबसे ज़्यादा लेवल तक, ये हैं:
- हर मीडिया सैंपल का फ़ॉर्मैट. जैसे, वीडियो का फ़्रेम या ऑडियो का फ़्रेम. ये सैंपल फ़ॉर्मैट हैं. ध्यान दें कि किसी वीडियो फ़ाइल में कम से कम दो सैंपल फ़ॉर्मैट में मीडिया होता है. एक वीडियो के लिए (उदाहरण के लिए, H.264) और दूसरा ऑडियो के लिए (उदाहरण के लिए, AAC).
- उस कंटेनर का फ़ॉर्मैट जिसमें मीडिया सैंपल और उनसे जुड़ा मेटाडेटा मौजूद होता है. ये कंटेनर फ़ॉर्मैट हैं. मीडिया फ़ाइल में एक ही कंटेनर फ़ॉर्मैट होता है. उदाहरण के लिए, MP4. इसे आम तौर पर फ़ाइल एक्सटेंशन से दिखाया जाता है. ध्यान दें कि ऑडियो-ओनली फ़ॉर्मैट (उदाहरण के लिए, MP3) के लिए, सैंपल और कंटेनर फ़ॉर्मैट एक ही हो सकते हैं.
- डैश, SmoothStreaming, और HLS जैसी अडैप्टिव स्ट्रीमिंग टेक्नोलॉजी. ये मीडिया फ़ॉर्मैट नहीं हैं. हालांकि, यह बताना ज़रूरी है कि ExoPlayer किस लेवल पर काम करता है.
यहां दिए गए सेक्शन में, ExoPlayer के साथ काम करने वाले Android वर्शन के बारे में बताया गया है. इसमें सबसे नए वर्शन से लेकर सबसे पुराने वर्शन तक की जानकारी दी गई है. आखिरी दो सेक्शन में, सबटाइटल के स्टैंडअलोन फ़ॉर्मैट और एचडीआर वीडियो चलाने की सुविधा के बारे में बताया गया है.
अडैप्टिव स्ट्रीमिंग
DASH
ExoPlayer, DASH के साथ-साथ कई कंटेनर फ़ॉर्मैट के साथ काम करता है. मीडिया स्ट्रीम को डीमक्स किया जाना चाहिए. इसका मतलब है कि वीडियो, ऑडियो, और टेक्स्ट को DASH मेनिफ़ेस्ट में अलग-अलग AdaptationSet एलिमेंट में तय किया जाना चाहिए. हालांकि, CEA-608 इसका अपवाद है. इसके बारे में यहां दी गई टेबल में बताया गया है. इसमें शामिल ऑडियो और वीडियो सैंपल के फ़ॉर्मैट भी काम करने चाहिए. ज़्यादा जानकारी के लिए, सैंपल फ़ॉर्मैट सेक्शन देखें.
| सुविधा | अनुमति है | टिप्पणियां |
|---|---|---|
| कंटेनर | ||
| FMP4 | हां | सिर्फ़ डीमक्स की गई स्ट्रीम |
| WebM | हां | सिर्फ़ डीमक्स की गई स्ट्रीम |
| Matroska | हां | सिर्फ़ डीमक्स की गई स्ट्रीम |
| MPEG-TS | नहीं | सहायता उपलब्ध नहीं है |
| सबटाइटल / कैप्शन | ||
| TTML | हां | ISO/IEC 14496-30 के मुताबिक, रॉ या FMP4 में एम्बेड किया गया |
| WebVTT | हां | ISO/IEC 14496-30 के मुताबिक, रॉ या FMP4 में एम्बेड किया गया |
| CEA-608 | हां | SCTE Accessibility descriptors का इस्तेमाल करके सिग्नल देने पर, FMP4 में एम्बेड किया जाता है |
| CEA-708 | हां | SCTE Accessibility descriptors का इस्तेमाल करके सिग्नल देने पर, FMP4 में एम्बेड किया जाता है |
| मेटाडेटा | ||
| ईएमएसजी मेटाडेटा | हां | FMP4 में एम्बेड किया गया |
| कॉन्टेंट की सुरक्षा | ||
| वाइडवाइन | हां | "cenc" स्कीम: API 19 या इसके बाद का वर्शन; "cbcs" स्कीम: API 25 या इसके बाद का वर्शन |
| PlayReady SL2000 | हां | Android TV, सिर्फ़ "cenc" स्कीम के लिए |
| ClearKey | हां | एपीआई 21 या इससे ऊपर का वर्शन, सिर्फ़ "cenc" स्कीम |
| विज्ञापन शामिल करना | ||
| एक से ज़्यादा अवधि वाला प्लेबैक | हां | |
| सर्वर की मदद से विज्ञापन डालने की सुविधा (xlinks) | नहीं | |
| IMA सर्वर-साइड और क्लाइंट-साइड विज्ञापन | हां | विज्ञापन डालने के बारे में गाइड |
| लाइव प्लेबैक | ||
| लाइव स्ट्रीम को सामान्य तरीके से चलाना | हां | |
| अल्ट्रा लो-लेटेंसी सीएमएएफ़ लाइव प्लेबैक | हां | |
| कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) | हां | CMCD इंटिग्रेशन गाइड |
SmoothStreaming
ExoPlayer, FMP4 कंटेनर फ़ॉर्मैट के साथ SmoothStreaming का इस्तेमाल करने की सुविधा देता है. मीडिया स्ट्रीम को डीमक्स किया जाना चाहिए. इसका मतलब है कि वीडियो, ऑडियो, और टेक्स्ट को SmoothStreaming मेनिफ़ेस्ट में अलग-अलग StreamIndex एलिमेंट में तय किया जाना चाहिए. इसमें शामिल ऑडियो और वीडियो सैंपल के फ़ॉर्मैट भी काम करने चाहिए. ज़्यादा जानकारी के लिए, सैंपल के फ़ॉर्मैट सेक्शन देखें.
| सुविधा | अनुमति है | टिप्पणियां |
|---|---|---|
| कंटेनर | ||
| FMP4 | हां | सिर्फ़ डीमक्स की गई स्ट्रीम |
| सबटाइटल | ||
| TTML | हां | FMP4 में एम्बेड किया गया |
| कॉन्टेंट की सुरक्षा | ||
| PlayReady SL2000 | हां | सिर्फ़ Android TV के लिए |
| लाइव प्लेबैक | ||
| लाइव स्ट्रीम को सामान्य तरीके से चलाना | हां | |
| कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) | हां | इंटिग्रेशन गाइड |
एचएलएस
ExoPlayer, कई कंटेनर फ़ॉर्मैट के साथ एचएलएस के साथ काम करता है. ऑडियो और वीडियो के सैंपल के फ़ॉर्मैट भी काम करने चाहिए. ज़्यादा जानकारी के लिए, सैंपल के फ़ॉर्मैट सेक्शन देखें. हम एचएलएस कॉन्टेंट बनाने वाले लोगों को, अच्छी क्वालिटी वाली एचएलएस स्ट्रीम जनरेट करने के लिए प्रोत्साहित करते हैं. इसके बारे में इस ब्लॉग पोस्ट में बताया गया है.
| सुविधा | अनुमति है | टिप्पणियां |
|---|---|---|
| कंटेनर | ||
| MPEG-TS | हां | |
| FMP4/CMAF | हां | |
| ADTS (AAC) | हां | |
| MP3 | हां | |
| सबटाइटल / कैप्शन | ||
| CEA-608 | हां | |
| CEA-708 | हां | |
| WebVTT | हां | |
| मेटाडेटा | ||
| ID3 | हां | |
| SCTE-35 | नहीं | |
| कॉन्टेंट की सुरक्षा | ||
| AES-128 | हां | |
| AES-128 का सैंपल | नहीं | |
| वाइडवाइन | हां | एपीआई 19+ ("cenc" स्कीम) और 25+ ("cbcs" स्कीम) |
| PlayReady SL2000 | हां | सिर्फ़ Android TV के लिए |
| सर्वर कंट्रोल | ||
| डेल्टा अपडेट | हां | |
| प्लेलिस्ट को फिर से लोड करने से रोकना | हां | |
| प्रीलोड करने के सुझावों को लोड होने से रोकना | हां | जिन बाइट रेंज की लंबाई तय नहीं की गई है उन्हें छोड़कर |
| विज्ञापन शामिल करना | ||
| सर्वर के ज़रिए विज्ञापन डालने की सुविधा (इंटरस्टीशियल विज्ञापन) | कुछ हद तक | सिर्फ़ X-ASSET-URI वाला वीओडी.
लाइव स्ट्रीम और
X-ASSET-LIST को बाद में जोड़ा जाएगा. |
| IMA सर्वर-साइड और क्लाइंट-साइड विज्ञापन | हां | विज्ञापन डालने के बारे में गाइड |
| लाइव प्लेबैक | ||
| लाइव स्ट्रीम को सामान्य तरीके से चलाना | हां | |
| लो-लेटेंसी एचएलएस (ऐपल) | हां | |
| लो-लेटेंसी एचएलएस (कम्यूनिटी) | नहीं | |
| कॉमन मीडिया क्लाइंट डेटा सीएमसीडी | हां | CMCD इंटिग्रेशन गाइड |
प्रोग्रेसिव कंटेनर फ़ॉर्मैट
नीचे दिए गए कंटेनर फ़ॉर्मैट में मौजूद स्ट्रीम को ExoPlayer सीधे तौर पर चला सकता है. ऑडियो और वीडियो के सैंपल के फ़ॉर्मैट भी काम करने चाहिए. ज़्यादा जानकारी के लिए, सैंपल के फ़ॉर्मैट सेक्शन देखें. इमेज कंटेनर और फ़ॉर्मैट के बारे में जानने के लिए, इमेज देखें.
| कंटेनर फ़ॉर्मैट | अनुमति है | टिप्पणियां |
|---|---|---|
| MP4 | हां | |
| M4A | हां | |
| FMP4 | हां | |
| WebM | हां | |
| Matroska | हां | |
| MP3 | हां | कुछ स्ट्रीम में सिर्फ़ कॉन्स्टेंट बिटरेट सीकिंग का इस्तेमाल किया जा सकता है** |
| Ogg | हां | इसमें Vorbis, Opus, और FLAC शामिल हैं |
| WAV | हां | |
| MPEG-TS | हां | |
| MPEG-PS | हां | |
| FLV | हां | आगे-पीछे नहीं किया जा सकता* |
| ADTS (AAC) | हां | सिर्फ़ कॉन्स्टेंट बिटरेट सीकिंग का इस्तेमाल करके ढूंढा जा सकता है** |
| FLAC | हां | FLAC लाइब्रेरी या ExoPlayer लाइब्रेरी में मौजूद FLAC एक्सट्रैक्टर का इस्तेमाल करके*** |
| एएमआर | हां | सिर्फ़ कॉन्स्टेंट बिटरेट सीकिंग का इस्तेमाल करके ढूंढा जा सकता है** |
* कंटेनर, मेटाडेटा (उदाहरण के लिए, सैंपल इंडेक्स) उपलब्ध नहीं कराता है. इसलिए, मीडिया प्लेयर को बेहतर तरीके से सीक करने की अनुमति नहीं दी जा सकती. अगर आपको सीकिंग की सुविधा चाहिए, तो हमारा सुझाव है कि आप ज़्यादा सही कंटेनर फ़ॉर्मैट का इस्तेमाल करें.
** इन एक्सट्रैक्टर में, FLAG_ENABLE_CONSTANT_BITRATE_SEEKING फ़्लैग होते हैं. इनका इस्तेमाल, बिटरेट को स्थिर मानकर अनुमानित सीकिंग की सुविधा चालू करने के लिए किया जाता है. यह सुविधा डिफ़ॉल्ट रूप से चालू नहीं होती. इस सुविधा को उन सभी एक्सट्रैक्टर के लिए चालू करने का सबसे आसान तरीका है जो इसका इस्तेमाल कर सकते हैं. इसके लिए, DefaultExtractorsFactory.setConstantBitrateSeekingEnabled का इस्तेमाल करें. इसके बारे में यहां बताया गया है.
*** FLAC लाइब्रेरी एक्सट्रैक्टर, रॉ ऑडियो आउटपुट करता है. इसे सभी एपीआई लेवल पर फ़्रेमवर्क से मैनेज किया जा सकता है. ExoPlayer लाइब्रेरी का FLAC एक्सट्रैक्टर, FLAC ऑडियो फ़्रेम आउटपुट करता है. इसलिए, यह FLAC डिकोडर पर निर्भर करता है. उदाहरण के लिए, MediaCodec
डिकोडर जो FLAC को हैंडल करता है (एपीआई लेवल 27 से ज़रूरी है) या FLAC की सुविधा चालू करके FFmpeg लाइब्रेरी. अगर ऐप्लिकेशन को FLAC लाइब्रेरी की मदद से बनाया गया है, तो DefaultExtractorsFactory एक्सटेंशन एक्सट्रैक्टर का इस्तेमाल करता है.
ऐसा न होने पर, यह ExoPlayer लाइब्रेरी एक्सट्रैक्टर का इस्तेमाल करता है.
आरटीएसपी
ExoPlayer, लाइव और मांग पर उपलब्ध RTSP, दोनों के साथ काम करता है. यहां दिए गए सैंपल फ़ॉर्मैट और नेटवर्क टाइप इस्तेमाल किए जा सकते हैं.
नमूने के ऐसे फ़ॉर्मैट जिनका इस्तेमाल किया जा सकता है
- H264 (एसडीपी मीडिया के ब्यौरे में, डिकोडर को शुरू करने के लिए fmtp एट्रिब्यूट में SPS/PPS डेटा शामिल होना चाहिए).
- AAC (ADTS बिटस्ट्रीम के साथ).
- AC3.
इस्तेमाल किए जा सकने वाले नेटवर्क टाइप
- यूडीपी यूनिकास्ट पर आरटीपी (मल्टीकास्ट काम नहीं करता).
- इंटरलीव्ड आरटीएसपी, टीसीपी का इस्तेमाल करके आरटीएसपी पर आरटीपी.
फ़ॉर्मैट के उदाहरण
डिफ़ॉल्ट रूप से, ExoPlayer, Android के प्लैटफ़ॉर्म डिकोडर का इस्तेमाल करता है. इसलिए, सैंपल के लिए काम करने वाले फ़ॉर्मैट, ExoPlayer के बजाय प्लैटफ़ॉर्म पर निर्भर करते हैं. Android डिवाइसों पर काम करने वाले सैंपल फ़ॉर्मैट के बारे में जानने के लिए, काम करने वाले मीडिया फ़ॉर्मैट पर जाएं. ध्यान दें कि अलग-अलग डिवाइसों पर, यहां दिए गए फ़ॉर्मैट के अलावा अन्य फ़ॉर्मैट भी काम कर सकते हैं.
Android के प्लैटफ़ॉर्म डिकोडर के अलावा, ExoPlayer सॉफ़्टवेयर डिकोडर एक्सटेंशन का भी इस्तेमाल कर सकता है. इन्हें मैन्युअल तरीके से बनाया जाना चाहिए. साथ ही, इनका इस्तेमाल करने वाले प्रोजेक्ट में इन्हें शामिल किया जाना चाहिए. फ़िलहाल, हम AV1, VP9, FLAC, Opus, FFmpeg, MIDI, IAMF, और MPEG-H के लिए सॉफ़्टवेयर डिकोडर लाइब्रेरी उपलब्ध कराते हैं.
FFmpeg लाइब्रेरी
FFmpeg लाइब्रेरी, अलग-अलग ऑडियो सैंपल फ़ॉर्मैट को डिकोड करने की सुविधा देती है. लाइब्रेरी बनाते समय, यह चुना जा सकता है कि कौनसे डिकोडर शामिल करने हैं. इसके बारे में लाइब्रेरी के README.md में बताया गया है. यहां दी गई टेबल में, ऑडियो सैंपल फ़ॉर्मैट को उससे जुड़े FFmpeg डिकोडर के नाम के साथ मैप किया गया है.
| फ़ॉर्मैट का उदाहरण | डिकोडर के नाम |
|---|---|
| Vorbis | vorbis |
| Opus | opus |
| FLAC | flac |
| ALAC | alac |
| पीसीएम μ-लॉ | pcm_mulaw |
| पीसीएम ए-लॉ | pcm_alaw |
| MP1, MP2, MP3 | mp3 |
| AMR-NB | amrnb |
| AMR-WB | amrwb |
| AAC | aac |
| AC-3 | ac3 |
| E-AC-3 | eac3 |
| DTS, DTS-HD | dca |
| TrueHD | mlp truehd |
इमेज
ExoPlayer इन इमेज फ़ॉर्मैट के साथ काम करता है. अलग-अलग फ़ॉर्मैट के लिए सहायता देने वाली बाहरी लाइब्रेरी के साथ इंटिग्रेट करने का तरीका जानने के लिए, इमेज लोड करने वाली लाइब्रेरी देखें.
| इमेज फ़ॉर्मैट | अनुमति है | नोट |
|---|---|---|
| BMP | हां | |
| GIF | नहीं | एक्सट्रैक्टर की सुविधा उपलब्ध नहीं है |
| JPEG | हां | |
| JPEG मोशन फ़ोटो | हां | स्थिर इमेज और वीडियो का इस्तेमाल किया जा सकता है |
| JPEG अल्ट्रा एचडीआर | हां | Android 14 से पहले वाले वर्शन या नॉन-एचडीआर डिसप्ले पर एसडीआर पर वापस आ जाता है |
| PNG | हां | |
| WebP | हां | |
| HEIF/HEIC | हां | |
| HEIC फ़ॉर्मैट वाली मोशन फ़ोटो | हां | |
| AVIF (बेसलाइन) | हां | सिर्फ़ Android 14 और इसके बाद के वर्शन पर डिकोड किया जा सकता है |
सबटाइटल के स्टैंडअलोन फ़ॉर्मैट
ExoPlayer, कई फ़ॉर्मैट में स्टैंडअलोन सबटाइटल फ़ाइलों के साथ काम करता है. सबटाइटल फ़ाइलों को साइड-लोड किया जा सकता है. इसके बारे में मीडिया आइटम पेज पर बताया गया है.
| कंटेनर फ़ॉर्मैट | अनुमति है | MIME प्रकार |
|---|---|---|
| WebVTT | हां | MimeTypes.TEXT_VTT |
| टीटीएमएल / एसएमपीटीई-टीटी | हां | MimeTypes.APPLICATION_TTML |
| SubRip | हां | MimeTypes.APPLICATION_SUBRIP |
| SubStationAlpha (SSA/ASS) | हां | MimeTypes.TEXT_SSA |
एचडीआर वीडियो चलाना
ExoPlayer, अलग-अलग कंटेनर में मौजूद हाई डाइनैमिक रेंज (एचडीआर) वीडियो को एक्सट्रैक्ट करता है. इनमें MP4 में Dolby Vision और Matroska/WebM में HDR10+ शामिल हैं. एचडीआर कॉन्टेंट को डिकोड करने और दिखाने की सुविधा, Android प्लैटफ़ॉर्म और डिवाइस पर काम करती है. Android के अलग-अलग वर्शन पर एचडीआर वीडियो चलाने की सुविधा और इससे जुड़ी सीमाओं के बारे में जानने के लिए, एचडीआर वीडियो चलाने की सुविधा देखें.
किसी ऐसी एचडीआर स्ट्रीम को चलाने के दौरान जिसके लिए किसी खास कोडेक प्रोफ़ाइल के साथ काम करना ज़रूरी है, ExoPlayer का डिफ़ॉल्ट MediaCodec सिलेक्टर, उस प्रोफ़ाइल के साथ काम करने वाला डिकोडर चुनेगा. भले ही, कोडेक की सूची में उसी MIME टाइप का कोई ऐसा डिकोडर सबसे ऊपर दिखता हो जो उस प्रोफ़ाइल के साथ काम नहीं करता. इस वजह से, ऐसे मामलों में सॉफ़्टवेयर डिकोडर चुना जा सकता है जहां स्ट्रीम, एक ही MIME टाइप के लिए हार्डवेयर डिकोडर की क्षमताओं से ज़्यादा हो.