是否可以在两台不同的机器上同步播放 VLC?我想让房子不同地方的两台电脑播放同一个视频 - 因此也欢迎任何其他可以解决此问题的建议!
答案1
我使用多播。这会同时向所有接收器发送一个流。
网络有有线和wifi部分。
使用多播,流在每个段上仅使用其带宽的 1 倍
这也意味着所有计算机几乎同时收到相同的数据包,通过我的交换机的传播延迟更少。对于声音和人眼可见的视频(30fps),传播延迟可以忽略不计。
唯一可能发生的情况是,不同的计算机在其网络缓存中工作的位置不同。为了让它们尽可能接近,我关闭了缓存,直到最慢的系统(使用 wifi 的 32 位笔记本电脑)有时开始中断,然后再增加一点缓存。
原因:一旦 vlc 开始占用缓冲区,就需要很长时间才能回到缓冲区的开头,似乎编码并不优先考虑回到“零缓冲区”,而是舒服地留在那里。
我在“服务器”上也使用了两个 vlc 客户端:一个生成流,但不进行本地显示。另一个是显示客户端,它像所有其他系统一样监听流,具有相同的网络缓存设置。
在命令行中:
连接到互联网流的流生成客户端(该客户端具有很大的缓存,因此它不会中断并向我的多播网络传送恒定的流):
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.5ms 或更低(不是 ping,这是一个低优先级堆栈往返和几毫秒)。
在我家,我从来不会同时看到或听到相距 100 英尺以上的两个系统(我不会在楼上和地下室播放声音,这样做的好处是可以在任何地方播放相同的声音,而无需打开客厅的功放)。
卧室里的笔记本电脑:如果它断电太频繁,我只需在本地调高它的缓存,我在地下室或楼上听不到它的声音,当我在那里时,我可能已经关闭了其他的:-)。
非常重要:每当我需要转码时,我都会让所有接收器使用相同的协议和编码,并且我会在生成流的非输出 vlc 上进行转码。
我不在多播客户端上进行转码。这会导致严重的延迟,因为每个系统的性能都不同。
对于这个音频示例,根本没有转码,所有人都可以理解shoutcast起源的编码。(实际上,我也不需要对视频进行转码...所有人都拥有完整的编解码器集)。
这有帮助吗?
是的,网络上有使用 --network-synchronization master/client 和多个单播流(服务器上 10 英里长的目标字符串:-D)执行同步 vlc 的示例。
但是:在一个网段上向 n 个客户端单播流会使该流在该网段上出现 n 次,并且距离源服务器越高,相同流的倍增越多,占用的带宽就越多。我将无法观看 1080p 视频。我的无线网络几乎无法处理其中一个,并非总是如此(56Mb)。
哦,你问如何在 GUI 中:
在流媒体窗口中,单击“更多选项”,然后取消选择生成流的 vlc 实例的“本地播放”(输入本地文件、播放列表或互联网流)。将缓存保留为默认值(1000ms 的缓存)。如果任何其他客户端无法理解您的编解码器,则选择一种所有人都能理解的编解码器,并在同一个系统上将其转码。
在目的地选项中,保留默认的“本地显示”,并更改缓存:尝试一下(从 100 开始,然后调低),直到最慢的系统停止运行,然后将所有较快的系统设置为相同。使用短缓冲区:当客户端启动时,需要大约 10 到 15 秒的断断续续,直到“得到它”。
我的客户端始终处于运行状态,每当我停止流式传输时,他们只是继续监听多播地址。
未指定端口:所有端口的默认端口均为 1234,我运行一个原始服务器。如果您运行多个,则需要指定端口号,如下所示:...239.0.0.1:65535。我的示例数字:选择 239/8 中的任何多播地址。端口:选择 1024 以上的任何端口(是的,1024,因为 Microsoft 在 MC 上也使用 1024)。
如果没有人在监听,那么该流根本不会显示在网络上,只有在第一个监听者加入多播会话后才会启动。因此,如果您定义了十个流,但只监听其中一个,那么您就会有一个流占用带宽。如果您监听不同的流,那么您会得到 n 倍于 n 个流的带宽占用。
多播:每个流一个或 10,000 个客户端使用的带宽相同。
使用单播:每个客户端在不同的时间跳转到发送方的流,这意味着即使您收紧缓存,延迟仍然存在。单播和多播的工作方式完全不同。这就是单播具有同步功能的原因。
如果您将相同的内容流式传输到整个 Target 商店,则可以使用另一种方法:然后,您将同步单播流式传输到卫星 vlc 客户端,并从那里为“声学范围”内的客户端提供服务。在办公室里,我每层楼做一到两个,因此所有楼层都使用单播和网络同步紧密同步。在楼层内,网络传播延迟通常比声学延迟短得多,并且声学被调低,因此您听不到所有扬声器,而只能听到您附近的扬声器。
发邮件给我[电子邮件保护]如果您需要帮助,我也可能会将其放在 youtube 上。
:-)
答案2
VLC 可以通过网络传输输出,也可以在本地播放,因此我建议您使用一台机器通过网络传输输出,但在“目标”选项卡中勾选“本地显示”选项。
这里是对用于流式传输的设置的简要描述。
答案3
VLC 曾经(或者现在确实如此,文档从未更新)有一个名为的模块网络同步但与大多数不常见的 VLC 模块一样,它漏洞百出、文档很少且被忽视。我从来没有让它工作过。
答案4
正如 spc-stm 所说,VLC 可让您同步流媒体。检查一下: http://www.hackedexistence.com/project-vlc.html