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

मीडिया फ़ॉर्मैट के बारे में सामान्य जानकारी पाने के लिए, ExoPlayer के साथ काम करने वाले फ़ॉर्मैट का पेज देखें. स्ट्रीम लोड करने, निकालने, और डिकोड करने से जुड़ी वही सीमाएं Transformer पर भी लागू होती हैं. हालांकि, Transformer, ExoPlayer के बंडल किए गए सॉफ़्टवेयर डिकोडर मॉड्यूल के साथ काम नहीं करता.

ट्रांसफ़ॉर्मर, एन्कोडिंग के लिए MediaCodec पर भी निर्भर करता है. साथ ही, इसे आउटपुट मीडिया फ़ाइलों को मल्टीप्लेक्स या मक्स करना होता है. इससे, आउटपुट फ़ॉर्मैट सीमित हो जाते हैं. एनकोडिंग से जुड़ी सीमाओं के बारे में ज़्यादा जानने के लिए, MediaCodec वीडियो कोडेक देखें. साथ ही, आउटपुट मीडिया कंटेनर पर लागू होने वाली सीमाओं के बारे में जानने के लिए, MediaMuxer देखें. Transformer सिर्फ़ MP4 फ़ाइलें आउटपुट करता है.

डिफ़ॉल्ट रूप से, Transformer MediaMuxer का इस्तेमाल करता है. हालांकि, InAppMuxer का इस्तेमाल किया जा सकता है. इससे MediaMuxer की कुछ सीमाओं से बचा जा सकता है. जैसे, रेफ़रंस फ़्रेम स्ट्रक्चर और सैंपल फ़ॉर्मैट. आने वाले समय में रिलीज़ होने वाले वर्शन में, डिफ़ॉल्ट मक्सर, ऐप्लिकेशन में मौजूद मक्सर बन जाएगा.

इमेज के लिए सहायता

Transformer, सभी इमेज ऐसेट को लोड और डिकोड करने के लिए BitmapFactory का इस्तेमाल करता है. इसलिए, Transformer उन सभी फ़ॉर्मैट के साथ काम करता है जिनके साथ BitmapFactory काम करता है. इमेज के लिए काम करने वाले फ़ॉर्मैट के बारे में जानने के लिए, इमेज के लिए सहायता लेख पढ़ें. एक से ज़्यादा इमेज वाले फ़ॉर्मैट (जैसे, GIF) के लिए, अगर DefaultAssetLoaderFactory का इस्तेमाल किया जाता है, तो कंटेनर से एक इमेज फ़्रेम दिखाया जाता है.

खास फ़ॉर्मैट

Transformer, नए मीडिया फ़ॉर्मैट में इनपुट को हैंडल करने की सुविधा देता है. ये फ़ॉर्मैट, पारंपरिक फ़ॉर्मैट की तुलना में खास सुविधाएं देते हैं.

एचडीआर वीडियो मैनेज करना

अब ज़्यादा से ज़्यादा डिवाइसों में एचडीआर वीडियो कैप्चर करने की सुविधा उपलब्ध है. इससे वीडियो में ज़्यादा जीवंत और सटीक रंग मिलते हैं. साथ ही, ब्राइटनेस की रेंज भी ज़्यादा होती है.

Transformer, Android 13 (एपीआई लेवल 33) या इसके बाद के वर्शन वाले डिवाइसों पर एचडीआर वीडियो में बदलाव करने की सुविधा देता है. हालांकि, इसके लिए ज़रूरी है कि डिवाइस पर एन्कोडिंग की सुविधा काम करती हो. एचडीआर वीडियो में बदलाव करते समय, GL वीडियो इफ़ेक्ट को 16-बिट फ़्लोटिंग पॉइंट कलर कॉम्पोनेंट और BT.2020 कलर स्पेस को हैंडल करना होता है. Composition बनाते समय, HDR_MODE_KEEP_HDR डिफ़ॉल्ट मोड होता है. अगर एचडीआर फ़ोटो में बदलाव करने की सुविधा उपलब्ध नहीं है, तो Transformer HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL का इस्तेमाल करता है.

एचडीआर को एसडीआर में बदलने की सुविधा, Android 10 (एपीआई लेवल 29) और इसके बाद के वर्शन वाले डिवाइसों पर काम करती है. इसे टोन-मैपिंग भी कहा जाता है. इसके लिए, डिवाइसों में डिकोडिंग और OpenGL की सुविधा होनी चाहिए. यह सुविधा तब काम आती है, जब एचडीआर मीडिया को ऐसे ऐप्लिकेशन या सेवाओं के साथ शेयर करना हो जो एचडीआर कॉन्टेंट को इस्तेमाल करने की सुविधा नहीं देती हैं. OpenGL कॉल का इस्तेमाल करके टोन-मैपिंग की सुविधा चालू करने के लिए, setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) बनाते समय Composition का इस्तेमाल करें. Android 12 (एपीआई लेवल 31) और इसके बाद के वर्शन में, MediaCodec कुछ डिवाइसों पर टोन-मैपिंग की सुविधा भी काम करती है. इनमें Android 13 या इसके बाद के वर्शन वाले ऐसे सभी डिवाइस शामिल हैं जो एचडीआर वीडियो कैप्चर कर सकते हैं. MediaCodec कॉल setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_MEDIACODEC) का इस्तेमाल करके, टोन-मैपिंग की सुविधा चालू करने के लिए.

स्लो मोशन वाले मीडिया को मैनेज करना

स्लो-मोशन वीडियो में मेटाडेटा शामिल होता है. इससे पता चलता है कि स्ट्रीम के हर सेक्शन को किस स्पीड से चलाया जाना चाहिए. फ़्लैटनिंग एक ऐसी प्रोसेस है जिसमें स्लो-मोशन वीडियो के आधार पर नई वीडियो स्ट्रीम बनाई जाती है. हालांकि, इसमें मेटाडेटा के आधार पर सेक्शन की स्पीड बढ़ाई या कम की जाती है, ताकि वे उन प्लेयर पर भी सही तरीके से चल सकें जो स्लो मोशन मेटाडेटा लागू नहीं करते.

स्लो-मोशन स्ट्रीम को फ़्लैट करने के लिए, EditedMediaItem पर setFlattenForSlowMotion बिल्डर तरीके का इस्तेमाल करें.

Kotlin

val editedMediaItem =
    EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build()
val transformer =
    Transformer.Builder(context).addListener(transformerListener).build()
transformer.start(editedMediaItem, outputPath)

Java

EditedMediaItem editedMediaItem =
    new EditedMediaItem.Builder(inputMediaItem).setFlattenForSlowMotion(true).build();
Transformer transformer =
    new Transformer.Builder(context).addListener(transformerListener).build();
transformer.start(editedMediaItem, outputPath);

इससे आपको स्लो-मोशन वीडियो के साथ काम करने की सुविधा मिलती है. इसके लिए, आपको इन खास फ़ॉर्मैट को मैनेज करने की ज़रूरत नहीं होती. आपको बस ओरिजनल वीडियो के बजाय, वीडियो के फ़्लैट किए गए वर्शन को सेव और चलाना है.