NALU Explorer - H.264 वीडियो स्ट्रीम NAL Unit विज़ुअलाइज़ेशन टूल
(nalu.funnify.org)डेवलपमेंट बैकग्राउंड और इम्प्लीमेंटेशन आइडिया
- H.264 वीडियो codec डेवलपमेंट/डीबगिंग के दौरान NAL Unit संरचना को विज़ुअली देखना चाहते थे
- FFmpeg command line से analysis संभव था, लेकिन हर NAL Unit पर क्लिक करते हुए उसे वास्तविक frame image के साथ देखना चाहते थे
- ब्राउज़र में सीधे काम करने वाला Annex B parser चाहिए था, और WebAssembly-आधारित FFmpeg का उपयोग करने पर frame decoding भी संभव है
- अपना
h264-parserलाइब्रेरी विकसित किया, जो SPS/PPS/Slice Header तक parse करता है (NPM package के रूप में प्रकाशित) - H.264 standard syntax structure-आधारित output: ITU-T H.264 spec के parsing syntax tree का उसी रूप में अनुसरण करते हुए hierarchical structure (indent) में fields दिखाए जाते हैं
काम करने का तरीका
- Annex B parsing:
00 00 00 01या00 00 01start code का पता लगाना - Parameter parsing:
- SPS/PPS: parser से parameters निकालना
- Slice Header:
first_mb_in_slice,slice_type,pic_parameter_set_idआदि - Standard syntax compliance:
nal_unit()→seq_parameter_set_rbsp()→vui_parameters()आदि, H.264 spec की संरचना को उसी रूप में दिखाया जाता है
- Frame decoding:
- चुने गए NAL Unit के GOP range की गणना (पिछले/अगले IDR की खोज)
- SPS/PPS header के साथ Annex B को फिर से बनाना
मुख्य फीचर्स
Parsing
- Annex B Start Code-आधारित NAL Unit विभाजन
- NAL Unit type के अनुसार parsing:
- Type 7 (SPS): profile, level, resolution, frame rate आदि
- Type 8 (PPS): entropy coding mode, slice groups आदि
- Type 1/5 (Slice): slice_type, first_mb_in_slice, frame_num आदि
- Type 6 (SEI): metadata (parsing सीमित)
- H.264 standard syntax tree output: conditional parsing (
ifblock), hierarchical structure, और bitstream reading order को उसी रूप में दिखाना - RBSP Hex dump: offset, hex bytes, ASCII format में raw data देखा जा सकता है
वास्तविक SPS parsing output उदाहरण:
nal_unit()
forbidden_zero_bit: 0
nal_ref_idc: 3
nal_unit_type: 7
seq_parameter_set_rbsp()
profile_idc: 100
constraint_set0_flag: 0
constraint_set1_flag: 0
constraint_set2_flag: 0
constraint_set3_flag: 0
constraint_set4_flag: 0
constraint_set5_flag: 0
reserved_zero_2bits: 0
...
Frame decoding
- GOP unit के आधार पर automatic range calculation (पिछले/अगले IDR की खोज)
- SPS/PPS header की automatic खोज और prepend insertion
- FFmpeg.wasm से BMP extract करके Canvas rendering
Data extraction
- अलग-अलग NAL Unit डाउनलोड (Annex B Start Code + rawData)
- GOP unit डाउनलोड (SPS/PPS + GOP range NAL Units)
- timeline रूप में NAL Unit visualization (type के अनुसार रंग, आकार के अनुपात में)
सीमाएँ
- Slice Data unsupported: केवल Slice Header तक parsing. macroblock data, MVD, residual coefficients आदि
slice_dataक्षेत्र का analysis नहीं किया जाता - AVC format unverified: length-based parsing code implement किया गया है, लेकिन test नहीं हुआ
- FFmpeg.wasm initial loading: पहली बार चलाने पर ~10-20MB library download
लिंक
- लाइव डेमो: https://nalu.funnify.org
- NPM लाइब्रेरी: https://www.npmjs.com/package/h264-parser
अभी कोई टिप्पणी नहीं है.