通过网络将数据并行发送给多个收件人



Hello,我正在进行网络编程,很难创建一个逻辑来允许视频从一台服务器流式传输到多个客户端而不延迟

这意味着我必须在流期间实现对所有连接的客户端的并行执行,以便同时显示图像。

为什么这对我的项目如此重要,是因为我打算拥有大量的客户(从200到大约700(,现在有10个客户,延迟只是700个客户可能会将延迟显著增加到几分钟(不确定,但可能(。

对于那些不知道dely的原因的人来说,我使用的是for循环,其中包含每个帧的send函数,这是一个串行执行。

我尝试了线程多处理,甚至函数调度但每件事都变得一团糟,以前我使用的是套接字&opencv,但由于某种原因,它在流媒体播放过程中引发了问题,现在我切换到Netgear&Vidgar但我仍在挣扎。

希望有人能帮忙。

PS:多播不适合这份工作,在我尝试后,由于传输图像的长度,我收到了错误,UDP协议将not接受超过65535字节。

根据您的评论,所有东西都在同一个网络中,我们有多播来解决您的问题。您可以将单个流量流发送到多个接收器,而不是反复向多个主机发送相同的数据。

您将客户端设置为订阅多播组,通常是239.0.0.0/8组织本地作用域中的组。然后,服务器将其流量发送到客户端已订阅的同一多播组。单个业务流将由订阅多播组的每个客户端接收和处理。

因为多播发送到多个客户端,所以必须使用无连接传输协议,例如UDP。面向连接的传输协议,例如TCP,在两个主机之间创建连接,因此它们不能与多播(一对多(一起使用。

默认情况下,多播仅在同一网络中工作。我们确实有多播路由将流量发送到其他网络,但它与通常的单播路由非常不同。此外,您不能在公共互联网上进行多播,因为ISP没有多播路由。您可以使用支持多播的隧道(例如GRE(在互联网上多播到不同的站点。源路由器和目标路由器都需要配置为多播路由,以及多播数据包路径中的任何路由器(上的Internet路由器看到的是单播隧道数据包,而不是多播数据集,因此您可以通过Internet发送多播(。

Hello,我正在进行网络编程,很难创建一个允许视频从单个服务器流式传输到多个客户端的逻辑。

嘿@zaki lazhari我是VidGear视频处理Python项目的创建者。实际上,对于多播任务,NetGear并不是API的正确选择,相反,您应该使用WebGear API。WebGear可以充当功能强大的视频流服务器,将实时视频帧传输到网络上的任何web浏览器。因此,您可以通过以下几行代码轻松设置WebGear服务器:

# import required libraries
import uvicorn
from vidgear.gears.asyncio import WebGear
#various performance tweaks
options={"frame_size_reduction": 40, "frame_jpeg_quality": 80, "frame_jpeg_optimize": True, "frame_jpeg_progressive": False}
#initialize WebGear app  
web=WebGear(source="foo.mp4", logging=True, **options)
#run this app on Uvicorn server at address http://0.0.0.0:8000/
uvicorn.run(web(), host='0.0.0.0', port=8000)
#close app safely
web.shutdown()

因此,同一网络上的每个设备(即使是安装了任何浏览器的智能手机(都可以访问浏览器上的实时帧,而无需任何额外的依赖性可以在此处找到更多代码示例:https://abhitronix.github.io/vidgear/gears/webgear/advanced/

希望有帮助。祝你好运

最新更新