我必须计算RTP流中数据包之间的时间偏移量。使用Theora编解码器编码的视频流我有时间戳字段,如
2856000
2940000
3024000
...
所以我假设传输偏移是84000.使用音频speex编解码器我有时间戳字段,如
38080
38400
38720
...
所以我假设传输偏移是320.为什么值如此不同?它们是微秒,毫秒还是什么?我可以推广一个公式来计算与任何编解码器一起使用的数据包之间的延迟(以微秒为单位)吗?谢谢。
答案 0 :(得分:5)
RTP时间戳取决于媒体。他们使用正在使用的编解码器的采样率。在与时钟或其他RTP流的时间戳进行比较之前,您必须将它们转换为毫秒。
<强>加了:强>
要将timstamp转换为秒,只需将时间戳除以采样率。对于大多数音频编解码器,采样率为8 kHz。
有关示例,请参阅here。
答案 1 :(得分:2)
请注意,视频编解码器通常使用90000作为时间戳速率。
不要猜测时钟频率,而是在sdp中查看正在使用的有效负载的a = rtpmap行。例如:
a=audio 5678 RTP/AVP 0 8 99
a=rtpmap 0 PCMU/8000
a=rtpmap 8 PCMA/8000
a=rtpmap 99 AAC-LD/16000
如果有效载荷为0或8,则时间戳为8KHz。如果它是99,它们是16KHz。请注意,rtpmap行有一个可选的'channels'参数,如“a = rtpmap payload name / rate [/ channels]”
答案 2 :(得分:2)
对音频案例进行了大约一个小时的研究。似乎答案是:RTP时间戳增加了数据包中音频时间单位(样本)的数量。举个例子,你有一个编码的2声道音频流,在音频被编码之前以44100采样。假设您为每个数据包发送512个音频样本(256个时间单位,因为我们有2个通道音频)。假设第一个数据包的时间戳为0(根据RTP规范(RFC 3550),它应该是随机的),第二个时间戳将为256,第三个时间戳为512.接收者可以将值转换回实际时间将时间戳除以音频采样率,因此第一个数据包为T0,第二个数据包等于256/44100 = 0.0058秒,第三个数据包等于512/44100 = 0.0116秒等。
如果我错了,请有人纠正我,我不确定为什么网上没有任何文章以这种方式说明。我想如果RTP时间戳的分辨率不同于音频流的采样率,那将会更复杂。然而,将时间戳转换为不同的分辨率并不复杂。像以前一样使用示例,但将RTP时间戳的分辨率更改为90 kHz,如MPEG4 Audio(RFC 3016)。从源端开始,第一个时间戳为0,第二个时间戳为90000 *(256/44100)= 522,第三个时间戳为1044.在接收器上,第一个数据包的时间为0,第二个数据包的时间为522/90000 = 0.0058 ,第三个是1044/90000 = 0.0116。如果我错了,有人请纠正我。