@universal
2018-08-06T09:50:17.000000Z
字数 970
阅读 394
音视频
简介:H264视频编码技术是对序列帧图像进行压缩的技术。H264其实可以说是一个数字视频编码标准。它采用网络友好的结构和语法,有利于对误码和丢包的处理。
H264对网络友好体现在它能适应于不同网络之间的视频传输,主要原因是引入了分层结构,即将图像压缩数据分成网络抽象层(NAL, Network Abstraction Layer)和视频编码层(VCL, Video Coding Layer),从而实现了压缩编码与网络传输分离,使编码层能够移植到不同的网络结构中。这样不但使得H264对目前显存的各种网络有很强的网络友好性,而且使它对未来的网络具有很强的适应性。
对视频进行压缩主要是为了消除帧图像的冗余数据。冗余主要有以下几类:
IPB帧是视频帧序列图像进行压缩后形成的产物:
I帧:是关键帧,不依赖于其他帧,可以解压生成一张单独的画面;
P帧:向前预测帧,参考一个前面的I帧或者P帧来解压成一张完整的画面;
B帧:双向预测帧,参考一个前面的I帧或P帧和后面的一个P帧来解压成一张完整的画面;
所以I帧是去除空间维度的冗余信息,P、B帧是去除时间维度上的冗余信息。
在ffmpeg中,AVPacket代表解码前和编码后的压缩包,AVFrame代表解码后和编码前的信号帧,所以pts就表示信号帧的播放时间,dts表示压缩包解码的时间点。
在标准H264中,PTS是真正录制和播放的时间戳,而DTS是解码的时间戳,一般按常理来说,视频进行解码后便即刻显示,即压缩后没有B帧生成,PTS=DTS。
但是在H264中,解码顺序和输入顺序并不一致,在I帧和P帧之间插入的B帧的解码顺序可能会延后,所以需要pts和dts来保证视频的正确播放。
而且B帧相对越多,视频可能就会越清晰,因为B帧占用空间最少,可以利用更多的容量去存储I帧。