डेवलपमेंट बैकग्राउंड और इम्प्लीमेंटेशन आइडिया

  • 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 01 start 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:
    1. चुने गए NAL Unit के GOP range की गणना (पिछले/अगले IDR की खोज)
    2. 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 (if block), 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

लिंक

अभी कोई टिप्पणी नहीं है.

अभी कोई टिप्पणी नहीं है.