音视频编解码, IPB帧、GOP、 DTS 和PTS音视频同步,(编解码工作)

xiaoxiao2021-03-01  93

音视频编解码、计算机视觉、音视频传输和分发等,无线传输、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。实践中,我们可以选择:同步视频到音频、同步音频到视频、同步音频和视频到外部时钟。

-- DTS PTS,音视频同步。 CRB恒定码率,VBR可变码率。   HLS(HTTP Live Streaming),以实现android上播放m3u8文件。由于TS段的切分不统一,每个视频网站给出的m3u8 playlists总有差别,在时间戳显示上有差异,所以对DTS和PTS进行了研究。从技术上来说,解决音视频同步问题的最佳方案就是时间戳.   DTS和PTS是音视频同步的关键技术,同时也是丢帧策略密切相关。dts/pts定义 dts: decoding time stamp pts: present time stamp 在ISO/IEC13818-1中制定90k Hz 的时钟,如果编码帧频是30,那么时间戳间隔就该是90000 / 30 = 3000。 在FFMPEG中有三种时间单位:秒、微秒和dts/pts。从dts/pts转化为微秒公式:dts* AV_TIME_BASE/ denominator

  DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。虽然 DTS、PTS 是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。   帧的显示顺序是:I B B P,现在我们需要在解码 B 帧时知道 P 帧中信息。DTS 告诉我们该按什么顺序解码这几帧图像,PTS 告诉我们该按什么顺序显示这几帧图像。DTS,Decoding Time Stamp,解码时间戳,告诉解码器packet的解码顺序;PTS,Presentation Time Stamp,显示时间戳,指示从packet中解码出来的数据的显示顺序。   视频的帧率(Frame Rate)指示视频一秒显示的帧数(图像数);音频的采样率(Sample Rate)表示音频一秒播放的样本(Sample)的个数。decoder 图像pts 的计算。decoder 可以根据frame rate 计算每个frame 的间隔时间,只要知道第一个frame 的pts,后面的pts就可以根据frame rate计算出来。

 1. 视频时间戳,pts = inc++ *(1000/fps);  其中inc是一个静态的,初始值为0,每次打完时间戳inc加1. 在ffmpeg,中的代码为:pkt.pts= m_nVideoTimeStamp++ * (m_VCtx->time_base.num * 1000 / m_VCtx->time_base.den);  2. 音频时间戳,pts = inc++ * (frame_size * 1000 / sample_rate) 在ffmpeg中的代码为:pkt.pts= m_nAudioTimeStamp++ * (m_ACtx->frame_size * 1000 / m_ACtx->sample_rate);

> 视频编解码工作

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

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

> 音视频编解码

h264是以16*16的宏块单位进行编码的。帧分底场和顶场,如顶场为偶数 底场为奇数。帧级码率控制。 编码工具,编码策略。PSNR,峰值信噪比。编码器的JVT参考模型。编码器根据网速调节码率。   概率建模 上下文建模。视频中的滤波器。视频图像的帧编码和场编码。怎么限制b帧的生成?SP帧和SI帧用于帧间切换 。当流的内容相同时,只是图像质量不同时,使用SP帧;当流的内容相差很大时,使用si帧。视频的码率控制与算法。   视频推流时硬编码和拉流时的软编码。视频播放时发热比较严重?h264的变换器和量化器。量化器的编码压缩率和图像 精度。   图像与视频中 都有图像 ,一个动态的 一个静态的。h264视频传输的分层结构:网络抽象层和视频编码层。图像参数集 PPS,序列参数集SPS.长期参考帧 短期参考帧 非参考帧。   信息中的连续信源和随机信源。自适应算术编码算法。信息熵。帧中包含两个场:顶场和底场。   编码原理:预测编码 变换编码 量化编码 熵编码。帧内和帧间预测。帧间预测:运动估计和运动补偿。后向预测和双向预 测 在视频会议和视频电话中不能使用,否则有编码延时。网络视频用了大量的双向预测。   图像信号 模拟信号 数字信号。帧,单辐影像画面。数字视频。时间采样 空间采样。RGB YUV色彩模型 三维笛卡尔坐标 系表示。

 H264核心压缩算法:帧间预测,帧内预测,变换量化,熵编码,去块效应处理;  编码工具(编码压缩算法):树状分块编码,分级预测,帧内预测,帧间预测,4*4变换,8*8变换,量化方法,熵编码;  SP帧和SI帧均用于流间切换。  离散傅里叶变换(DFT):图像处理的数学工具,对图像进行频谱分析,滤波、降噪等处理。离散余弦变换,对信号和图像(静止和运动图像)进行有损压缩处理。

 

转载请注明原文地址: https://www.6miu.com/read-4150211.html

最新回复(0)