Answers:
我使用多播。这同时将一个流发送到所有接收器。
网络具有有线和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,以免产生“意外”。但是,如果您具有多路由器网络,并且一个网络上的主机看不到多播,则可能需要将其设置为一两个缺口(或检查您的路由器是否确实允许多播通过,并非所有无线路由器都是设置为默认值)。
在每个系统上,包括生成流并运行非输出vlc的系统,我都有以下vlc:
vlc udp://@239.0.0.1 --network-caching 60 --sout-keep
这会将网络缓存设置在我的网络中,并使最慢的系统的性能达到最高。有价值.06秒的缓存。
对于声音,这对应于大约100英尺的传播距离,这意味着如果最大程度地占用了缓存,则缓慢的系统将发出声音,好像它在100英尺外。
我的网络延迟是.5ms或更好(不是ping,这是低优先级的堆栈往返,只有几毫秒)。
在我所在的地方,我从来不会同时看到或听到两个相距100英尺以上的系统(我不爆炸楼上和地下室,这样做的好处是在不爆炸客厅放大器的情况下,到处都有相同的系统)。
卧室里的笔记本电脑:如果笔记本电脑经常停工,我只能将其本地缓存打开,在地下室或楼上不会听到它的声音,当我在那里时,我可能会关闭其他笔记本电脑:-)。
非常重要:每当我需要转码时,所有接收器都使用相同的协议和编码,并且我会在生成流的非输出vlc上进行转码。
我不在多播客户端上进行代码转换。由于每个系统的性能都不同,因此会导致严重的延迟。
对于此音频示例,根本没有代码转换,所有人都可以理解shoutcast起源的编码。(实际上,我也不需要为vid进行转码...全部都有完整的编解码器集)。
这有帮助吗?
是的,网上有一些使用--network-synchronization主/客户端和多个单播流(服务器上10英里长的目标字符串:-D)进行同步vlc的示例。
但是,将单播流传输到段上的n个客户端会使该流在该段上出现n次,并且您向原始服务器访问的级别越高,同一流的乘法消耗的带宽就越多。我将无法观看我的1080p视频。我的无线设备几乎无法处理其中之一,并非总是(56Mb)。
哦,您问如何在GUI中:
在流媒体窗口中,单击“更多选项”,然后为生成流的vlc实例取消选择“本地播放”(输入时是本地文件,播放列表或Internet流)。将缓存保留为默认值(价值1000ms的缓存)。如果任何其他客户端无法理解您的编解码器,请决定一个都可以理解并转码到同一系统上的客户端。
在目标的选项上,您保留默认的“本地显示”,并更改缓存:进行此操作(从100开始然后将其调低),直到最慢的系统切出为止,然后将所有较快的系统设置为相同。缓冲时间短:当客户启动时,大约需要10到15秒的溅射时间,直到它“得到”为止。
我的客户有100%的时间在工作,每当我停止流式传输时,他们只会继续收听多播地址。
没有提供端口:到处默认为1234,我运行一台原始服务器。如果运行多个端口,则需要提供如下端口号:... 239.0.0.1:65535。我的示例数字:选择239/8中的任何多播地址。端口:选择高于1024的端口(是的,选择1024,因为Microsoft在MC上也使用1024)。
如果没有人在监听,则流根本不会出现在网络上,只有在第一个监听器加入多播会话后,流才开始。因此,如果您定义了十个并且仅侦听一个,那么您就有一个流吞噬带宽。如果您收听不同的流,那么您获得的带宽是n个流的n倍。
组播:每个流使用一个或10000个客户端使用的带宽相同。
使用单播:每个客户端在不同的时间跳到发件人的流,这意味着即使您加紧了缓存,您的延迟仍然存在。单播和多播工作完全不同。这就是为什么单播具有同步功能。
如果以相同的方式流播整个目标商店,则存在另一种方式:然后,您将以同步方式将单播流传输到卫星vlc客户端,并从那里为“声音范围”内的客户端提供服务。在办公室中,我每层执行一两个操作,因此使用单播和网络同步将所有层紧密同步。通常在地板内,网络传播延迟比声学延迟要短得多,并且声学被调低,因此您不会听到所有扬声器,而只会听到附近的扬声器。
如果您需要帮助,请通过sirhelpsalot@gmail.com给我发送电子邮件,我也可能会在youtube上发给我。
:-)
正如spc-stm所说,VLC让您同步流。检查此:http : //www.hackedexistence.com/project-vlc.html