zoukankan      html  css  js  c++  java
  • 安防摄像头监控视频流媒体开发中H264编码NALU结构介绍与I帧判断方法

    H264编码技术介绍

    H.264是ITU-T以H.26x系列为名称命名的视频编解码技术标准之一。H.264是ITU-T的VCEG(视频编码专家组)和ISO/IEC的MPEG(活动图像编码专家组)的联合视频组(JVT:joint video team)开发的一个数字视频编码标准。该标准最早来自于ITU-T的称之为H.26L的项目的开发。H.26L这个名称虽然不太常见,但是一直被使用着。H.264是ITU-T以H.26x系列为名称命名的标准之一,同时AVC是ISO/IEC MPEG一方的称呼。

    H.264标准的主要目标是:与其它现有的视频编码标准相比,在相同的带宽下提供更加优秀的图象质量。通过该标准,在同等图象质量下的压缩效率比以前的标准(MPEG2)提高了2倍左右,因此,H.264被普遍认为是最有影响力的行业标准。

    H264编码NALU结构介绍与I帧判断

    在H.264/AVC视频编码标准中,整个系统框架被分为了两个层面:视频编码层面(VCL)和网络抽象层面(NAL)。其中,前者负责有效表示视频数据的内容,而后者则负责格式化数据并提供头信息,以保证数据适合各种信道和存储介质上的传输。因此我们平时的每帧数据就是一个NAL单元(SPS与PPS除外)。在实际的H264数据帧中,往往帧前面带有00 00 00 01分隔符,一般来说编码器编出的首帧数据为PPS与SPS,接着为I帧……

    帧是组成视频图像的基本单位。关键帧也叫I帧,它是帧间压缩编码里的重要帧;它是一个全帧压缩的编码帧;解码时仅用I帧的数据就可重构完整图像;I帧不需要参考其他画面而生成。视频文件是由多个连续的图片组成。

    H264 NALU固定以 0x00 00 00 01为起始,NALU_data部分不会出现这个起始码;在找到下一个起始码之前,当前NALU数据长度不知;

    H264 NALU: 00 00 00 01(4字节)NALU type(1字节)NALU_data (N字节)0x00 00 00 01
    起始码(4字节) 类型 数据 下一个NALU

    NALU_type 1字节,定义为:

    1比特禁止位2比特 重要性指示位5比特 类型
    固定为0 11 1-12 由h264使用
    常用Nalu_type:
    
    0x67 (0 11 00111) SPS    非常重要       type = 7
    0x68 (0 11 01000) PPS     非常重要       type = 8
    0x65 (0 11 00101) IDR帧  关键帧  非常重要 type = 5
    0x61 (0 11 00001) I帧        重要         type=1   非IDR的I帧 不大常见
    0x41 (0 10 00001) P帧      重要         type = 1     
    0x01 (0 00 00001) B帧     不重要        type = 1
    0x06 (0 00 00110) SEI     不重要        type = 6
    

    所以判断是否为I帧的算法为:
    (NALU类型&0001 1111)=5 即 NALU类型&31=5,比如 0x65&31=5

  • 相关阅读:
    [置顶] .net技术类面试、笔试题汇总1
    [置顶] Linux协议栈代码阅读笔记(一)
    JS 获取浏览器窗口大小
    huapin
    display:table-cell几种应用
    flex布局大讲解
    chrome的source工具
    linux配置yum源
    oracle Can't connect to X11 window server using ':0.0' /Checking monitor: must be configured to display at least 256 colors解决方法
    oracle Recyclebin
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/11971265.html
Copyright © 2011-2022 走看看