264编码的基本原理
为了达到良好的编码效率和性能,H.264编码器仍然采用变换和预测的混合编码方式,其完整的编码过程如图所示。
在H.264编码标准中,输入帧或场Fn以宏块为单位进行处理,并且采样的视频图像都被分成16×16宏块,每个宏块包括一个亮度子块和两个8×8色度子块。划分宏块后,编码器按照相应的顺序对宏块进行压缩编码。在H.264编码过程中,首先根据码率、编码质量等标准规定的算法,选择帧内编码或帧间预测编码的方法进行宏块压缩编码。
如果采用帧内预测编码,其预测值pred(图中用P表示)从当前切片中的前一幅编码图像中获得;如果采用帧间预测编码,则通过对当前帧之前和之后的编码图像进行运动补偿来获得预测值pred。其中参考图像由F’n-1表示。为了提高预测精度,从而提高压缩比,可以从已经被编码、解码、重构和滤波的过去或未来(参照显示顺序)的帧中选择实际的参考图像。
在通过相应的算法获得当前宏块(子宏块)的预测值之后,从当前宏块的色度或亮度值中减去预测值pred,以生成残差块Dn。在宏块的DCT变换和量化之后,将产生一组量化的亮度或色度变换系数X。熵编码后,解码所需的一些信息(如预测模式量化参数、运动矢量等。)将被添加以形成压缩的NAL码流,该码流将被NAL压缩。如上所述,为了给下一次预测提供参考图像,编码器必须具有重构图像以重构当前宏块的功能。因此,需要将残差图像的逆量化和逆DCT得到的Dn’与预测值P相加,得到uFn’(未滤波帧)。为了去除编解码环路中产生的噪声,提高参考帧的图像质量和压缩图像的性能,设置环路滤波器对相应的图像进行滤波,滤波后的输出Fn’,即重构图像,可以作为参考图像。
H.264/AVC是一种广泛使用的视频压缩编码标准,包含了先进成熟的视频编码技术。本课程将从原理、标准和实现的角度详细描述H.264/AVC视频编码标准的整体架构和技术细节。不仅讲解了H.264/AVC标准协议文档的内容,还通过实际H.264码流分析/解码程序的开发,帮助观众更深入地理解H.264编码标准的原理。
H.264数据流格式
H264码流的打包方式有两种,一种是Annex-b字节流格式,字节流格式是大多数编码器默认的输出格式,即每帧的前3~4个字节为H264的start _ code,0x0000001或0x000001,即NALU数据+起始前缀(000001或00001)。另一种是原来的nal打包格式,即前几个字节(1,2,4字节)是NAL的长度,而不是start_code。此时,解码前必须借助一些全局数据获得编码器的profile、level、PPS、SPS等信息。
RTP格式:NALU数据+不符合RTP协议的类似RTP报头的20个字节。IP网络的RTP封装方法。对于原始的nal打包格式,即前几个字节(1,2,4字节)是NAL的长度,而不是start_code。此时,在解码之前,必须借助一些全局数据来获得编码器的轮廓、级别、PPS、SPS等信息。
H.264协议只规定了字节流格式,没有规定RTP格式。也可能是这个原因,JM的RTP格式在任何场合都没有使用过,成了摆设。
有两种起始码:3字节的0x000001和4字节的0x00000001。
3字节的0x000001只能在一种情况下使用,即当一个完整的帧被编译成多个片时,包含这些片的路娜使用3字节的起始码。其他场合为4字节。
H.264的两种流格式:
GetAnnexbNALU处理字节流格式码流。
GetRTPNALU处理RTP格式的码流
字节流格式主要用于存储,比如制作DVD(当然现在DVD不使用H.264)。
RTP格式流主要用于网络传输,比如在线看电影。
最简单的RTP包包括RTP头、H.264扩展头和H.264码流。
在JM,首先会把码流打包到NALU,然后把NALU的相关信息改成H.264扩展头,再加上一个RTP头,使之成为一个RTP包。
H.264扩展报头具有一个字段和三个消息。
RTP报头有两种类型:12字节和16字节。JM先读取4个字节,再读取4个字节的时间戳,然后是缓冲区,再读取4个字节的信息源标识符,总共12个字节。
郑重声明:本文版权归原作者所有。转载文章只是为了传播更多的信息。如作者信息标注有误,请第一时间联系我们修改或删除。谢谢你。
转载:感谢您对网站平台的认可,以及对我们原创作品和文章的青睐。非常欢迎大家分享到个人站长或朋友圈,但转载时请注明文章来源“蝶芒网”。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)