वीडियो एन्कोडिंग के आंकड़े एक्सपोर्ट करना

Android 13 से, ऐप्लिकेशन क्लाइंट, वीडियो एन्कोडर से हर एन्कोड किए गए वीडियो फ़्रेम के लिए, एन्कोडिंग के आंकड़े एक्सपोर्ट करने का अनुरोध कर सकते हैं. वीडियो एन्कोडर से मिले आंकड़ों की मदद से, ऐप्लिकेशन अपने वीडियो एन्कोडिंग टास्क को ऑप्टिमाइज़ कर सकते हैं. जैसे, मल्टीपास एन्कोडिंग और एन्कोडिंग से पहले फ़्रेम की प्री-प्रोसेसिंग.

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

वीडियो एन्कोडिंग के आंकड़ों का डेटा

Android 13 में, वीडियो एन्कोडर आंकड़ों का डेटा एक्सपोर्ट करता है. यह डेटा, यहां दी गई टेबल में दिखाया गया है.

एन्कोडर के आंकड़ों का नाम ब्यौरा
हर फ़्रेम के लिए औसतन ब्लॉक क्यूपी वीडियो फ़्रेम में मौजूद सभी ब्लॉक क्यूपी का औसत, जिन्हें बिटस्ट्रीम में एन्कोड किया गया है
तस्वीर का टाइप टाइप I, P या B

डेवलपर, MediaFormat डेवलपर क्लास का इस्तेमाल करके, हर फ़्रेम के लिए आंकड़ों की जानकारी पा सकते हैं.

वीडियो एन्कोडर ड्राइवर से जुड़े अपडेट

वीडियो एन्कोडिंग के आंकड़े एक्सपोर्ट करने की सुविधा देने के लिए, SoC वेंडर को वीडियो एन्कोडर ड्राइवर में बदलाव करना होगा. Android 13 में, Codec 2.0 के बेस में ये कुंजियां जोड़ी गई हैं:

  • KEY_VIDEO_QP_AVERAGE से, हर फ़्रेम के लिए औसतन ब्लॉक क्यूपी के बारे में पता चलता है.

    KEY_VIDEO_QP_AVERAGE कुंजी को लागू करने के लिए, ये नियम लागू होते हैं:

    • Codec 2.0 पर भेजने से पहले, SoC एन्कोडर को ब्लॉक क्यूपी के औसत को सबसे नज़दीकी पूर्णांक में राउंड करना होगा.

    • औसत वैल्यू की गिनती सिर्फ़ ल्यूमा प्लेन से की जाती है.

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

  • KEY_PICTURE_TYPE से, एन्कोड किए गए फ़्रेम के टाइप के बारे में पता चलता है. जैसे, PICTURE_TYPE_I, PICTURE_TYPE_P, PICTURE_TYPE_B, या PICTURE_TYPE_UNKNOWN.

  • KEY_VIDEO_ENCODING_STATISTICS_LEVEL से, वीडियो एन्कोडर से मिले एन्कोडिंग के आंकड़ों की जानकारी के लेवल के बारे में पता चलता है. यह जानकारी इस तरह से दी जाती है:

    • जब एन्कोडर, एन्कोडिंग के आंकड़ों के बारे में कोई जानकारी जनरेट नहीं करता, तब इस कुंजी को VIDEO_ENCODING_STATISTICS_LEVEL_NONE पर सेट किया जाता है.

    • जब एन्कोडर, KEY_VIDEO_QP_AVERAGE और KEY_PICTURE_TYPE हर फ़्रेम के लिए जनरेट करता है, तब इस कुंजी को VIDEO_ENCODING_STATISTICS_LEVEL_1 पर सेट किया जाता है.

रेफ़रंस के तौर पर लागू करने के लिए, VideoEncodingStatisticsTest देखें.

सत्यापन

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

वीडियो एन्कोडिंग के आंकड़े एक्सपोर्ट करने की सुविधा चालू होने पर, इसे बंद करने की पुष्टि करने के लिए, VIDEO_ENCODING_STATISTICS_LEVEL_NONE कुंजी का इस्तेमाल इस तरह करें:

format.setInteger(MediaFormat.KEY_VIDEO_ENCODING_STATISTICS_LEVEL, MediaFormat.VIDEO_ENCODING_STATISTICS_LEVEL_NONE);