【问题标题】:How to sync 2 streams from separate sources如何同步来自不同来源的 2 个流
【发布时间】:2021-01-25 15:44:12
【问题描述】:

谁能指出我可以同步实时视频和音频流的正确方向?

我知道这听起来很简单,但这是我的问题:

  • 我们有 2 台计算机通过多个网络(最远可达数百英里)向一台计算机流式传输。
  • 所有三台计算机的系统时钟都使用 NTP 同步
  • 视频计算机收集视频并将 UDP 流式传输到显示计算机
  • 音频计算机收集音频并流式传输到显示计算机

有一个接受音频流的应用程序。这个应用程序做了两件事(通过扬声器播放音频并将网络延迟信息发送到我的应用程序)。我对他们流式传输音频的方法没有特权。

我的应用程序显示视频和其他两个任务(我还没有弄清楚如何去做)。 - 我需要能够确定视频流上的网络延迟(理想情况下,最好在来自视频计算机的视频流上有一个与该系统时钟相关的时间戳,这样我就可以将该时间戳与我自己的时间戳进行比较系统时钟)。 - 我还需要延迟视频显示以使其与音频同步。

我发现的所有内容都假设音频和视频是从同一台计算机流式传输的,或者音频流是由 gstreamer 完成的,因此我可以使用一些同步功能。我对实际的音频流没有特权。我只知道音频延迟到达那里的时间(网络延迟)。

所以间歇性地,我得到一个数字作为音频的网络延迟(例如:250 毫秒)。我需要能够确定我自己的视频网络延迟(我还不知道该怎么做)。然后我需要比较一下,看看音频延迟是否大于视频网络延迟。假设视频是 100 毫秒……那么我需要将视频显示延迟 150 毫秒(我也不知道该怎么做)。

任何帮助表示赞赏。我试图在这个设计中找到其他人留下的地方,所以我很难弄清楚这一点并继续前进。也在 Python 中完成......这进一步限制了我能够找到的信息。谢谢。

斯科特

【问题讨论】:

    标签: python video udp gstreamer ntp


    【解决方案1】:

    同步音频和视频轨道或流的典型方法是为每个帧或数据包设置一个时间戳,该时间戳与流的开始相关。

    这样您就知道,无论到达您需要多长时间,与视频帧相匹配的正确音频(例如,从开始 20001999 毫秒)也是时间戳为 20001999 毫秒的音频开始。

    尝试根据网络延迟的估计同步音频和视频将非常困难,因为延迟不太可能保持不变,尤其是在任何类型的 IP 网络上。

    如果您确实没有可用的时间戳信息,那么您可能需要研究更复杂的方法,例如流元数据中的“标记”,甚至对音频和视频流进行一些智能分析,以同步流本身中的事件.

    【讨论】:

    • 您基本上解释了为什么我很难找到解决此问题的方法。不,我无法访问实际的音频流(让我们简单地将其保留为安全级别问题)。所以,我在音频端添加标记或操作任何东西的能力为零。我只能操纵视频方面。话虽如此,我不需要它是完美的。我只需要确保它在同步的某个窗口内,并且每隔几秒(比如每 5 秒)检查一次该窗口。同样,我根本无法分析音频流
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多