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

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

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

डिफ़ॉल्ट रूप से, Transformer स्टैंडर्ड MP4 फ़ाइलें आउटपुट करता है, InAppMp4Muxer का इस्तेमाल करके. अगर आपके ऐप्लिकेशन को फ़्रैगमेंटेड MP4 की ज़रूरत है, तो आप InAppFragmentedMp4Muxer.Factory को अपने Transformer इंस्टेंस को शुरू करते समय पास कर सकते हैं. Media3, WebM, AAC, Ogg, और WAV जैसे अन्य फ़ॉर्मैट के साथ भी काम करता है. इसके लिए, WebmMuxer, AacMuxer, OggMuxer, और WavMuxer जैसे खास मक्सर का इस्तेमाल किया जाता है. इन्हें इंजेक्ट करने के लिए, कस्टम Muxer.Factory में रैप करना ज़रूरी है. हालांकि, आने वाले वर्शन में, इस्तेमाल के लिए तैयार फ़ैक्ट्री के लागू किए गए वर्शन शामिल होंगे, ताकि इस प्रोसेस को आसान बनाया जा सके.

इमेज के फ़ॉर्मैट

Transformer, सभी इमेज ऐसेट को लोड और डिकोड करने के लिए, BitmapFactory का इस्तेमाल करता है. इसलिए, Transformer उन सभी फ़ॉर्मैट के साथ काम करता है जिनके साथ BitmapFactory काम करता है. इमेज के उन टाइप के बारे में जानने के लिए जिनके साथ Transformer काम करता है, इमेज के फ़ॉर्मैट देखें. मल्टी-पिक्चर फ़ॉर्मैट (जैसे, 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 की सुविधा उपलब्ध है. यह सुविधा तब काम की होती है, जब एचडीआर मीडिया को उन अन्य ऐप्लिकेशन या सेवाओं के साथ शेयर किया जाता है जिनमें एचडीआर कॉन्टेंट को इनजेस्ट करने की सुविधा उपलब्ध नहीं होती. Composition बनाते समय, OpenGL का इस्तेमाल करके टोन-मैपिंग की सुविधा चालू करने के लिए, setHdrMode(HDR_MODE_TONE_MAP_HDR_TO_SDR_USING_OPEN_GL) को कॉल करें. 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);

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