【问题标题】:AAC RTP timestamps and synchronizationAAC RTP 时间戳和同步
【发布时间】:2012-12-05 15:12:35
【问题描述】:

我目前正在使用 RTP 流式传输音频(8kHz 的 AAC-HBR)和视频 (H264)。两个提要单独工作都很好,但是当它们放在一起时,它们很快就会不同步(不到 15 秒)。

我不确定如何增加音频 RTP 标头上的时间戳,我认为它应该是两个 RTP 数据包之间的时间差(大约 127 毫秒)或 1/8000(0.125 毫秒)的恒定增量。但两者都不起作用,相反,我设法找到了一个甜蜜点。当我为每个数据包将时间戳增加 935 时,它会保持同步大约一分钟。

【问题讨论】:

标签: audio synchronization streaming rtp aac


【解决方案1】:

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

这有帮助吗?

【讨论】:

  • 谢谢!这有很大帮助。这让我意识到我的视频不同步而不是我的音频!
【解决方案2】:

恕我直言,android 中的视频和音频不同步如果取自不同的媒体记录器,则很难解决。他们只是捕捉不同的起始帧,没有办法(看起来)找出不同步有多大,并在飞行中使用音频或视频时间戳对其进行调整。

【讨论】:

    【解决方案3】:

    有点晚了,但是想把我的答案放上来。

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

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

    2个RTP包的时钟时间差=(1/8000)*1024 = 128ms,即发送者发送rtp包的时间差为128ms。

    来自其他采样率的更多信息:

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

    尝试与其他示例相关联:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 1970-01-01
      • 1970-01-01
      • 2013-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多