发送nginx rtmp片段到WebRTC

问题描述 投票:0回答:2

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

我在从 nginx 中提取 RTMP 片段时遇到问题,我在 文档 中找到的唯一可行的命令是

pull rtmp://...
。当我尝试这样做时,我没有看到任何文件出现在我的根文件夹中,如果我使用
hls on
,我通常会在根文件夹中找到 HLS 文件。有谁知道如何实现我上面想要实现的目标?

谢谢!

nginx webrtc rtmp obs
2个回答
7
投票

这很容易!您可以基于 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,这是你今天最好的选择。


0
投票

低延迟流确实有更好、更简单的解决方案,无论是隐蔽的 RTMP 到 WebRTC,还是 HTTP-FLV 和 HTTP-TS。

将 RTMP 转换为 WebRTC

最简单的方法是使用RTMP服务器,比如SRS,它也支持WebRTC播放器,它的工作原理是这样的:

OBS/FFmpeg ---RTMP---> SRS ---WebRTC--> Browser(Chrome)

注意:此解决方案允许您进行少量更改,并且还允许您为某些不支持 WebRTC 的设备(例如移动浏览器)提供两种 HLS。

您可以按照 wiki 设置演示,我相信您可以在 1 分钟内完成它,因为它非常简单,没有任何其他依赖项。

首先,通过docker运行SRS服务器:

docker run --rm -it -p 1935:1935 -p 1985:1985 -p 8080:8080 \
    --env CANDIDATE="192.168.1.10" -p 8000:8000/udp \
    ossrs/srs:5 ./objs/srs -c conf/rtmp2rtc.conf

注意:请将

CANDIDATE
设置为您的浏览器可以访问的IP,因为WebRTC信令和媒体使用单独的传输通道。

然后,使用OBS或其他编码器发布一个RTMP流:

docker run --rm -it ossrs/srs:encoder \
  ffmpeg -stream_loop -1 -re -i doc/source.flv \
    -c copy -f flv rtmp://192.168.1.10/live/livestream

请打开H5播放器播放WebRTC流:

请注意,这不是低延迟直播的唯一解决方案,我将在下面描述其他解决方案。

低延迟直播

对于低延迟直播,除了WebRTC,还有另一种解决方案,使用HTTP-FLV或HTTP-TS。协议很简单,延迟大约1~3s,因为用WebRTC做直播有一些问题,请看this post.

请打开H5播放器播放HTTP-FLV流:

还有一些直播的新功能,例如HEVC现在可以在Safari和Chrome 107+上使用,您可以通过以下方式进行HEVC低延迟直播:

OBS/FFmpeg --SRT---> SRS ---HTTP-TS/HLS--> Safari/Chrome/VLC/ffpay

注意:您可以在here

找到HEVC低延迟演示

我觉得WebRTC和直播不是一回事,直播永不消亡,所以即使是RTMP也会在很长一段时间内被使用

直播的新协议不仅是 WebRTC,还有:

  • SRT或RIST:用于发布直播到直播服务器或平台。
  • WebRTC:通过H5网页发布直播。
  • HLS/HTTP-TS/WebRTC:播放直播。

它是这样工作的:

                                  +-------------+
OBS/FFmpeg/Encoder ---RTMP/SRT--> + Live Server +----RTMP/SRT--> Tool
H5/Chrome/Safari  ------WebRTC--> + or Platform +----HLS ---> Viewer
                                  +-------------+----HTTP-TS/WebRTC-->Viewer

对于一些使用场景,比如你想对直播进行转码,或者添加logo,或者通过OBS或者其他工具重新制作,

RTMP/SRT
是最好的协议。

要在几乎所有设备和 CDN 上播放直播流,HLS 是最好的解决方案,您可以使用较小的 gop 获得大约 5 秒的延迟,请参阅此post.

如果想做更实时的直播,可以使用HTTP-TS或者HTTP-FLV,延迟大概1~3s,看这个post

WebRTC 也可以播放直播,使用SFU 将RTMP 转换为WebRTC,例如SRS,例如云游戏,请看这个post

© www.soinside.com 2019 - 2024. All rights reserved.