0000 0109 1000 0001 6742 0020 e900 800c
3200 0001 68ce 3c80 0000 0001 6588 801a
जहाँ तक मुझे पता है, एनएएल यूनिट की पहचान करने के लिए प्रारंभ उपसर्ग कोड है। "09 ...." का क्या अर्थ है? क्या यह हेडर टाइप बाइट है?यह H264 एनएएल हैडर क्या मतलब है?
0000 0109 1000 0001 6742 0020 e900 800c
3200 0001 68ce 3c80 0000 0001 6588 801a
जहाँ तक मुझे पता है, एनएएल यूनिट की पहचान करने के लिए प्रारंभ उपसर्ग कोड है। "09 ...." का क्या अर्थ है? क्या यह हेडर टाइप बाइट है?यह H264 एनएएल हैडर क्या मतलब है?
जो पैकेट प्रकार को परिभाषित करता है। प्रारूप है:
+---------------+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+---------------+
क्या आप वाकई यह एक h.264 एनएएल हैडर है? आपके द्वारा प्रदान किए गए संदर्भ से, यह आपके द्वारा प्रदत्त संदर्भ के साथ शीर्षलेख प्रतीत नहीं होता है।
0x000001 एनएएल स्टार्ट उपसर्ग कोड है (यह 0x00000001 भी हो सकता है, एन्कोडर कार्यान्वयन पर निर्भर करता है)। 0x09 0b00001001 है, जिसका अर्थ है एफ = 0, एनआरआई = 0, और प्रकार 0b01001 है। वह विशेष प्रकार एक एक्सेस यूनिट डिलीमीटर है। ध्यान दें कि यह तुरंत 0x67 द्वारा परिभाषित एक और एनएएल इकाई द्वारा पीछा किया जाता है, जो एक एनएएल प्रकार 7 है, जो अनुक्रम पैरामीटर सेट है।
वहाँ भी है चित्र पैरामीटर सेट:
00 0001 68 ...
... और एक-फ़्रेम की शुरुआत:
0000 0001 65 ...
यह पता लगाने के लिए महत्वपूर्ण संदर्भ कि आप किस प्रकार की एनएएल देख रहे हैं http://www.itu.int/rec/T-REC-H.264-201304-S है। विशेष रूप से, पृष्ठ 63 (जनवरी 2014 तक) की तालिका सभी मान्य एनएएल प्रकारों को सूचीबद्ध करती है।
यह पता लगाने के लिए कि आप क्या देख रहे हैं पहले 4 बाइट देखें। यदि एनएएल "एनेक्स बी" फ्रेमिंग में है तो वे या होंगे। यह अनुक्रम H.264 बिटस्ट्रीम के भीतर वर्जित/दबाया गया है, इसलिए यदि आप इसे देखते हैं तो आप निश्चित रूप से जानते हैं कि आप एक एनएएल की शुरुआत को देख रहे हैं। एनएएल प्रकार 1. कोड में बाद 5 कम आदेश बिट है:
int nalType = p[2] == 1 ? (p[3] & 0x1f) : (p[4] & 0x1f);
में 264 शब्दजाल IDR
इसके अलावा इसका मतलब है मैं फ्रेम और गैर IDR पी या बी फ्रेम का मतलब है।
उपर्युक्त जानकारी के साथ हम उपरोक्त धारा को देख सकते हैं और एक एक्सेस यूनिट डिलीमीटर देख सकते हैं, उसके बाद एक एसपीएस, पीपीएस, और पहले आई-फ्रेम।
_Correction: _ सभी आईडीआर फ्रेम आई-फ्रेम हैं, लेकिन सभी आई-फ्रेम आईडीआर फ्रेम नहीं हैं। आईडीआर (इंस्टेंटेंट डिकोडर रीफ्रेश) फ्रेम विशेष आई-फ्रेम हैं जिनमें न केवल एक पूर्ण तस्वीर होती है, बल्कि यह भी इंगित करती है कि आईडीआर को फ्रेम _before_ को संदर्भित करने के लिए आईडीआर को अनुमति नहीं है। –
0000 0109 1000 0001 6742 0020 e900 800c
3200 0001 68ce 3c80 0000 0001 6588 801a
-> 000001| 09 (AUD)| 10 | 000001 | 67(SPS) | xxxx (SPS data)
xx | 000001 | 68 (PPS)| xxxx (PPS data)
AUD, एसपीएस, पी पी एस Nalu (नेटवर्क अमूर्त परत यूनिट) के प्रकार है Nalu लगभग 31 प्रकार की है।
09 AUD मतलब एक्सेस यूनिट डिलीमीटर।
एक्सेस यूनिट डिलीमीटर (एयूडी)। एक एयूडी एक वैकल्पिक एनयूएल है जो हो सकता है जो प्राथमिक स्ट्रीम में फ्रेम को डिलीमिट करने के लिए उपयोग करता है। यह की आवश्यकता नहीं है (जब तक अन्यथा टीएस की तरह, कंटेनर/प्रोटोकॉल द्वारा कहा गया है), और अक्सर स्थान बचाने के लिए में शामिल नहीं है, लेकिन यह लिए उपयोगी हो सकता पूरी तरह से प्रत्येक पार्स करने के लिए बिना फ्रेम के शुरू पाता है Nalu।
अधिक जानकारी के लिए यह answer देखें।
मेरे पास H264 स्ट्रीम (आईओएस में) को डीकोड करने के तरीके के बारे में question भी है।
क्या आप 0 (एयूडी) के बाद इस 10 का अर्थ जानते हैं? –
मैंने वीडियो स्ट्रीम का विश्लेषण करने के लिए एक वीडियो स्ट्रीम विश्लेषण टूल का उपयोग किया और यह फ्रेम की सीमा को चिह्नित करता है। मैंने एक फ्रेम की शुरुआत की। और उपसर्ग कोड "00 00 01" ने यह भी दिखाया कि यह एक एनएएल है। – ablmf
वह उपसर्ग कोड यह नहीं दिखाता है कि यह एक एनएएल है क्योंकि 0000 010 9 8 बाइट्स (64 बिट्स) है और पहले 16 बाइट्स का कोई मैंगलिंग उपसर्ग कोड को एनएएल का संकेत देगा। याद रखें, आप एक हेक्स डंप देख रहे हैं लेकिन सभी चश्मा और परिभाषा बाइनरी को संदर्भित करती हैं। – Matt
गलती, मैं उपर्युक्त टिप्पणी में अपने गणित में विफल रहा, 0000 010 9 4 बाइट्स है, 8 नहीं (और 32 बिट्स, 64 नहीं), लेकिन फिर भी आप जिस उपसर्ग कोड की तलाश में हैं, उसमें उलझ जाएंगे। – Matt