RTP时间戳不是线性的?

时间:2014-02-03 10:48:39

标签: rtp

我正在尝试使用rtp时间戳重建音频对话(使用g711音频进行a-b调用)。我曾经使用两个rtp时间戳和采样率的差异来填充静音。对话失去了同步,然后我看到rtp时间戳不是线性的。我无法使用rtp时间戳获得准确的时钟时间并导致同步问题。我如何计算确切的时间。

3 个答案:

答案 0 :(得分:0)

我对GStreamer提供的Stream有同样的问题,它不提供单调时间戳。 例如:邮票之间的差异应该恰好是1920,但它介于~120和~3500之间,但平均值为1920.

这里的问题是没有办法找到丢失的样本,因为你永远不知道高差异是来自编码器延迟还是缺少样本。

如果您只有要解码的音频,我会尝试将"有效"每个样本的PTS值(在我的情况下基准时间+ 1920,基准时间+ 3840等等。)

当视频和音频合并时,问题就出现了。在这里,这个技巧不能很好地工作,当样本丢失并且没有办法找出这种情况时:(

答案 1 :(得分:0)

当你想发送rtp时,你应该注意两件事: 由于字节数量的增加,时间戳会增加。 例如,对于PT = 10,您可能具有以下模式: 1160字节,时间戳增量:1154并等待26 ms 让我们看看这个计算是如何发生的:

。数据包的数量应在一秒内发送:1 /(26ms)= 38

时间戳增量:clockrate /#= 1154

答案 2 :(得分:0)

关于RFC3550(https://www.ietf.org/rfc/rfc3550.txt

  

采样时刻必须从递增的时钟导出   单调

它不是一个选择,也不是一个选择。顺便提一下,请阅读RTP数据包的时间戳字段的完整描述,我在那里也找到了:

  

例如,对于固定速率音频         时间戳时钟可能会增加一个         抽样期。如果音频应用程序读取块覆盖         来自输入设备的160个采样周期,时间戳将是         每个这样的块增加160,无论是否         block在数据包中传输或者以静默方式丢弃。

如果要检查线性度,请使用RTCP SR RTP和NTP时间戳字段。在SR报告中,RTP时间戳属于NTP时间戳。 所以两个连续RTP时间戳的差异(让我们称之为dRTPt_1,dRTP_2,...)和两个连续NTP时间戳的差异(让我们称之为dNTP_1,dNTP_2,...)然后将dRTP_t *与时钟速率相乘并检查天气你得到dNTP_t *。

但首先请阅读RFC。