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

H.265/HEVC extradata语法

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

HEVC extradata 示例

   extradata    如上extrasize    11124| 20         NAL type:  VPS25| 00 01      VPS num:   127| 00 19      VPS size:  25字节54| 21         NAL type:  SPS55| 00 01      SPS num:   157| 00 29      SPS size:  41字节
100| 22         NAL type:  PPS

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码流结构。



  1. WWDC2014 513 ↩
  2. extradata syntax ↩
  3. FFmpeg Bitstream Filter Documentation: h264_mp4toannexb; hevc_mp4toannexb等 ↩

码流格式: Annex-B, AVCC(H.264)与HVCC(H.265), extradata详解相关推荐

  1. H.264/AVC视频编解码技术详解 第一章 视频信息与压缩编码

    H.264/AVC视频编解码技术详解系列笔记 是对 H.264/AVC视频编解码技术详解 课程的学习 文章目录 人与世界的交互 视频信号的表示方法 视频压缩编码 视频信息为什么可以被压缩? 视频压缩编 ...

  2. 【H.264/AVC视频编解码技术详解】二. 主流视频编码标准的发展

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  3. 【H.264/AVC视频编解码技术详解】四. 常见H.264视频编解码器(X264和JM)及参考软件JM的下载与编解码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  4. 【H.264/AVC视频编解码技术详解】一. 视频信息与压缩编码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  5. 【H.264/AVC视频编解码技术详解】三. H.264简介

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  6. H.264/AVC视频编解码技术详解-殷汶杰-专题视频课程

    H.264/AVC视频编解码技术详解-46880人已学习 课程介绍         H.264/AVC是目前业界应用为广泛的视频压缩编码标准,包含了先进而且较为成熟的视频编码技术.本课程将从原理.标准 ...

  7. 视频教程-H.264/AVC视频编解码技术详解-其他

    H.264/AVC视频编解码技术详解 毕业于上海大学通信与信息工程学院,研究生学历,硕士学位.研究方向为视频处理与传输,对H.264/AVC.H.265/HEVC.AVS.AVS+.AVS2等视频编解 ...

  8. 【H.264/AVC视频编解码技术详解】二十六、帧间预测编码(4):宏块的帧间预测解码

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  9. 【H.264/AVC视频编解码技术详解】十九:熵编码算法(5)——H.264的CABAC(上):语法元素的二值化方法...

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

  10. 【H.264/AVC视频编解码技术详解】二十三、帧间预测编码(1):帧间预测编码的基本原理

    <H.264/AVC视频编解码技术详解>视频教程已经在"CSDN学院"上线,视频中详述了H.264的背景.标准协议和实现,并通过一个实战工程的形式对H.264的标准进行 ...

最新文章

  1. 神经网络调参经验大汇总
  2. 警告:‘xxxx’ 将随后被初始化
  3. 使用 Pandas 分析 Apache 日志
  4. 2017软件工程实践第二次作业
  5. php充值注入,PHP注入一路小跑
  6. 如何解决在使用ElementUI时发现有些控件是英文的
  7. 玩转SecureCRT 安装
  8. pytorch初入门学习记录
  9. 配置centos环境
  10. 小程序ASC解密(java)
  11. Jenkins骚操作第十三章之基于Kubernetes/K8S构建Jenkins持续集成平台(上)
  12. Mysql经典面试题及答案
  13. 一个串口连接另外两个串口的设计
  14. Chapter 7. 结构体、枚举
  15. 使用Zbar进行二维码识别 中文字符解码 RawBytes
  16. imx6ul can调试(代码)
  17. 装上后这 10个扩展后,VSCode 猛虎添翼,无敌了
  18. 仅通过蓝牙HID将安卓手机模拟成鼠标和键盘
  19. 天猫精灵技能开发从创建到发布
  20. nginx 404 not found错误查找

热门文章

  1. cgb2107-day08
  2. 通信原理 | 宽带:运营商的带宽和实际网速的关系
  3. 最新Win10离线安装.NET Framework 3.5的方法(不需要离线包,只需原版系统安装包,亲测完美快捷有效)
  4. 文化袁探索专栏——线程池执行原理|线程复用|线程回收
  5. Android 高仿微信实时聊天 基于百度云推送
  6. 带电插拔损坏设备原理_那些设备可以热插拔?
  7. 谷歌浏览器的各种插件网址Chrome插件(谷歌浏览器)-超级详细
  8. 到底要怎么做,才能不堵车?
  9. 教你把ElementTable单元格的四个角变圆/自定义特定单元格样式
  10. 成功解决numpy.ndarray size changed