Cip*_*ipi 13
如果您的编码器以10FPS或30FPS对视频进行编码并不重要,使用RTP时间戳告诉接收器两帧之间的暂停时间.因此,您可以动态确定每个帧.这样你可以在一秒钟内发送10帧(10fps),而在另一秒钟你可以发送30帧(30 fps).您只需要正确设置RTP时间戳.如果我得到你的问题,你就会怀疑如何做到这一点......
让开始时间戳为0,您将挂钟时间(以毫秒为单位)乘以100加到最后一个RTP时间戳,或者您可以使用您想要的任何时间刻度.要使解码器以30fps解码10fps视频,请为每个数据包添加333000到RTP时间戳...但让我们看一下您的示例:
Frame # RTP Time Time between frames [ms]
[ 1] 0 0
[ 2] 50000 50
[ 3] 90000 40
[ 4] 420000 33
Run Code Online (Sandbox Code Playgroud)
因此,如果您设置这样的RTP时间戳,(Time in ms * 100000)
您将使解码器加载并解码帧1,然后加载和解码帧2,但它将在绘制帧2之前休眠50毫秒(帧1和帧2之间的时间差) , 等等...
正如您所看到的,解码器使用RTP时间戳来知道何时显示每个时间戳,并且如果视频以30或10 fps编码,则不会介意.
此外,如果视频是30 fps,这并不意味着每秒将有30个RTP数据包.有时可能会超过100,因此您无法获得确保正确的RTP时间戳计算的公式.
我想这就是你需要的......希望我能帮助,如果我没有,我就不要约会... =)
对此没有简单的公式。
用于在编码前对帧进行采样的时刻称为PTS(演示时间戳)。它超出了编码器的范围,您必须在捕获帧时在数据流中记住它。
从那里,您有两种可能性:
在后一种情况下,RFC6184 指出您有多种方式来传输编码的 NAL 单元。
大多数流媒体软件都会使用称为“非交错”的模式,在这种模式下,您必须将RTP时间戳设置为PTS+偏移量,但按解码顺序发送它们,这样时间戳不会单调增加。这也意味着客户端必须按照接收到的顺序进行解码,而不是按照 PTS 顺序对帧重新排序。
我在这里没有使用术语DTS是有原因的,因为你不需要解码时间戳来工作,只需要顺序。
RFC6184 中描述的最后一种模式是所谓的交错顺序,您可以在其中重新排序 NAL 单元。在这种情况下,您必须实现一些应用程序逻辑来重新排序单元,有关详细信息,请参阅 RFC6184。
归档时间: |
|
查看次数: |
16176 次 |
最近记录: |