【发布时间】:2017-06-23 11:49:19
【问题描述】:
我了解 Android 和 iOS 设备中的视频播放器以视频编码速率解码流媒体内容。 视频编码和播放速率之间有什么关系吗?即正常播放(不使用x2,x0.5等设置)是否也会以编码率发生?
如果不是,那么播放速率是如何定义的?
谢谢! 问候, 约翰
【问题讨论】:
标签: video streaming playback rate
我了解 Android 和 iOS 设备中的视频播放器以视频编码速率解码流媒体内容。 视频编码和播放速率之间有什么关系吗?即正常播放(不使用x2,x0.5等设置)是否也会以编码率发生?
如果不是,那么播放速率是如何定义的?
谢谢! 问候, 约翰
【问题讨论】:
标签: video streaming playback rate
我不完全确定您在这种情况下所说的编码率是什么意思,但它可能有助于理解大多数视频编码格式包含两个时间概念:
如果您查看一些讨论,您会经常看到提到 PTS 和 DTS - 它们是帧的解码时间戳和呈现时间戳。
演示时间戳很容易理解 - 这是帧需要显示的时间,以便观看者按预期看到视频。
之所以存在解码时间戳,也是因为许多编码器通过获取参考帧来压缩帧,并通过它们相对于这些帧的变化来描述其他帧。正如您可以想象的那样,这可以为背景保持相当恒定的帧节省大量带宽。
参考帧可以是向前的也可以是向后的 - 换句话说,给定的帧“X”可以通过参考帧“X-3”和“X+3”的增量来描述。
这意味着视频播放器在想要呈现帧 X 时需要具有帧“X+3”,因此它需要解码帧“X+3”的时间提前于它需要呈现它的时间.
在经典的ffmpeg教程中有很好的描述:http://dranger.com/ffmpeg/tutorial05.html
教程中的图表有助于以图形方式解释它 - P 帧是参考帧,B 帧是通过它们与参考帧的差异来描述的:
PTS: 1 4 2 3 DTS: 1 2 3 4 Stream: I P B B
I 帧是完整的图像,P 帧是基于前一个 I 帧的增量,B 帧是依赖于前一帧和后续帧中的信息的增量。
观看者将(希望!)按 PTS 时间的顺序观看视频:即上例中的 1、2、3、4,但帧需要按 DTS 的顺序解码,而且按此顺序流式传输它们是有意义的。
【讨论】: