如何从不同的源同步2个流

时间:2018-06-11 22:56:03

标签: python video udp gstreamer ntp

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

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

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

有一个接受音频流的应用程序。此应用程序执行两项操作(通过扬声器播放音频并将网络延迟信息发送到我的应用程序)。我没有权利使用它们传输音频的方法。

我的应用程序显示视频和另外两项任务(我还没有弄明白该怎么做)。 - 我需要能够确定视频流上的网络延迟(理想情况下,从视频计算机上获取与该系统时钟相关的视频流的时间戳会很棒,因此我可以将该时间戳与我自己的时间戳进行比较系统时钟)。 - 我还需要延迟视频显示以使其与音频同步。

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

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

感谢任何帮助。我试图在这个设计中找到别人已经离开的地方,所以我不容易想出这个并继续前进。也在Python中完成...这进一步限制了我能够找到的信息。谢谢。

斯科特

1 个答案:

答案 0 :(得分:0)

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

通过这种方式你知道没有多长时间才能找到你,与视频帧匹配的正确音频是20001999(例如)从开始的毫秒是音频,它的时间戳也是20001999毫秒一开始。

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

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