是否可以在两台不同的机器上同步播放 VLC?我想让房子不同部分的两台电脑播放相同的视频 - 所以也欢迎任何其他可以解决这个问题的建议!
我使用多播。这会同时向所有接收器发送一个流。
网络有有线和 wifi 段。
使用多播,流在每个段上仅使用其带宽的一倍
这也意味着所有计算机几乎同时接收相同的数据包,通过我的交换机的传播延迟更少。对于声音和人类可见视频 (30fps),传播延迟可以忽略不计。
唯一可能发生的事情是不同的计算机在其网络缓存中的不同位置工作。为了让它们尽可能靠近,我拒绝了缓存,直到最慢的系统(wifi 上的 32 位笔记本电脑)有时开始中断,然后再给它一点。
原因:一旦 vlc 开始吃缓冲区,它需要很长时间才能回到缓冲区的开头,似乎编码并没有优先考虑回到“零缓冲区”,但留在那里很舒服。
我也在“服务器”上使用了两个 vlc 客户端:一个生成流并且不在本地显示。另一个是显示客户端,它像所有其他系统一样侦听流,具有相同的网络缓存设置。
在命令行中:
连接到 Internet 流的流生成客户端(这个客户端有一个很大的缓存,因此它不会切断并将恒定流传送到我的多播网络中):
vlc -vvv http://yp.shoutcast.com/sbin/tunein-station.pls?id=154 --sout udp:239.0.0.1 --no-sout-display --sout-keep --ttl 4
(那应该在一行上)
如您所见,给出了 --no-sout-display:生成流输出,但没有本地输出。无论是播放本地文件/DVD 还是网络内容,我都这样做。
如果您在某处有无线路由器,请确保将 --ttl 设置为 >1。我总是将它设置为 4 以免得到“惊喜”。但是,如果您有一个多路由器网络并且一个网络上的主机无法看到多播,那么您可能需要将 ttl 调高一两个档位(或检查您的路由器是否完全允许多播,并非所有无线路由器都默认情况下设置为)。
在每个系统上,包括生成流并运行非输出 vlc 的系统,我有以下 vlc:
vlc udp://@239.0.0.1 --network-caching 60 --sout-keep
这将我的网络中的网络缓存和最慢系统的性能设置为最大。.06 秒的缓存。
对于声音,这对应于大约 100 英尺的传播距离,这意味着如果缓存被吃到最大,那么慢速系统听起来好像是 100 英尺远。
我的网络延迟是 0.5 毫秒或更好(不是 ping,这是一个低优先级的堆栈往返行程和几个毫秒)。
在我的地方,我从来没有同时看到或听到两个相距 >100 英尺的系统(我不会在楼上和地下室炸毁,这样做的好处是在不炸毁客厅放大器的情况下到处都一样)。
卧室里的笔记本电脑:如果它经常断电,我只是在本地打开它的缓存,我在地下室或楼上听不到它,当我在那里时,我可能已经关闭了其他人:-)。
非常重要:每当我需要转码时,我都会让所有接收器使用相同的协议和编码,并且我在生成流的非输出 vlc 上进行转码。
我不在多播客户端上进行转码。由于每个系统的性能不同,这将导致严重的延迟。
对于这个音频示例,根本没有转码,所有人都可以理解源自shoutcast 的编码。(实际上,我也不需要为 vid 转码……所有人都有完整的编解码器集)。
这有帮助吗?
是的,网上有使用 --network-synchronization master/client 和多个单播流(服务器上 10 英里长的目标字符串 :-D )进行同步 vlc 的示例。
但是:向一个段上的 n 个客户端流式传输单播会使该流在该段上出现 n 次,并且您朝向原始服务器的位置越高,同一流的乘法越多,占用带宽。我将无法看到我的 1080p 视频。我的无线设备几乎无法处理其中之一,并非总是如此(56Mb)。
哦,你问如何在GUI中:
在流窗口中单击“更多选项”并取消选择生成流的 vlc 实例的“本地播放”(具有作为输入的本地文件、播放列表或 Internet 流)。将缓存保留为默认值(1000 毫秒的缓存)。如果任何其他客户端无法理解您的编解码器,则决定一个都理解并在同一系统上转码的编解码器。
在目的地的选项上,您将默认的“本地显示”保留为打开状态,并更改缓存:玩这个(从 100 开始,然后将其关闭),直到最慢的系统停止运行,然后将所有较快的系统设置为相同。使用短缓冲区:当客户端启动时,它需要大约 10 到 15 秒的溅射时间,直到它“得到它”。
我的客户端 100% 的时间都在运行,每当我停止流式传输时,他们只会继续监听多播地址。
没有给出端口:到处都是 1234,我运行一个原始服务器。如果您运行多个,那么您需要提供一个像这样的端口号: ...239.0.0.1:65535 。我的示例号码:选择 239/8 中的任何多播地址。端口:选择 1024 以上的任何一个(是的,1024,因为 Microsoft 在 MC 上也使用 1024)。
如果没有人在侦听,则该流根本不会出现在网络上,它只会在第一个侦听器加入多播会话后才开始。因此,如果您定义了 10 个并且只收听了一个,那么您将有一个流占用带宽。如果您收听不同的流,则 n 流消耗的带宽是 n 倍。
多播:每个流的一个或 10000 个客户端使用的带宽相同。
使用单播:每个客户端在不同的时间跳上发送者的流,这意味着即使您收紧缓存,您的延迟仍然存在。单播和多播的工作方式完全不同。这就是单播具有同步功能的原因。
如果您将相同的内容流式传输到整个 Target 商店,则有一种不同的方式:然后您将同步单播流式传输到卫星 vlc 客户端,并为那些在“声学范围”内的客户端提供服务。在办公室里,我每层做一到两层,所以所有楼层都使用单播和网络同步紧密同步。在楼层内,网络传播延迟通常比声学延迟短得多,并且声学被调低,因此您不会听到所有扬声器,而只会听到您附近的扬声器。
如果您需要帮助,请通过 sirhelpsalot@gmail.com 给我发送电子邮件,我也可能会将其放在 youtube 上。
:-)