美文网首页流媒体
码流格式: Annex-B, AVCC(H.264)与HVCC(

码流格式: Annex-B, AVCC(H.264)与HVCC(

作者: 一川烟草i蓑衣 | 来源:发表于2019-05-30 23:28 被阅读0次

    1.前言

    介绍H.264结构的文章铺天盖地,无责任翻译、无责任转载以及部分经验之谈(目前搜索最靠前的一篇实际是对stackoverflow上答案的翻译。。链接后面给出了),所以缺的不是资料,是叙述准确的资料。来吧,看这篇整理就够了。

    2.典型问题

    iOS 硬解264视频(MP4),出现绿屏,或上半部分正常下半部分绿屏。

    iOS 硬解265视频,同样也要解决的extradata处理问题。

    参:iOS11 VideoToolbox硬解HEVC

    首先来看两种格式:

    3.Annex-B 和 AVCC/HVCC

    H.264码流分Annex-B和AVCC两种格式。

    H.265码流是Annex-B和HVCC格式。

    (以下内容针对H.264,但大体也适用于H.265/HEVC)

    3.1别名

    AVCC格式 也叫AVC1格式,MPEG-4格式,字节对齐,因此也叫Byte-Stream Format。用于mp4/flv/mkv, VideoToolbox。

    Annex-B格式 也叫MPEG-2 transport stream format格式(ts格式), ElementaryStream格式。

    Annex-B 附录B, 指ITU-T的 Recommendation(h.264和h.265)在附录B中规定码流格式。

    3.2 结构上的区别:

    区别有两点:一个是参数集(SPS, PPS)组织格式;一个是分隔。

    - Annex-B:使用start code分隔NAL(start code为三字节或四字节,0x000001或0x00000001,一般是四字节);SPS和PPS按流的方式写在头部。

    - AVCC:使用NALU长度(固定字节,通常为4字节)分隔NAL;在头部包含extradata(或sequence header)的结构体。(extradata包含分隔的字节数、SPS和PPS,具体结构见下)

    3.2.1 Annex B

    3.2.2 extradata

    H.264/AVC extradata 语法

    参考:《ISO/IEC 14496-15 NAL unit structured video》AVCDecoderConfigurationRecord结构:(最小长度7字节)

    说明:

    FFmpeg中,extradata解析,见ff_h264_decode_extradata()

    注意:

    第5字节的最后2位,表示的就是NAL size的字节数。在AVCC格式中,每个NAL前面都会有NAL size字段。NAL size可能是1字节、2字节或4字节(4字节较常见),解析extradata重要目的就是确认这个值。(而Annex-B格式,要split NAL,只要去探测0x000001就可以了)

    H.264 extradata 示例(AVCC格式)

      extradata    如上

      extrasize    47

    05| FF          NAL size:  4字节

    06| E1          SPS num:  1

    07| 00 1F      SPS size:  31字节

    09| 67          NAL type:  SPS

    40| 01          PPS num:  1

    41| 00 05      PPS size:  5字节

    42| 68          NAL type:  PPS

    1

    2

    3

    4

    5

    6

    7

    8

    9

    H.265/HEVC extradata语法

    参照HEVCDecoderConfigurationRecord:(最小长度23字节)

    HEVC extradata 示例

      extradata    如上

      extrasize    111

    24| 20        NAL type:  VPS

    25| 00 01      VPS num:  1

    27| 00 19      VPS size:  25字节

    54| 21        NAL type:  SPS

    55| 00 01      SPS num:  1

    57| 00 29      SPS size:  41字节

    100| 22        NAL type:  PPS

    1

    2

    3

    4

    5

    6

    7

    8

    9

    hvcC extradata是一种头描述的格式。而annex-b格式中,则是将VPS, SPS和PPS等同于普通NAL,用start code分隔,非常简单。Annex-B格式的”extradata”:

    start code+VPS+start code+SPS+start code+PPS

    3.3 实践

    VideoToolbox 与 AVCC格式 1

    硬解 仅支持avcC格式。 如ES格式,需要转为MPEG-4格式 P58

    硬编 输出avcC格式。 P204

    MediaCodec 与 Annex-B格式

    硬解 支持Annex-B格式,avcC需要做转换,NALU长度替换为start code

    Annex-B 转 AVCC 2

    对于仅接受AVCC格式的播放器(如Quicktime v7.0),需要进行convert Annex-B to AVCC:

    - start code 转为4字节 NAL size

    - SPS, PPS创建 extradata

    AVCC 转 Annex-B

    FFmpeg “extract_extradata” bitstream filter: 3

    h264码流转换:

    ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts

    hevc码流转换:

    ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts

    4. 后续

    了解了H.264 extradata以及NAL组织结构,自然引出H.264码流结构的议题,下篇干脆系统分析下H.264, HEVC码流结构。

    注意:window下用Binary Viewer查看二进制文件

    ---------------------

    作者:yue_huang

    来源:CSDN

    原文:https://blog.csdn.net/yue_huang/article/details/75126155

    版权声明:本文为博主原创文章,转载请附上博文链接!

    相关文章

      网友评论

        本文标题:码流格式: Annex-B, AVCC(H.264)与HVCC(

        本文链接:https://www.haomeiwen.com/subject/orqitctx.html