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

मीडिया फ़ॉर्मैट के बारे में सामान्य जानकारी पाने के लिए, 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 के साथ काम करते हैं, इमेज के फ़ॉर्मैट देखें. मल्टी-पिक्चर फ़ॉर्मैट (जैसे, जीआईएफ़) के लिए, अगर 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) को कॉल करें.

Transformer, ट्रांसकोडिंग के ऐडवांस सिनेरियो के साथ भी काम करता है. जैसे:

  • अल्ट्रा एचडीआर से एचडीआर वीडियो: अल्ट्रा एचडीआर इमेज इनपुट को एचडीआर वीडियो में बदला जा सकता है. इससे इमेज की डाइनैमिक रेंज और वाइड कलर गैमट को बनाए रखा जा सकता है. इसलिए, मिक्स टाइमलाइन में, स्टिल फ़ोटो, एचडीआर वीडियो की पीक ब्राइटनेस और वाइब्रेंसी से मेल खाती हैं.
  • Dolby Vision ट्रांसकोडिंग और ट्रांसमक्सिंग: Transformer, Dolby Vision (प्रोफ़ाइल 8) मीडिया से, बैकवर्ड-कम्पैटिबल बेस लेयर (जैसे, HEVC) को फिर से एन्कोड किए बिना ट्रांसमक्स करने की सुविधा देता है. इसके अलावा, इसे टोन-मैपिंग के साथ स्टैंडर्ड एसडीआर फ़ॉर्मैट में ट्रांसकोड किया जा सकता है.

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

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

स्लो-मोशन स्ट्रीम को फ़्लैट करने के लिए, 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);

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