पेज पर काम करने वाले फ़ॉर्मैट

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 Accessibility descriptors का इस्तेमाल करके सिग्नल मिलने पर, FMP4 में एम्बेड किया जाता है
CEA-708 हां SCTE Accessibility descriptors का इस्तेमाल करके सिग्नल मिलने पर, FMP4 में एम्बेड किया जाता है
मेटाडेटा
EMSG मेटाडेटा हां FMP4 में एम्बेड किया गया
कॉन्टेंट की सुरक्षा
वाइडवाइन हां "cenc" स्कीम: एपीआई 19+; "cbcs" स्कीम: एपीआई 25+
PlayReady SL2000 हां Android TV, सिर्फ़ "cenc" स्कीम
ClearKey हां एपीआई 21 और उसके बाद के वर्शन, सिर्फ़ "cenc" स्कीम
लाइव वीडियो चलाना
लाइव स्ट्रीम को सामान्य तरीके से चलाना हां
इंतज़ार का समय बहुत कम रखने वाला CMAF लाइव प्लेबैक हां
कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) हां इंटिग्रेशन गाइड

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 हां
मेटाडेटा
आईडी3 हां
SCTE-35 नहीं
कॉन्टेंट की सुरक्षा
AES-128 हां
AES-128 का सैंपल नहीं
वाइडवाइन हां एपीआई 19+ ("cenc" स्कीम) और 25+ ("cbcs" स्कीम)
PlayReady SL2000 हां सिर्फ़ Android TV के लिए
सर्वर कंट्रोल
डेल्टा अपडेट हां
प्लेलिस्ट को फिर से लोड होने से रोकना हां
पेज को पहले से लोड करने के सुझावों को लोड होने से रोकना हां जिन बाइट रेंज की लंबाई तय नहीं की गई है उनके लिए
लाइव वीडियो चलाना
लाइव स्ट्रीम को सामान्य तरीके से चलाना हां
लो-लेटेंसी एचएलएस (Apple) हां
कम इंतज़ार वाला एचएलएस (कम्यूनिटी) नहीं
कॉमन मीडिया क्लाइंट डेटा (सीएमसीडी) हां इंटिग्रेशन गाइड

प्रोग्रेसिव कंटेनर फ़ॉर्मैट

नीचे दिए गए कंटेनर फ़ॉर्मैट में मौजूद स्ट्रीम, 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 डिकोडर पर निर्भर करता है. उदाहरण के लिए, FLAC को मैनेज करने वाला MediaCodecडिकोडर (एपीआई लेवल 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 के लिए, सॉफ़्टवेयर डिकोडर लाइब्रेरी उपलब्ध कराते हैं.

FFmpeg लाइब्रेरी

FFmpeg लाइब्रेरी, कई तरह के ऑडियो सैंपल फ़ॉर्मैट को डिकोड करने की सुविधा देती है. लाइब्रेरी बनाते समय, यह चुना जा सकता है कि कौनसे डीकोडर शामिल करने हैं. इस बारे में लाइब्रेरी के README.md में बताया गया है. नीचे दी गई टेबल में, ऑडियो सैंपल फ़ॉर्मैट से उससे जुड़े FFmpeg डीकोडर के नाम की मैपिंग दी गई है.

सैंपल फ़ॉर्मैट डिकोडर का नाम
Vorbis vorbis
Opus opus
FLAC flac
ALAC alac
PCM μ-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 टाइप के लिए हार्डवेयर डिकोडर की क्षमताओं से ज़्यादा हो.