gpt4 book ai didi

networking - 如何通过不可靠的网络同步媒体播放?

转载 作者:行者123 更新时间:2023-12-04 15:05:42 24 4
gpt4 key购买 nike

我希望我可以在一台计算机上播放音乐或视频,并让另一台计算机同步播放相同的媒体。例如,我可以同时听到两台计算机的扬声器,这听起来并不好笑。

我想通过 Wi-Fi 执行此操作,这有点不可靠。

从算法上讲,解决这个问题的最佳方法是什么?

编辑 1

两台计算机是否“播放”相同的媒体,或者一台“播放”媒体并将其流式传输到另一台,对我来说并不重要。

我确信这是一个容易解决的问题,因为我曾经看过一个 Wi-Fi 扬声器的演示。那是 5 年多以前的事了,所以我认为今天的技术应该让它变得更容易。

最佳答案

(当我偶然发现这个问题时,我自己正在寻找一个可以做到这一点的应用程序,希望我不必自己写一个。)

概述

您引入了一点缓冲延迟并使用网络时间同步协议(protocol)来对齐流。也就是说,您将流拆分为数据包,并在每个数据包上加上“稍后在时间 T 播放”的时间戳,其中 T 例如 future 50-100 毫秒(如果网络出现故障,则更多)。您将本地网络上的数据包发送(或多播)到合唱中的所有计算机。由于应用程序时钟已同步,所有计算机将同时播放声音。

请注意,可能还有其他因素,例如操作系统/驱动程序/声卡延迟,可能必须考虑到时间同步协议(protocol)中。如果你不是很挑剔,同步协议(protocol)可能就像一台计算机每秒发出哔哔声一样简单——再加上你在节拍中敲击另一台计算机上的一个键。这具有在操作系统/驱动程序/声卡层考虑任何其他滞后源的优点,但具有如果时钟变得不同步则需要手动干预的缺点。

混合手动网络同步

解决其他延迟来源的一种方法,无需持续手动干预,就是将此方法与标准网络时钟同步协议(protocol)相结合;第一次在新机器上运行协议(protocol)时:

  • 通过手动节拍式干预使机器同步
  • 使用网络时钟同步协议(protocol)同步机器
  • 对于合唱中的每台机器,取两次同步的差值;这是每台机器的操作系统/驱动程序/声卡延迟,它们各自跟踪

  • 现在,每当网络主干发生变化时,只需使用网络时钟同步协议(protocol) ( #2) 重新同步,并减去操作系统/驱动程序/声卡延迟,无需手动干预(除非您更改操作系统/驱动程序/声卡)。

    自然模仿 Firebug 同步

    如果你在一个安静的房间里做这个并且所有的机器都有麦克风,你甚至不需要人工干预( #1),因为你可以让它们都遵循“ Firebug 式”的同步算法。自然界中许多种类的 Firebug 都会齐声闪烁。 http://tinkerlog.com/2007/05/11/synchronizing-fireflies/描述了这些 Firebug 使用的算法:“如果 Firebug 收到邻居 Firebug 的闪光,它会稍早闪光。”闪烁对应于哔哔声或蜂鸣声(通过声卡,而不是主板压电蜂鸣器!),看到对应于通过麦克风收听。

    由于声速的原因,在非常大的房间距离上这可能有点尴尬,但我怀疑这会是一个问题(如果是这样,请降低哔哔声的速度)。

    关于networking - 如何通过不可靠的网络同步媒体播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/598778/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com