H264视频码流格式浅析
原文地址
https://blog.csdn.net/h514434485/article/details/52064945
针对H264码流格式说明,网上已经有很多介绍了,最近也在看这个,这里根据自己理解,做个记录。
1、H264的功能分为两层:视频编码层(VLC,Video Coding Layer)和网络提取层(NAL, Network Abstraction Layer)。VLC数据即
编码处理的输出,它表示被压缩编码后的视频数据序列。在VCL数据传输或存储之前,这些编码的VCL数据先被映射或封装进NAL单
元。每个NAL单元包括一个原始字节序列负荷(RBSP, Raw Byte Sequence Payload)、一组对应于视频编码的NAL头信息。
这里说明下RBSP,EBSP,SODB。
SODB:(String of Data Bits)最原始的编码数据,无任何附加数据。
RBSP:在SODB的基础上增加了rbsp_stop_ont_bit(bit值为1)并用0按字节补位对齐。
EBSP:(Encapsulation Byte Sequence Packets)在RBSP的基础上增加了防止伪起始码字节(0x03)。
RBSP的基本结构是在原始编码数据的后面添加了结尾比特。一个bit”1”,若干比特”0”,以便字节对齐。
NAL单元序列如下:
图1
每个NAL单元包括NAL头+RBSP。
典型的RBSP单元如下:
现在来具体的说明下NAL头和RBSP。
NAL头结构为:
+—————+
|0|1|2|3|4|5|6|7|
+-+-+-+-+-+-+-+-+
|F|NRI| Type |
+—————+
NAL头说明:
针对Type的说明为:
然后我们根据一个实际的H264文件内容看下:
我们可以看到NAL的单元有SPS、PPS、SEI、IDR_SLICE等。NAL单元里面的头也显示了,头结构里面的nal_unit_type表示了RBSP是什么类型。这里要说明一点NAL_Size的大小是不包括startcode大小的。
接下来说明下起始码即刚刚上面提到的startcode。
起始码:如果NALU对应的Slice为一帧的开始,则用4字节表示,即0x00000001;否则用3个字节表示,即0x000001。
另外这里要用到上面提到的EBSP。为了使NALU的主体不包括起始码,在编码的时候每遇到两个字节(连续)的0,就插入一个字节0x03,以便和起始码相区别,解码时,则将相应的0x03删除掉。所以有时候NAL单元有可能是NAL头+EBSP组成。
NALU主体 编码时插入0x03
0x000000 >>>>>> 0x00000300
0x000001 >>>>>> 0x00000301
0x000002 >>>>>> 0x00000302
0x000003 >>>>>> 0x00000303
接下来对应刚刚的H264,其文件数据表示如下:
前面两个0x00000001对应PPS和SPS,第三个0x000001对应SEI。
2、接下来说说SPS、PPS和SEI。
SPS和PPS是用来初始化解码器的,没这些数据,视频数据是无法解析出来的。另外如果我们分析单独的H264文件,可以发现有的文件每个IDR帧前面都有PPS和SPS,有的只是开头才有。针对SPS和PPS,一般来说:
1)、如果是在直播的话,每个IDR帧前面都应该加上SPS和PPS,因为有的观众会中途进来观看。
2)、如果是本地稳定文件,可以在开头加上SPS和PPS,或者都加上,这个根据具体需要来。
另外说明下SEI,有的H264文件有SEI,有的则没有,这说明SEI对文件的播放并无太大影响。
SEI(Supplemental Enhancement Information):辅助增强信息。这里面可以存放一些影片简介,版权信息或者作者自己添加的一些信息。
参考文章:
http://www.cnblogs.com/skyseraph/archive/2012/04/01/2429384.html
http://blog.csdn.net/mandagod/article/details/51174680
H264视频码流格式浅析相关推荐
- H264视频码流结构分析
目录 前言 H264码流结构 H264帧结构 H264档次介绍 RTSP实时音视频开发实战课程:<RTSP实时音视频开发实战> <YUV编码为H264视频流代码实现>链接: h ...
- 【FFmpeg学习】H264 视频码流分析
1. H264编码分层 NAL层:(Network Abstraction Layer,视频数据网络抽象层): 它的作用是H264只要在网络上传输,在传输的过程每个包以太网是1500字节,而H264的 ...
- H265视频码流结构分析
目录 前言 H265码流结构 H265帧结构 H265档次介绍 前言 在音视频开发入门基础知识(视频入门篇)中介绍了H265的一些编码基础,本文会对H265编码后的视频流做一个详细的介绍.H264视频 ...
- <整理总结>H264/265码流数据包格式分析(带mp4v2封装H264/265为MP4的源码示例)
H264/265码流数据包格式分析 前言: 一.H.264码流解析 I帧P帧B帧说明: 二.H.265码流解析 三.主要源码 前言: 最近在学习使用MP4v2将H264/H265码流以及AAC音频封装 ...
- 【H264/AVC 句法和语义详解】(二):h264码流格式与NALU详解一
上一篇中,我们站在句法元素(或称语法元素)的角度,介绍了H.264的句法和语义,和句法元素的分层结构.在这篇中,我们更进一步,从比特的角度出发,来探索h264码流的组成.通过这篇的学习,我们会初步具备 ...
- 码流格式: Annex-B, AVCC(H.264)与HVCC(H.265), extradata详解
1.前言 介绍H.264结构的文章铺天盖地,无责任翻译.无责任转载以及部分经验之谈(目前搜索最靠前的一篇实际是对stackoverflow上答案的翻译..链接后面给出了),所以缺的不是资料,是叙述准确 ...
- H264/H265码流类型
文章目录 H.264码流 H.264码流格式 Annex B AVCC H.265码流 H.264码流 H264中,NALU类型1-5为视频帧,其余则为非视频帧.在解码过程中,我们只需要取出NALU头 ...
- linux 摄像头 音频,调用宇视摄像机SDK获取IPC的音视频码流
调用宇视摄像机SDK获取IPC的音视频码流 2020年07月13日 | 萬仟网网络运营 | 我要评论 通过调取宇视摄像机SDK,获取的音视频码流,其格式为标准的h264 over rtp或h265 o ...
- 视音频数据处理入门:H.264视频码流解析
===================================================== 视音频数据处理入门系列文章:视音频数据处理入门:RGB.YUV像素数据处理视音频数据处理入门 ...
最新文章
- Random类(Java中的随机类)
- Eclipse tomcat Web页面调试
- python的os.path.join
- Oracle sql如何把毫秒转为日期,sql – 将毫秒转换为时间戳
- Kali安装magescan评估工具
- 前端实现连连看小游戏(1)
- 【CSS基础】实现 div 里的内容垂直水平居中
- CF653F. Paper task
- beanutil 批量copy_BeanUtils.copyProperties 需要getset方法支持
- java端到端_Java应用程序性能监控:复杂分布式应用程序的端到端性能
- ●BZOJ 1855 [Scoi2010]股票交易
- 【计算机毕业设计】基于SpringBoot的物流管理系统
- java opencv 之车辆识别
- 网上书城_前端动态加载类别and书籍显示
- amd支持服务器内存,AMD专用内存为什么只能在AMD平台使用?与普通内存有什么区别?...
- java stack长度_Java Stack size()用法及代码示例
- 如何在YouTube上制作播放列表
- 计算机英语单词怎么读,英语单词read怎么读,read的音标是什么,read是什么意思 - 音标网...
- 编译原理:LL(1)文法 语法分析器(预测分析表法)
- loadrunner压测小程序