Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript UDP流到webRTC_Javascript_Networking_Udp_Webrtc - Fatal编程技术网

Javascript UDP流到webRTC

Javascript UDP流到webRTC,javascript,networking,udp,webrtc,Javascript,Networking,Udp,Webrtc,我刚刚开始学习网络编程(因此不确定什么信息是相关的),但我的目标是尽可能接近实时地将计算机X获取的流视频播放到计算机Y上托管的网页。我目前有一个笨拙的解决方案,可以满足我的需要,即通过UDP套接字将在计算机X上采集的视频发送到计算机Y。然后(通过ffmpeg)将该数据发送到使用v4l2loopback创建的“假网络摄像头”中,然后使用getUserMedia()读取该摄像头。这样做,我有一个波涛汹涌的视频,滞后不到2秒 简单地说,我的问题是,是否可以在webRTC框架中直接读取UDP流(以某种方

我刚刚开始学习网络编程(因此不确定什么信息是相关的),但我的目标是尽可能接近实时地将计算机X获取的流视频播放到计算机Y上托管的网页。我目前有一个笨拙的解决方案,可以满足我的需要,即通过UDP套接字将在计算机X上采集的视频发送到计算机Y。然后(通过ffmpeg)将该数据发送到使用v4l2loopback创建的“假网络摄像头”中,然后使用getUserMedia()读取该摄像头。这样做,我有一个波涛汹涌的视频,滞后不到2秒

简单地说,我的问题是,是否可以在webRTC框架中直接读取UDP流(以某种方式,如果可以,如何读取),而不是笨拙地通过网络摄像头进行读取。

您不能直接使用webRTC进行读取,因为它不公开原始套接字,但您可以选择:

将其转换为HLS实时流
  • 通过将UDP流(我假设RTMP?什么是ffmpeg输出?)转换为服务器上的HLS流
  • 用于播放所述视频
将其转换为数据通道并通过SCTP发送
  • 例如,设置媒体流WebRTC服务器
  • 通过WebRTC连接到web客户端(例如,可以提供帮助)
  • 设置通过SCTP工作的数据通道(在Chrome Safari和Firefox中通过udp通过libsctp实现)
  • 在数据通道上发送数据并在那里解码
通过WebRTC直接从X连接到Y
  • 您还可以设置WebRTC服务器并将ffmpeg连接到该服务器
  • 打开WebRTC“服务器”对等方和客户端之间的媒体通道
  • 播放视频

在这些选项中,第一个是最简单的。缺点是它不太适合于低延迟流媒体,而且有一些开销


我建议您从它开始,然后逐步升级。

在Windows中,您可以使用AVObjects directshow筛选器 它支持UDP到webrtc。
它还支持stun服务器

如果您使用WebRTC库,这是可能的。(我是原作者)将允许您打开带有视频曲目的WebRTC对等连接,并直接在曲目中发送RTP数据包,前提是编解码器为H264或VP8。

您是否可以控制计算机Y和生成流的软件?如果是,为什么要通过UDP发送额外的路由,而不是首先通过WebRTC从X发送到Y?您好,谢谢您的评论。不幸的是,我在这方面没有真正的控制权。你可以构建一个UDP服务器,它从计算机X接收数据,然后通过WebRTC将数据传输到你想要的对等计算机(在你的例子中是计算机Y)嗨,谢谢,这正是我所需要的。您希望这些解决方案中的每一个都有什么样的延迟。我已经尝试过HLS实时流,但发现它比可能更尴尬的选项慢得多HLS-在数据通道上合理地延迟不少于4-6秒-可能是2-4秒,WebRTC是最快但最复杂的。我将从HLS开始,除非您有交互性要求,因为它最容易通过防火墙和缓存。WebRTC在1对1视频中运行良好。另一个你可以尝试的是LHLS(比如twitch)