1、对于 H.264
H.264,同时也是 MPEG- 4 第十局部,是由 ITU- T 视频编码专家组(VCEG)和 ISO/IEC 动静图像专家组(MPEG)联结组成的联结视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器规范。
这个规范通常被称之为 H.264/AVC。
2、H.264 原始码流 (即裸流) 构造
H264 性能分为两层,VCL(视频编码层)和 NAL(网络提取层).
VCL:包含外围压缩引擎和块,宏块和片的语法级别定义,设计指标是尽可能地独立于网络进行高效的编码。
NAL:负责将 VCL 产生的比特字符串适配到各种各样的网络和多元环境中,笼罩了所有片级以上的语法级别。
VCL 数据传输或者存储之前,会被映射到一个 NALU 中,H264 数据蕴含一个个 NALU。如下图
一个原始的 NALU 单元构造如下:
[StartCode] + [NALU Header] + [NALU Payload] 三局部。
StartCode,是一个 NALU 单元开始,必须是 00 00 00 01 或者 00 00 01。
其中 NAL Header 格局如下:
0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+
|F|NRI| TYPE |
+-+-+-+-+-+-+-+-+
F(1 bit):Forbidden_zero_bit
,禁止位,编码中默认为 0,当网络辨认此单元中存在比特谬误时,可将其设为 1,以便接管方丢掉该单元。次要用于适应不同品种的网络环境(比方有线无线相结合的环境)。例如对于从无线到有线的网关,一边是无线的非 IP 环境,一边是有线网络的无比特谬误的环境。假如一个 NAL 单元达到无线那边时,校验和检测失败,网关能够抉择从 NAL 流中去掉这个 NAL 单元,也能够把已知被毁坏的 NAL 单元传给接收端。在这种状况下,智能的解码器将尝试重构这个 NAL 单元(已知它可能蕴含比特谬误)。而非智能的解码器将简略的摈弃这个 NAL 单元。NRI(2 bits):Nal_ref_idc
,重要性批示位,用于在重构过程中标记一个 NAL 单元的重要性,值越大,越重要。值为 0 示意这个 NAL 单元没有用于预测,因而可被解码器摈弃而不会有错误扩散;值高于 0 示意此 NAL 单元要用于无漂移重构,且值越高,对此 NAL 单元失落的影响越大。例如,若以后 NAL 属于参考帧的片,或是序列参数集,或是图像参数集这些重要的单位时,该值必须大于 0.TYPE(5 bits): Nalu_type
:示意以后 NAL 单元的类型,类型 1-12 是 H.264 定义的,类型 24-31 是用于 H.264 以外的,RTMP 符合规范应用这其中的一些值来定义包聚合和决裂,其余值为 H.264 保留。
| nalu_type | 示意 NALU 类型 |
|:——–:| :———:|
| 0
| 未指定。|
| 1
| 未应用 Data Partitioning、非 IDR 图像的 Slice。|
| 2
| 应用 Data Partitioning、且为 Slice A。|
| 3
| 应用 Data Partitioning、且为 Slice B。|
| 4
| 应用 Data Partitioning、且为 Slice c。|
| 5
| IDR 图像中的 Slice。|
| 6
| 补充加强信息单元(SEI)。|
| 7
| 序列参数集(Sequence Parameter Set, SPS)。|
| 8
| 图像参数集(Picture Parameter Set, PPS)。|
| 9
| 分界符。|
| 10
| 序列完结。|
| 11
| 码流完结。|
| 12
| 填充。|
| 13~23
| 保留。|
| 24~31
| 未应用。|
因而,如果要晓得 nalu 的类型,只须要判断 nalu_type 即可:
1 00 00 00 01 06: SEI
2 00 00 00 01 67: 0x67 & 0x1f = 0x07 : SPS
3 00 00 00 01 68: 0x68 & 0x1f = 0x08 : PPS
4 00 00 00 01 65: 0x65 & 0x1f = 0x05 : IDR Slice
EBSP
:扩大字节序列载荷,在 RBSP 根底上填加了仿校验字节(0x03),它的起因是:在 NALU 加到 Annexb 上时,须要增加每组 NALU 之前的开始码 StartCodePrefix,如果该 NALU 对应的 slice 为一帧的开始(即为 IDR 帧)则用 4 位字节示意:0x00000001,否则用 3 位字节示意:0x000001。为了使 NALU 主体中不包含与开始码相冲突的,在编码时,每遇到两个字节间断为 0,就插入一个字节的 0x03。解码时将 0x03 去掉。也称为 “ 脱壳操作 ”。RBSP
:原始字节序列载荷,在 SODB 的前面填加了结尾比特(RBSP trailing bits,一个 bit “1”)若干比特 “0”,以便字节对齐。SODB
:数据比特串,最原始的编码数据。
至此,到了 SODB
,就是 h264 最原始的编码数据。
## 对于 SkeyeARS ##
SkeyeARS 全景 AR 加强监视系统,是视开科技开发的一款基于宽场景多路视频无缝拼接、视频实时加强、监督指标加强显示、指标主动跟踪、视频存储回放、近程数据传输和多通道全景视频同步显示等性能的综合视频 AR 加强监视系统,广泛应用于智慧交通、智慧城市、智慧机场等大场景智能监控畛域。
具体阐明:http://www.openskeye.cn/web/product/ars