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

2023-11-26

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

我想通过 Wi-Fi 来完成此操作,但 Wi-Fi 有点不可靠。

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

EDIT 1

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

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


(当我偶然发现这个问题时,我自己正在寻找一个可以执行此操作的应用程序,希望我不必自己编写一个应用程序。)

overview

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

请注意,可能还有其他因素,例如操作系统/驱动程序/声卡延迟,这些因素可能必须考虑到时间同步协议中。如果您不太敏锐,同步协议可能就像一台计算机每秒发出蜂鸣声一样简单,再加上您按节拍的另一台计算机上的按键。这样做的优点是可以解决操作系统/驱动程序/声卡层的任何其他延迟来源,但缺点是如果时钟不同步,则需要手动干预。


混合手动网络同步

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

  1. 通过手动节拍式干预使机器同步
  2. 使用网络时钟同步协议同步机器
  3. 对于合唱团中的每台机器,取不同之处两个同步的;这是每台机器的操作系统/驱动程序/声卡延迟,它们各自跟踪

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


模仿自然的萤火虫同步

如果您在安静的房间中执行此操作并且所有机器都有麦克风,您甚至不需要手动干预(#1),因为您可以让它们全部遵循“萤火虫式”同步算法。自然界中许多种类的萤火虫都会同时眨眼。http://tinkerlog.com/2007/05/11/synchronizing-fireflies/描述了这些萤火虫使用的算法:“如果一只萤火虫接收到邻居萤火虫的闪光,它会稍微提前闪烁。”闪烁对应于嘟嘟声或嗡嗡声(通过声卡,而不是主板压电蜂鸣器!),看到对应于通过麦克风收听。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过不可靠的网络同步媒体播放? 的相关文章

  • 具有相同容器端口的多个 docker 容器连接到同一网络

    我有一个依赖于多个 Docker 容器的应用程序 我使用 docker compose 以便所有这些都位于同一网络中以进行容器间通信 但是 我的两个容器正在各自容器内侦听相同的端口 8080 但是映射到主机上的不同端口 8072 8073
  • 扭曲多种协议

    我希望为我正在从事的项目学习扭曲 该项目需要服务器响应 HTTP 请求以及通过 TCP 连接的其他协议 Twisted能够同时处理多种协议吗 我想使用 Twisted Web 来帮助处理 HTTP 但同时需要响应其他端口上的 TCP 连接
  • 互联网 RFC 数据包图中预期的位(不是字节)顺序是哪个

    我正在我的家庭有线网络上解析 ICMPv6 数据报 但在特定 RFC 中找不到对位排序约定的明确提及 多字节字段是网络顺序的 但是字节内的位又如何呢 机器是按字节寻址的 但网络硬件对位进行序列化 在图表中 8 位字段 左侧 的一位最终位于无
  • 本地 Postgres 实例和 Azure Cloud Postgres 实例之间的实时同步

    我需要在本地 postgresql 实例与云 postgresql 实例之间设置实时同步过程 请让我知道我可以通过哪些选项来实现它 我是否必须使用任何特定工具或者可以通过复制进行管理 请指教 使用 PgPool http www pgpoo
  • 防止 WNetAddConnection2 类允许被禁止的用户访问共享文件夹

    我开发了 C windows 应用程序 操作系统是Windows 7 要求 是使用带有凭据的代码访问网络共享文件夹 Test WNetAddConnection2 class 限制 是某些用户可以访问此共享文件夹 测试 但对于其他用户 设置
  • 如何使用Python多处理创建同步对象?

    我无法弄清楚如何创建同步的 Python 对象 我有一个名为 Observation 的类和一个名为 Variable 的类 基本上看起来像这样 代码被简化以显示本质 class Observation def init self date
  • 如何替换`qemu-system -redir`命令参数?

    我有一个使用以下选项启动 qemu 的脚本 qemu system x86 64 net nic model rtl8139 net user hostfwd tcp 5555 1522 net dump file tmp vm0 pcap
  • 无法解析“...”的依赖关系:无法解析项目:react-native-navigation

    问题描述 仔细按照中的说明进行操作后https wix github io react native navigation docs Installing https wix github io react native navigatio
  • 我可以关闭并重新打开套接字吗?

    我学习了一个使用套接字的例子 在此示例中 客户端向服务器发送请求以打开套接字 然后服务器 侦听特定端口 打开套接字 一切都很好 套接字从双方 客户端和服务器 打开 但我仍然不清楚这个东西有多灵活 例如 客户端是否可以关闭一个打开的 从两端
  • Monitor.TryEnter(object) 和 Monitor.TryEnter(object, ref bool) 之间存在什么重要区别?

    这些代码片段的行为似乎应该相同 1 Monitor TryEnter 对象 if Monitor TryEnter lockObject try DoSomething finally Monitor Exit lockObject 2 M
  • 同步不同数据库的2个表-MySQL

    我在数据库表中有一个包含某些医疗信息的表 我每天抓取并解析它们并将其存储在本地数据库的表中 假设最初有 1500 条记录 今天我的本地计算机上又添加了 100 条记录 现在 我有一个服务器 我需要在其中推送这些记录 因此数据库是不同的 我昨
  • 您使用什么来通过其自定义协议来测试(功能/负载/压力)您的网络服务?

    我最近创建了一个回合制游戏服务器 可以接受数十万个并发客户端连接 长话短说 Linux 上的 epoll 通信基于简单 定制 基于线路的协议 该服务器允许客户端连接 寻找游戏比赛中的其他玩家 玩所述游戏 发送动作 聊天消息等 并在游戏结束时
  • 需要同步仅增量计数器吗?

    我使用整数作为计数器 该整数只会增加 并且肯定有多个线程会同时增加它 当没有其他线程尝试访问其值时 在程序执行结束时读取该计数器的值 我假设我不必为这种仅增量计数器使用锁或任何类型的同步 这是正确的吗 如果这有什么区别的话 我用 Java
  • 网络:传输层和网络层之间的区别

    在互联网模型中有四层 链路 gt 网络 gt 传输 gt 应用 我真的不知道网络层和传输层之间的区别 正如我读到的 Transport layer include congestion control flow control reliab
  • 将 CIDR 地址转换为子网掩码和网络地址

    给定一个 CIDR 地址 例如192 168 10 0 24 如何确定掩模长度 24 如何确定掩码地址 255 255 255 0 如何确定网络地址 192 168 10 0 它被 apache utils 覆盖 看这个网址 http co
  • 最近的文件列表存储在哪里?

    我想在多台计算机之间同步某些 Sublime Tex2 设置 我不想同步的一件事是最近的文件列表 Sublime Text 2 在本地文件系统的哪个位置存储最近打开的文件列表 在 Mac OS X 上 此列表存储在名为Session sub
  • 同步访问 Immutable Integer 对象

    代码片段 1 class RequestObject implements Runnable private static Integer nRequests 0 Override public void run synchronized
  • docker 主机 (OSX) 上的关闭端口在内部 docker 网络上保持/报告打开状态

    在 OSX 12 3 上将 Docker 升级到 4 6 0 后 当我停止 PHPStorm 中的 xdebug 监听客户端时 我遇到了一些奇怪的问题 似乎后续请求总是超时 因为 docker 报告 host docker internal
  • 支持 Kubernetes NodePort 服务的 SSL/TLS

    问题 我需要通过 https 向外部公开 Kubernetes NodePort 服务 设置 我已经在裸机上部署了 Kubernetes 并且已经部署Polyaxon https github com polyaxon polyaxon通过
  • 如何确定非阻塞套接字是否真正连接?

    这个问题不仅限于Python 这是一个一般的套接字问题 我有一个非阻塞套接字 想要连接到一台可访问的机器 在另一端 该端口不存在 为什么 select 仍然成功 我预计会超时 sock send 因管道损坏而失败 select 之后如何确定

随机推荐

  • 是否可以通过 ctypes 通过引用传递 python 字符串?

    抱歉 但我通常很难阅读当前的 ctypes 文档 如果我有一个 C 函数需要const char 指针 而我know它既不会修改传入的字符串 也不会在函数调用之外保留对它的引用 直接将指针传递给 python 字符串的字节确实很有意义 ct
  • 在 PHP 中格式化日期字符串

    如果我有一个代表日期的字符串 例如 2011 07 01 即 2011 年 7 月 1 日 我将如何以更易读的形式输出它 例如 1 July 2011 1 Jul 2011 month as three letters 另外 我怎样才能让它
  • 动画平滑的 CSS 网格列变化

    我正在使用 CSS 网格布局来定位网站上的各个部分 我用grid column x x and grid row x x 设置它们在页面上的位置和大小 它运作得非常好 现在我正在尝试制作两个网格列修复之间的平滑过渡动画 这是在屏幕尺寸发生变
  • 启动 Android Studio 时出错

    我在启动 android studio 时遇到这些错误 请任何人能为我提供解决方案 gt java lang RuntimeException gt com intellij ide plugins PluginManager Startu
  • 编译 helloworld.cu 时遇到问题

    在 Ubuntu 10 10 中编译这个 hello world 示例时 这是来自CUDA 示例 第 3 章 未提供编译说明 gt include
  • Flutter:刷新网络图像

    我是颤振的初学者 我正在寻找一种简单的方法来刷新网络图像 在这样的基本代码中 让 flutter 再次获取并绘制该图像的最简单方法是什么 在我的代码中 图像是来自安全摄像头的快照 因此每次获取时都会发生变化 但始终具有相同的 url 每次启
  • 如何从 Startup.cs 中的 XML 文件中提取配置设置

    我有一个startup cs 文件 我想从XML 文件中提取配置而不是appsetings json文件 ASP NET Core MVC 可以吗 如果您想使用appsettings xml相反 你可以参考我的博客文章here 引用文章中的
  • C++中字符串前面的“L”是什么意思?

    this gt textBox1 gt Name L textBox1 虽然它似乎可以在没有L 前缀的目的是什么 它的使用方式对于铁杆 C 程序员来说甚至没有意义 It s a wchar t文字 用于扩展字符集 维基百科有关于这个主题的一
  • 在 Pandas 中查找多列中的字符串

    我正在尝试查找多个列中是否存在字符串 如果字符串存在 我想返回 1 如果它不作为数据帧中的新系列 则返回 0 在搜索论坛后 我了解到可以使用 str contains 但我正在搜索 100 多个列 因此一次处理单个系列对我来说效率不高 如果
  • C++ 诡异的构造函数 [重复]

    这个问题在这里已经有答案了 可能的重复 为什么使用空括号调用不带参数的构造函数会出错 让我们有这个代码 class Foo Foo int 然后我们得到结果 int main Foo f1 Foo 5 1 OK explicit call
  • ASP .NET MVC 在每个字段级别禁用客户端验证

    我正在使用带有数据注释和 jQuery 验证插件的 ASP NET MVC 3 有没有办法标记某个字段 或某个数据注释 只能在服务器端进行验证 我有一个带有屏蔽插件的电话号码字段 正则表达式验证器在用户端变得疯狂 正则表达式只是一个自动防故
  • 无法让Python从不同的文件夹导入

    我似乎无法让 Python 在子文件夹中导入模块 当我尝试从导入的模块创建该类的实例时出现错误 但导入本身成功 这是我的目录结构 Server server py Models user py 这是server py的内容 from sys
  • 如何使用套接字通过互联网发送数据?

    我想通过桌面应用程序通过互联网发送数据 我对套接字了解一点 我已经在局域网内传输数据 但现在我想通过互联网传输数据 传输大量和少量数据的最佳方式是什么 我的系统已连接到可以访问互联网的服务器 我的系统的 IP 地址是动态的 我不知道如何将数
  • 计算数据帧组内的差异

    假设我有一个包含 3 列的数据框 日期 股票行情 值 没有索引 至少在开始时是这样 我有很多日期和股票行情 但每个 ticker date 元组是唯一的 但显然 相同的日期将显示在许多行中 因为它会出现在多个代码中 并且相同的代码会出现在多
  • 是否存在使用数据库 1:1 关系有意义的时候?

    前几天我在思考规范化 我突然想到 我想不出数据库中应该存在 1 1 关系的时候 Name SSN 我会把它们放在同一张桌子上 PersonID AddressID 再说一遍 同一张桌子 我可以想出无数个 1 多或多 多 带有适当的中间表 的
  • Perl 正则表达式中的转义特殊字符

    我正在尝试匹配 Perl 中的正则表达式 我的代码如下所示 my source Hello version Goodbye version my pattern Hello version if source m pattern print
  • 如何在 Android Javadoc 中引用 XML 文件? [复制]

    这个问题在这里已经有答案了 有没有办法使用 JavaDoc 链接来引用 Android XML 文件res folder 就像是 link res values custom strings xml link com yourApp R l
  • 如何备份SQL Server代理作业?

    如何备份和恢复 SQL Server 2005 代理作业计划 msdb 数据库是所有作业所在的地方 它是系统数据库之一
  • add2virtualenv(virtualenv 包装器)不适用于 scipy

    我想创建一个没有全局 python 包的 virtualenv 但具有共享的 scipy 发行版 安装 scipy 需要相当长的时间 我不想太频繁地走过场 所以我跑add2virtualenv Library Python 2 7 site
  • 如何通过不可靠的网络同步媒体播放?

    我希望我可以在一台计算机上播放音乐或视频 并让第二台计算机同步播放相同的媒体 例如 我可以同时听到两台计算机的扬声器的声音 这听起来并不好笑 我想通过 Wi Fi 来完成此操作 但 Wi Fi 有点不可靠 从算法上来说 解决这个问题的最佳方