音视频中 IPB帧、GOP、 PTS 和 DTS,(编解码)

音视频编解码、计算机视觉、音视频传输和分发等,无线传输、IP核心网、互联网接入、音视频直播等领域等。

> 音视频中GOP、 PTS 和 DTS- https://blog.csdn.net/lipengshiwo/article/details/79160316
-- I 帧、P 帧、B 帧的区别在于:
  I 帧(Intra coded frames):I 帧图像采用帧内编码方式,即只利用了单帧图像内的空间相关性,而没有利用时间相关性。I 帧使用帧内压缩,不使用运动补偿,由于 I 帧不依赖其它帧,所以是随机存取的入点,同时是解码的基准帧。I 帧主要用于接收机的初始化和信道的获取,以及节目的切换和插入,I 帧图像的压缩倍数相对较低。I 帧图像是周期性出现在图像序列中的,出现频率可由编码器选择。
  P 帧(Predicted frames):P 帧和 B 帧图像采用帧间编码方式,即同时利用了空间和时间上的相关性。P 帧图像只采用前向时间预测,可以提高压缩效率和图像质量。P 帧图像中可以包含帧内编码的部分,即 P 帧中的每一个宏块可以是前向预测,也可以是帧内编码。
  B 帧(Bi-directional predicted frames):B 帧图像采用双向时间预测,可以大大提高压缩倍数。值得注意的是,由于 B 帧图像采用了未来帧作为参考,因此 MPEG-2 编码码流中图像帧的传输顺序和显示顺序是不同的。
  也就是说,一个 I 帧可以不依赖其他帧就解码出一幅完整的图像,而 P 帧、B 帧不行。P 帧需要依赖视频流中排在它前面的帧才能解码出图像。B 帧则需要依赖视频流中排在它前面或后面的帧才能解码出图像。

-- GOP
 GOP即Group of picture(图像组),指两个I帧之间的距离,Reference(参考周期)指两个P帧之间的距离。一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。所以在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。
 需要说明的是,通过提高GOP值来提高图像质量是有限度的,在遇到场景切换的情况时,H.264编码器会自动强制插入一个I帧,此时实际的GOP值被缩短了。另一方面,在一个GOP中,P、B帧是由I帧预测得到的,当I帧的图像质量比较差时,会影响到一个GOP中后续P、B帧的图像质量,直到下一个GOP开始才有可能得以恢复,所以GOP值也不宜设置过大。
 同时,由于P、B帧的复杂度大于I帧,所以过多的P、B帧会影响编码效率,使编码效率降低。另外,过长的GOP还会影响Seek操作的响应速度,由于P、B帧是由前面的I或P帧预测得到的,所以Seek操作需要直接定位,解码某一个P或B帧时,需要先解码得到本GOP内的I帧及之前的N个预测帧才可以,GOP值越长,需要解码的预测帧就越多,seek响应的时间也越长。

-- DTS、PTS 的概念
 DTS、PTS 的概念如下所述:
  DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。
  PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。
  需要注意的是:虽然 DTS、PTS 是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。
  当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B 帧时,就回到了我们前面说的问题:解码顺序和播放顺序不一致了。
  比如一个视频中,帧的显示顺序是:I B B P,现在我们需要在解码 B 帧时知道 P 帧中信息,因此这几帧在视频流中的顺序可能是:I P B B,这时候就体现出每帧都有 DTS 和 PTS 的作用了。DTS 告诉我们该按什么顺序解码这几帧图像,PTS 告诉我们该按什么顺序显示这几帧图像

-- 音视频的同步
  一个媒体流中,除了视频以外,通常还包括音频。音频的播放,也有 DTS、PTS 的概念,但是音频没有类似视频中 B 帧,不需要双向预测,所以音频帧的 DTS、PTS 顺序是一致的。
  音频视频混合在一起播放,就呈现了我们常常看到的广义的视频。在音视频一起播放的时候,我们通常需要面临一个问题:怎么去同步它们,以免出现画不对声的情况。要实现音视频同步,通常需要选择一个参考时钟,参考时钟上的时间是线性递增的,编码音视频流时依据参考时钟上的时间给每帧数据打上时间戳。在播放时,读取数据帧上的时间戳,同时参考当前参考时钟上的时间来安排播放。这里的说的时间戳就是我们前面说的 PTS。实践中,我们可以选择:同步视频到音频、同步音频到视频、同步音频和视频到外部时钟。

> 视频编解码工作

-- 视频编解码所从事的工作大致分成3类:编解码算法研究、编解码标准实现、编解码应用开发:
 1. 编解码算法研究主要指制定标准相关工作,参与标准组织,制定新一代标准,比如HEVC、AVS等。该方向研究性较强,需要扎实的基础学科功底,如果在学校期间能够很好掌握线性代数、矩阵论、信息论、通信原理、数字信号处理、统计信号处理等课程,对该方面的发展帮助较大。目前国内参与标准制定的单位主要是高等院校、研究机构、以及一些大企业(海思、三星、联发科等)。
 2. 编解码标准实现主要在不同的平台实现符合标准的编码组件和解码组件。该方向要求熟悉标准文档、熟练掌握C语言编程、熟悉平台指令集优化、熟悉嵌入式开发、能够设计编码3大算法(模式选择、码率控制、运动搜索)等。国内设立这种岗位的公司很多,视频监控行业、视频会议行业、互联网行业、机器视觉行业等与多媒体相关的企业都会有。当然,大的公司分工细,会设定专门做编解码组件的岗位,专业化程度;小公司则要求全面,做事杂些。
 3. 编解码应用开发主要是在编解码组件的基础上,进行系统级开发,包括系统封装层、多媒体软件、传输协议、QoS等。该方向所从事的工作更编解码标准中的技术没有关系,主要要求软件集成能力、应用开发能力等。

-- 视频编码相关工作包括:
  压缩标准算法,就是mpeg、vceg标准组织干得事情;
  视频标准开发,就是把标准编码解码在各种平台上实现为组件,比如fpga、x86、arm等;
  视频应用,是在视频标准组件上融合其他功能,比如播放、传输,成为真正的产品。
 
 视频转码工程师主要是视频标准开发工作,包括编码和解码,以及不同压缩标准之间的转换,甚至还包括封装格式转换。所以需要的知识至少包括:熟悉多种压缩标准,能够开发编码三大算法(运动搜索、模式选择、码率控制),能够在不同平台进行指令集优化,熟悉不同的封装格式等。
 

猜你喜欢

转载自blog.csdn.net/ShareUs/article/details/82586910