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

Python 如何从不同的源同步2个流,python,video,udp,gstreamer,ntp,Python,Video,Udp,Gstreamer,Ntp,有人能给我指出一个正确的方向,在那里我可以同步实时视频和音频流吗 我知道这听起来很简单,但我的问题是: 我们有两台计算机通过多个网络(可能在数百英里之外)流式传输到一台计算机 所有三台计算机都使用NTP同步其系统时钟 视频计算机收集视频并将UDP流传输到显示计算机 音频计算机收集音频并将其传输到显示计算机 有一个应用程序接受音频流。这个应用程序做两件事(通过扬声器播放音频,并将网络延迟信息发送到我的应用程序)。我没有特权的方法,他们流的音频 我的应用程序会显示视频和其他两个任务(我还不知道怎

有人能给我指出一个正确的方向,在那里我可以同步实时视频和音频流吗

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

  • 我们有两台计算机通过多个网络(可能在数百英里之外)流式传输到一台计算机
  • 所有三台计算机都使用NTP同步其系统时钟
  • 视频计算机收集视频并将UDP流传输到显示计算机
  • 音频计算机收集音频并将其传输到显示计算机
有一个应用程序接受音频流。这个应用程序做两件事(通过扬声器播放音频,并将网络延迟信息发送到我的应用程序)。我没有特权的方法,他们流的音频

我的应用程序会显示视频和其他两个任务(我还不知道怎么做)。 -我需要能够确定视频流上的网络延迟(理想情况下,最好在视频计算机的视频流上有一个与该系统时钟相关的时间戳,以便我可以将该时间戳与我自己的系统时钟进行比较)。 -我还需要延迟视频显示,以便与音频同步

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

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

感谢您的帮助。我正试图找出其他人在这个设计中遗漏的地方,所以我很难找到答案并继续前进。同样在Python中完成。。。这进一步限制了我所能找到的信息。谢谢


Scott

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

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

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


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

您基本上解释了为什么我很难找到解决此问题的方法。不,我没有能力访问实际的音频流(让我们简单地把它作为一个安全级别的问题)。所以,我没有能力在音频端添加标记或操纵任何东西。我只能操纵视频端。话虽如此,我并不需要完美。我只需要确保它在同步的特定窗口内,并且每隔几秒钟(比如每5秒钟)检查一次该窗口。同样,我根本无法分析音频流