【问题标题】:How to calculate effective time offset in RTP如何计算RTP中的有效时间偏移
【发布时间】:2019-07-04 22:40:49
【问题描述】:

我必须计算 RTP 流中数据包之间的时间偏移。使用 Theora 编解码器编码的视频流,我有时间戳字段,例如

 2856000
 2940000
 3024000
 ...

所以我假设传输偏移量是 84000。使用音频 speex 编解码器,我有像

这样的时间戳字段
 38080
 38400
 38720
 ...

所以我假设传输偏移量是 320。为什么值如此不同?它们是微秒、毫秒还是什么?我可以概括一个公式来计算适用于任何编解码器的数据包之间的延迟(以微秒为单位)吗?谢谢。

【问题讨论】:

标签: voip offset rtp timestamp


【解决方案1】:

RTP 时间戳取决于媒体。他们使用正在使用的编解码器的采样率。在与您的时钟或其他 RTP 流中的时间戳进行比较之前,您必须将它们转换为毫秒。

添加:

要将时间戳转换为秒,只需将时间戳除以采样率即可。对于大多数音频编解码器,采样率为 8 kHz。

请参阅here 了解一些示例。

【讨论】:

  • 如何转换度量?
【解决方案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]”

【讨论】:

    【解决方案3】:

    针对音频案例研究了这个问题大约一个小时。似乎答案是: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 音频 (RFC 3016) 中一样。从源端看,第一个时间戳是0,第二个是90000*(256/44100)=522,第三个是1044。而在接收端,第一个数据包的时间是0,第二个数据包的时间是522/90000=0.0058 , 第三个是 1044/90000=0.0116。再次,如果我错了,请有人纠正我。

    【讨论】:

      猜你喜欢
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-31
      • 2015-07-03
      • 2012-12-17
      • 2015-03-15
      • 2017-02-26
      相关资源
      最近更新 更多