ExoPlayer के साथ काम करने वाले फ़ॉर्मैट तय करते समय, यह ध्यान रखना ज़रूरी है कि "मीडिया फ़ॉर्मैट" कई लेवल पर तय किए जाते हैं. सबसे कम से लेकर सबसे ज़्यादा लेवल तक, ये हैं:
- अलग-अलग मीडिया सैंपल का फ़ॉर्मैट. जैसे, वीडियो का फ़्रेम या ऑडियो का फ़्रेम. ये सैंपल फ़ॉर्मैट हैं. ध्यान दें कि किसी सामान्य वीडियो फ़ाइल में, कम से कम दो सैंपल फ़ॉर्मैट में मीडिया शामिल होगा. एक फ़ॉर्मैट वीडियो के लिए (उदाहरण के लिए, H.264) और दूसरा ऑडियो के लिए (उदाहरण के लिए, AAC).
- उस कंटेनर का फ़ॉर्मैट जिसमें मीडिया सैंपल और उससे जुड़ा मेटाडेटा होता है. ये कंटेनर फ़ॉर्मैट हैं. मीडिया फ़ाइल में एक कंटेनर फ़ॉर्मैट (उदाहरण के लिए, MP4) होता है. आम तौर पर, फ़ाइल एक्सटेंशन से इसकी जानकारी मिलती है. ध्यान दें कि सिर्फ़ ऑडियो वाले कुछ फ़ॉर्मैट (जैसे, MP3) के लिए, सैंपल और कंटेनर फ़ॉर्मैट एक ही हो सकते हैं.
- अडैप्टिव स्ट्रीमिंग टेक्नोलॉजी, जैसे कि DASH, SmoothStreaming, और एचएलएस. ये मीडिया फ़ॉर्मैट नहीं हैं. हालांकि, यह बताना ज़रूरी है कि ExoPlayer किस लेवल की सहायता देता है.
नीचे दिए गए सेक्शन में, ExoPlayer के हर लेवल पर काम करने की जानकारी दी गई है. आखिरी दो सेक्शन में, अलग से सबटाइटल के तौर पर इस्तेमाल किए जाने वाले फ़ॉर्मैट और एचडीआर वीडियो चलाने की सुविधा के बारे में बताया गया है.
अडैप्टिव स्ट्रीमिंग
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 सुलभता डिस्क्रिप्टर का इस्तेमाल करके सिग्नल मिलने पर, एफ़एमपी4 में एम्बेड किया गया |
CEA-708 | हां | SCTE सुलभता डिस्क्रिप्टर का इस्तेमाल करके सिग्नल मिलने पर, एफ़एमपी4 में एम्बेड किया गया |
मेटाडेटा | ||
EMSG मेटाडेटा | हां | FMP4 में एम्बेड किया गया |
कॉन्टेंट की सुरक्षा | ||
वाइडवाइन | हां | "cenc" स्कीम: एपीआई 19+; "cbcs" स्कीम: एपीआई 25+ |
PlayReady SL2000 | हां | Android TV, सिर्फ़ "cenc" स्कीम |
ClearKey | हां | एपीआई 21 और उसके बाद के वर्शन, सिर्फ़ "cenc" स्कीम |
विज्ञापन इंसर्शन | ||
एक से ज़्यादा अवधियों के लिए प्लेबैक | हां | |
सर्वर से निर्देशित विज्ञापन इंसर्शन (xlinks) | नहीं | |
IMA सर्वर-साइड और क्लाइंट-साइड विज्ञापन | हां | विज्ञापन इंसर्शन की गाइड |
लाइव वीडियो चलाना | ||
लाइव स्ट्रीम को सामान्य तरीके से चलाना | हां | |
इंतज़ार का समय बहुत कम रखने वाला CMAF वाला लाइव प्लेबैक | हां | |
कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) | हां | 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 सर्वर-साइड और क्लाइंट-साइड विज्ञापन | हां | विज्ञापन इंसर्शन की गाइड |
लाइव वीडियो चलाना | ||
लाइव स्ट्रीम को सामान्य तरीके से चलाना | हां | |
लो-लेटेंसी एचएलएस (Apple) | हां | |
कम इंतज़ार वाला एचएलएस (कम्यूनिटी) | नहीं | |
Common Media Client Data CMCD | हां | CMCD इंटिग्रेशन गाइड |
प्रोग्रेसिव कंटेनर फ़ॉर्मैट
नीचे दिए गए कंटेनर फ़ॉर्मैट में मौजूद स्ट्रीम, ExoPlayer से सीधे चलाए जा सकते हैं. इसमें शामिल ऑडियो और वीडियो सैंपल के फ़ॉर्मैट भी काम करने चाहिए. ज़्यादा जानकारी के लिए, सैंपल फ़ॉर्मैट सेक्शन देखें. इमेज कंटेनर और फ़ॉर्मैट के बारे में जानने के लिए, इमेज देखें.
कंटेनर का फ़ॉर्मैट | इनकी अनुमति है | टिप्पणियां |
---|---|---|
MP4 | हां | |
M4A | हां | |
FMP4 | हां | |
WebM | हां | |
Matroska | हां | |
MP3 | हां | कुछ स्ट्रीम में, सिर्फ़ एक जैसी बिटरेट पर वीडियो को आगे-पीछे किया जा सकता है** |
Ogg | हां | Vorbis, Opus, और FLAC फ़ॉर्मैट में |
WAV | हां | |
MPEG-TS | हां | |
MPEG-PS | हां | |
FLV | हां | वीडियो में आगे-पीछे नहीं जा सकता* |
ADTS (AAC) | हां | सिर्फ़ एक जैसी बिटरेट पर वीडियो को आगे-पीछे किया जा सकता है** |
FLAC | हां | ExoPlayer लाइब्रेरी में FLAC लाइब्रेरी या 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 एट्रिब्यूट में एसपीएस/पीपीएस डेटा शामिल होना चाहिए).
- 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 |
पीसीएम μ-law | pcm_mulaw |
PCM A-law | pcm_alaw |
MP1, MP2, MP3 | mp3 |
AMR-NB | amrnb |
AMR-WB | amrwb |
AAC | aac |
AC-3 | ac3 |
ई-एसी-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 और इसके बाद के वर्शन पर डिकोड किया जाता है |
* MetadataRetriever की मदद से, HEIC फ़ॉर्मैट में ली गई मोशन फ़ोटो का वीडियो हिस्सा पाया जा सकता है और उसे स्टैंडअलोन फ़ाइल के तौर पर चलाया जा सकता है.
अलग से सबटाइटल के लिए इस्तेमाल होने वाले फ़ॉर्मैट
ExoPlayer, अलग-अलग फ़ॉर्मैट में सबटाइटल की स्टैंडअलोन फ़ाइलों के साथ काम करता है. सबटाइटल फ़ाइलों को साइड लोड किया जा सकता है. इसके बारे में मीडिया आइटम पेज पर बताया गया है.
कंटेनर का फ़ॉर्मैट | इनकी अनुमति है | MIME प्रकार |
---|---|---|
WebVTT | हां | MimeTypes.TEXT_VTT |
TTML / SMPTE-TT | हां | 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 टाइप के लिए हार्डवेयर डिकोडर की क्षमताओं से ज़्यादा हो.