RTP 口型同步

RTP lipsync synchronization

嗨,有人可以向我解释如何在两个 RTP 流(来自同一个 RTSP 会话)之间实现口型同步。我正在尝试为 ffmpeg AVPacket 计算正确的点,但我遗漏了一些东西,我无法理解这个问题。 我有以下可用数据:
u64RTCP_NTP_TS - 来自 RTCP 发件人报告的 NTP 时间戳
u32RTCP_TS - 来自 RTCP 发件人报告的时间戳
u32AudioRTP_TS - 来自音频 RTP 数据包的时间戳
u32VideoRTP_TS - 来自视频 RTP 数据包的时间戳

我已经搜索了一个答案,但我仍然无法清楚地了解应该如何在计算方面实现这一点,我还缺少什么。

好的,我通过浏览 Live555 的代码找到了答案,所以 积分应该放在那里,非常感谢他们。 答案位于文件 RTPSource.cpp RTPReceptionStats::noteIncomingPacketRTPReceptionStats::noteIncomingSR

背后的想法非常简单,需要注意的一件事是 经过计算,当前时间戳被设置为同步时间戳,并且也可以被 RTCP SR 报告覆盖(而且它应该)。

因此,RTSP 会话中任何流的呈现时间戳应该或多或少具有相同的时间。