AAC RTP时间戳和同步

时间:2012-12-05 15:12:36

标签: audio synchronization streaming rtp aac

我目前正在使用RTP传输音频(8kHz的AAC-HBR)和视频(H264)。两个Feed都可以单独运行,但是当它们放在一起时它们会非常快速地失去同步(少于15秒)。

我不知道如何增加音频RTP头上的时间戳,我认为应该是两个RTP数据包之间的时间差(大约127ms)或1/8000(0.125 ms)的恒定增量。但是没有奏效,相反我设法找到了一个最佳点。当我为每个数据包增加935的时间戳它保持同步约一分钟。

3 个答案:

答案 0 :(得分:1)

AAC帧大小为1024个样本。尝试增加(1/8000)* 1024 = 128 ms。如果您的数据包有多个AAC帧,则为其倍数。

这有帮助吗?

答案 1 :(得分:0)

如果它们是从不同的媒体录像机中拍摄的,那么在Android中的恕我直言视频和音频去同步很难打。它们只是捕获不同的起始帧,并且没有办法(看起来如此)找出有多大的去同步,并在飞行时使用音频或视频时间戳进行调整。

答案 2 :(得分:0)

有点晚了,但是想到了提出我的答案。

音频RTP数据包上的时间戳== RTP数据包中包含的音频样本数。

对于AAC,每个帧包含1024个样本,因此RTP数据包上的时间戳应增加1024。

2个RTP数据包的时钟时间之间的差异=(1/8000)* 1024 = 128ms,即发送方应发送相差128 ms的rtp数据包。

从其他采样率中获取更多信息:

现在,以44100hz采样的AAC表示1秒内有44100个信号采样。 因此1024个样本意味着(1000ms / 44100)* 1024 = 23.21995 ms 因此,两个RTP数据包之间的时间戳= 1024,但是 rtp会话中2个RTP数据包之间的时钟时间差应为23.21995ms。

尝试与其他示例关联:

例如对于G711系列(PCM,PCMU,PCMA),采样频率= 8k。 因此20ms数据包应具有== 8000/50 == 160的样本。 因此,RTP时间戳增加了160。 两个RTP数据包之间的时钟时间差应为20ms。