zoukankan      html  css  js  c++  java
  • H264裸码流I/P/B帧类型判别

      花了两天时间做了个h264裸流nal类型和frame类型检测的工具,已上传至github,有需要的自行下载(其中包含构建出来的可执行文件exe)。

    1.NAL类型检测

      nal类型检测非常容易,对照下表即可容易判断类型。

      较常用nal类型包括:SPS(7)、PPS(8)、IDR(5)、SLICE(1)。

      而nal_type嵌在码流数据的nal_header(size=1Byte)中,占据据该字节的后五位bits。

      nal_header结构为:F(1bit) + NRI(2bits) + NAL_Type(5bits)。

      因此,用winhex看裸流的二进制数据时,通常看到start_code后的nal_header为:0x67, 0x68, 0x65, 0x41,其分别对应SPS、PPS、I帧、P帧或B帧。

      如下一段裸流,可以看出:(红色为SPS,绿色为PPS,蓝色为I帧)

    2.frame类型检测

      从nal_header可以容易找到I帧(0x65),但却无法分辨出P帧和B帧,因为nal_header都是0x41(对应于nal_unit_type的1)。

      如何分辨出来呢?

      需要进入到slice层利用熵编码数据来判断,本工具主要针对该问题而设计的。

      下面是编译后执行结果片段:

  • 相关阅读:
    Spring static 静态属性注入
    大众点评Cat--架构分析
    rxjava
    TCP/IP协议三次握手与四次握手流程解析
    [SDOI2014]数数
    CF-GYM101741K. Consistent Occurrences
    [JSOI2012]玄武密码
    [POI2000]病毒
    [JSOI2007]文本生成器
    [HNOI2006]最短母串问题
  • 原文地址:https://www.cnblogs.com/Dreaming-in-Gottingen/p/13799066.html
Copyright © 2011-2022 走看看