将 nginx rtmp 片段发送到 WebRTC

Posted

技术标签:

【中文标题】将 nginx rtmp 片段发送到 WebRTC【英文标题】:send nginx rtmp fragments to WebRTC 【发布时间】:2021-02-13 08:20:26 【问题描述】:

我想使用OBS通过RTMP流式传输到nginx服务器,然后将RTMP片段本地发送到WebRTC,以便它们可以通过MediaStream传输到客户端。我认为这是可能的,因为它基本上被描述为here。我这样做是因为 HLS 的多秒延迟不适合我正在尝试做的事情。

我在从 nginx 中提取 RTMP 片段时遇到问题,我在documentation 中找到的唯一可行的命令是pull rtmp://...。当我尝试这个时,我没有看到任何文件出现在我的根文件夹中,如果我使用hls on,我通常会在其中找到 HLS 文件。有谁知道如何完成我上面想要实现的目标?

谢谢!

【问题讨论】:

【参考方案1】:

这很容易实现!您可以基于 Pion 的 rtp-to-webrtc 示例。这使您可以轻松地将媒体从 ffmpeg 获取到浏览器中。

您运行的 ffmpeg 命令将类似于 ffmpeg -re -i rtmp://localhost:1935/$app/$name -vn -acodec libopus -f rtp rtp://localhost:6000 -vcodec copy -an -f rtp rtp:localhost:5000 -sdp_file video.sdp

我会考虑转码为 VP8,因为并非所有浏览器都支持 H264。

——

如果您想在浏览器中进行亚秒级播放,我会查看 Project Lightspeed,这是您今天 IMO 的最佳选择。

【讨论】:

非常感谢您的帮助!我也想知道:1)为什么有必要将 tcp/rtmp 转换为 udp/rtp 流?有没有办法直接从 Go 中监听 tcp/rtmp 端口? 2)我们必须使用Go来做端口监听吗? Others 似乎表明仅使用 javascript 无法轻松侦听 UDP/TCP 端口。 1) 你完全可以做到!我没有在内存中 RTMP -> WebRTC 的现成示例,但它可以很容易地完成。如果您确实构建,请分享我相信其他人会发现它有帮助 2.) 是的,您完全可以使用 nodejs!我认为你最好的选择是 wrtc 之后是 werift。不过,您需要在服务器上运行某种“WebRTC 桥”。 @SeanDuBois 似乎 Project Lightspeed 使用了 FTL 协议。有什么方法可以使用 ffmpeg 或 gstreamer 发布到 Lightspeed?谢谢! 你想做什么?如果您可以使用 ffmpeg 或 GS​​treamer RTP -> WebRTC(甚至是 WebRTC 客户端 -> SFU)——FTL 有点深奥,但它是 OBS 支持的唯一亚秒级协议 我正在尝试将使用 RTMP 流式传输的视频(从手机到 NGINX 服务器)发送到使用 RTMP 的浏览器。发布后,我找到了带有 RTMP->WebRTC 的 example-webrtc-applications repo,但我遇到了一个奇怪的问题,你能看看吗? ***.com/questions/68059045/webrtc-video-not-showing。谢谢你:)

以上是关于将 nginx rtmp 片段发送到 WebRTC的主要内容,如果未能解决你的问题,请参考以下文章

从 webrtc 会话中提取视频流并转换为 rtmp

HLS NGINX-RTMP [错误] 1281#0:* 58 hls:强制片段拆分:10.002 秒

如何在 flash/rtmp 中将客户端网络摄像头流式传输到网络服务器

播放 WebRTC 流时 Chrome 崩溃?

在 Ant Media Server 中使用 WebRTC 观看带有 B 帧的 rtmp 流时出现抖动问题

ffmpeg,rtmpdump和nginx rtmp实现录屏,直播和录制