首页 > 编程知识 正文

音视频编解码技术,视频编解码技术

时间:2023-05-05 20:02:48 阅读:136441 作者:1908

另一方面,H264概要H264是MPEG-4的第十部分,是由ITU-T和ISO/IEC两个大组织共同提出的视频编解码器标准,该标准通常被称为H.264/AVC。 H264编码是主流的编码方式,本文主要从数据处理的角度分析H264视频码流。

二. H264码流结构H264原始码流(裸流)由多个NAL单元构成,具体如图所示。

…NALUNALUNALU…NALU单元是由什么制成的? NALU单元主要由3个部分构成,具体如下图所示。

startcodenaluheadernalupayload1. start code

开始代码(或开始代码)通常为4或3个字节,必须为“0x000x000x00x01”或“0x000x000x01”,以表示一个NALU单元的开始。

2.NALU Header

NALU Header、1字节、forbidden _ bit (1比特)、nal _ reference _ bit (2bits )、nal_unit_type ) 5bits )这三个部分构成

(1) forbidden _ bit (1bit ) )。

f禁止位占用NALU Header的第一个位,默认值为0,如果值为1,则表示错误。 如果网络发现NAL单元有位错误,则可以将位设置为1,以便接收方可以纠错或丢弃该单元。

)2) nal _ reference _ bit (2bits ) )。

NRI重要性指示位占NALU Header的第2、3个位,用于指示NAL单元的重要性,取值00~11,值越大,表示该NAL单元越重要。

(3) nal _ unit _ type (5b its ) )。

Type类型占NALU Header的第4~8位,表示NAL单元的类型。 具体值如下图所示。

3.NALU Payload

NALU Payload或视频压缩数据RBSP,但从严格意义上讲,Payload数据必须是EBSP。 下面详细说明H264码流数据的概念。

(1)代码分层

H264编码主要分为两个层:用于压缩视频原始数据的VCL层(VCL层)和用于将视频数据聚合到NALU单元中进行网络传输的NAL层。

)2)码流相关概念

33558 www.Sina.com/(stringofdatabits ) :原始数据比特流

在VCL层生成的原始数据流,因为数据长不一定是8的倍数,所以为了便于计算机处理而使用了RBSP。

33558 www.Sina.com/(rawbytesequencepayload ) :原始字节序列负载

也就是说,在SODB后面添加trailing bits,即一个bit 1和几个bit 0,使字节对齐。

3358 www.Sina.com/(encapsulatedbytesequencepayload ) :扩展字节序列加载

NALU单元用开始代码“0x000x000x000x01”或“0x000x000x01”表示一个NALU单元的开始,在H264中检测到0x000x000x00时,也可以表示当前的NALU的结束这样,在NALU内部发生'0x000x000x01 '或'0x000x00 '时,就会出现该怎么办的问题。 因此,h264码流规定,每2个连续的00 00就增加1个0x03,可以防止压缩数据与开始代码冲突,防止冲突。

三. H264数据示例使用UItraEdit工具打开H264文件进行数据分析。 请参照下图。

如上图所示,可以清楚地看到,在H264码流中,以“0x000x000x000x00x01”作为起始代码。 找到开始代码后,以下字节表示NALU Header,如上图所示,分别表示SPS、PPS和IDR类型。

结语主要从数据处理的角度分析H264视频码流的数据,这也是音频视频数据处理的基础,今后将详细介绍音频视频数据开发技术。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。