UDP 流到 webRTC
UDP stream into webRTC
我刚开始学习web/network编程(因此不确定哪些信息是相关的),但我的目标是将计算机 X 获取的流视频播放到计算机 Y 上托管的网页上,尽可能接近尽可能实时。我目前有一个笨拙的解决方案,它几乎可以满足我的需求,即通过 UDP 套接字将计算机 X 上获取的视频发送到计算机 Y。然后将此数据(通过 ffmpeg)发送到使用 v4l2loopback 创建的 'fake webcam',然后使用 getUserMedia() 读取该数据。这样做我有一个滞后不到 2 秒的断断续续的视频。
我的问题,简单地说,是否可以直接在 webRTC 框架中读取 UDP 流(以某种方式,如果是的话如何),而不是笨拙地通过网络摄像头。
你不能用 WebRTC 直接 这样做,因为它不公开原始套接字,但你的选择是:
将其转换为 HLS 直播流
- 通过
nginx-hls-rtmp
在您的服务器上将 UDP 流(我假设是 RTMP?什么是 ffmpeg 输出?)转换为 HLS 流。
- 使用hls.js播放所述视频。
将其转换为 DataChannel 并通过 SCTP 发送
- 例如设置媒体流 WebRTC 服务器wrtc
- 通过 WebRTC 连接到网络客户端(例如 simple peer 可以提供帮助)。
- 设置一个通过 SCTP 工作的 DataChannel(在 Chrome Safari 和 Firefox 中使用 libsctp over udp 实现)。
- 在数据通道上发送数据并在那里解码。
通过 WebRTC 从 X 直接连接到 Y
- 您还可以设置 WebRTC 服务器并将 ffmpeg 连接到该服务器
- 在 WebRTC 'server' 端和客户端之间打开媒体通道。
- 流式传输视频。
在这些选项中 - 第一个是 到目前为止 最简单的。缺点是它不太适合低延迟流媒体+有一些开销。
我建议您从它开始,然后逐步提高。
在 Windows 你可以使用 AVObjects directshow 过滤器
它支持 UDP 到 webrtc。
它还支持眩晕服务器
如果您使用 WebRTC 库,这是可能的。 libdatachannel(我是原作者)如果编解码器是H264或VP8,将允许您打开与视频轨道的WebRTC对等连接并直接在轨道中发送RTP数据包。
我刚开始学习web/network编程(因此不确定哪些信息是相关的),但我的目标是将计算机 X 获取的流视频播放到计算机 Y 上托管的网页上,尽可能接近尽可能实时。我目前有一个笨拙的解决方案,它几乎可以满足我的需求,即通过 UDP 套接字将计算机 X 上获取的视频发送到计算机 Y。然后将此数据(通过 ffmpeg)发送到使用 v4l2loopback 创建的 'fake webcam',然后使用 getUserMedia() 读取该数据。这样做我有一个滞后不到 2 秒的断断续续的视频。
我的问题,简单地说,是否可以直接在 webRTC 框架中读取 UDP 流(以某种方式,如果是的话如何),而不是笨拙地通过网络摄像头。
你不能用 WebRTC 直接 这样做,因为它不公开原始套接字,但你的选择是:
将其转换为 HLS 直播流
- 通过
nginx-hls-rtmp
在您的服务器上将 UDP 流(我假设是 RTMP?什么是 ffmpeg 输出?)转换为 HLS 流。 - 使用hls.js播放所述视频。
将其转换为 DataChannel 并通过 SCTP 发送
- 例如设置媒体流 WebRTC 服务器wrtc
- 通过 WebRTC 连接到网络客户端(例如 simple peer 可以提供帮助)。
- 设置一个通过 SCTP 工作的 DataChannel(在 Chrome Safari 和 Firefox 中使用 libsctp over udp 实现)。
- 在数据通道上发送数据并在那里解码。
通过 WebRTC 从 X 直接连接到 Y
- 您还可以设置 WebRTC 服务器并将 ffmpeg 连接到该服务器
- 在 WebRTC 'server' 端和客户端之间打开媒体通道。
- 流式传输视频。
在这些选项中 - 第一个是 到目前为止 最简单的。缺点是它不太适合低延迟流媒体+有一些开销。
我建议您从它开始,然后逐步提高。
在 Windows 你可以使用 AVObjects directshow 过滤器 它支持 UDP 到 webrtc。 它还支持眩晕服务器
如果您使用 WebRTC 库,这是可能的。 libdatachannel(我是原作者)如果编解码器是H264或VP8,将允许您打开与视频轨道的WebRTC对等连接并直接在轨道中发送RTP数据包。