Video h264 RTP时间戳
我对h264 RTP数据包的时间戳感到困惑。我知道视频的时钟频率是90KHz,这是我在SIP SDP中定义的。我的编码器的帧速率不完全是30 FPS,它是可变的。飞行速度从15 FPS到30 FPS不等。所以,我不能使用任何固定的时间戳 有人能告诉我以下编码数据包的时间戳吗。Video h264 RTP时间戳,video,h.264,rtp,x264,rfc3984,Video,H.264,Rtp,X264,Rfc3984,我对h264 RTP数据包的时间戳感到困惑。我知道视频的时钟频率是90KHz,这是我在SIP SDP中定义的。我的编码器的帧速率不完全是30 FPS,它是可变的。飞行速度从15 FPS到30 FPS不等。所以,我不能使用任何固定的时间戳 有人能告诉我以下编码数据包的时间戳吗。 0毫秒后编码的RTP时间戳=0(让起始时间戳为0) 50毫秒后编码的RTP时间戳= 40毫秒后编码的RTP时间戳= 33毫秒后编码的RTP时间戳= 编码帧速率可变时的公式是什么 提前谢谢。编码器是以10FPS还是30FPS
0毫秒后编码的RTP时间戳=0(让起始时间戳为0)
50毫秒后编码的RTP时间戳=
40毫秒后编码的RTP时间戳=
33毫秒后编码的RTP时间戳=
编码帧速率可变时的公式是什么
提前谢谢。编码器是以10FPS还是30FPS的速度编码视频并不重要,使用RTP时间戳,您可以告诉接收器两帧之间的暂停时间有多长。因此,您可以为每一帧动态地确定该值。这样,您可以在一秒钟内发送10帧(10fps),在另一秒钟内可以发送30帧(30fps)。您只需要正确设置RTP时间戳。如果我听到你的问题,你会怀疑怎么做 让开始时间戳为0,将挂钟时间(以毫秒为单位)乘以100添加到最后一个RTP时间戳,或者可以使用任何想要的时间刻度。要使解码器以30fps的速度解码10fps视频,请为每个数据包的RTP时间戳添加333000。。。但让我们看看你的例子:
Frame # RTP Time Time between frames [ms]
[ 1] 0 0
[ 2] 50000 50
[ 3] 90000 40
[ 4] 420000 33
因此,如果您像这样设置RTP时间戳(时间单位:ms*100000)您将使解码器加载并解码第1帧,然后加载并解码第2帧,但它将在绘制第2帧之前休眠50 ms(第1帧和第2帧之间的时间差),依此类推
如您所见,解码器使用RTP时间戳来知道何时显示每个时间戳,并且它不介意视频是以30或10 fps的速度编码的
此外,如果视频为30 fps,这并不意味着每秒将有30个RTP数据包。有时可能会超过100,因此您无法使用公式来确保正确的RTP时间戳计算
我想这就是你需要的。。。希望我能帮上忙,如果我没有帮上忙,就不要告诉我……) 这方面没有简单的公式 编码前用于对帧进行采样的瞬间称为PTS(表示时间戳)。它超出了编码器的范围,当您捕获帧时,您必须在数据流中记住它 在此基础上,您有两种可能性:
RFC6184中描述的最后一种模式是所谓的交错顺序,您可以在其中对NAL单元重新排序。在这种情况下,您必须实现一些应用程序逻辑来重新排列单元,有关详细信息,请参阅RFC6184。我在应用程序中使用此公式来计算h.264视频流的RTP时间戳字段:
时间戳=时间戳+Inverval(毫秒)*90000/1000 0毫秒后编码的RTP时间戳=0
50毫秒后编码的RTP时间戳=0+50*90=4500
40毫秒编码后的RTP时间戳=4500+40*90=8100
在33毫秒编码的RTP时间戳=8100+33*90=11070之后,我不太清楚。我正在尝试解析nalu并发送rtp。问题是我必须自己计算时间戳。目前我很确定我做错了(timestamp lasttimestamp)*100000。每次从比特流读取新的nalu时,我都会设置新的时间戳,但这种形式会使时间戳在数据包之间发生变化,数据包a的时间戳可能比数据包B大!RTP时间戳除了告诉帧之间的时间差外,还告诉绝对时间。否则,它不能用于音频和视频之间的同步。@不,您不能在32位整数字段中可靠地设置绝对64位时间值。最好使其相对于0。关键是时间戳应该线性增加,相同的时间戳值应该出现在匹配的AV帧上,并且在设置时间戳时应该记住时钟速率值,所以在1AV秒内
最后一帧时间戳-第一帧时间戳=时钟速率
。您有RTP扩展头来存储您想要的任何其他数据,比如正确的时间戳(ticks),等等@Cipi我不是说NTP直接在RTP内。可以计算NTP 64位,因为RTCP将RTP 32位时间戳映射到NTP。更多详细信息:SR发送方的报告有:NTP时间戳(64位),格式为NTP,表示挂钟绝对日期和时间。RTP时间戳(32位)请参见rfc3550中的“6.4.1 SR:发送方报告RTCP数据包”