如何使用 WebRTC 将视频流式传输到 RTMP?

How to use WebRTC to stream video to RTMP?

我正在尝试构建一项服务,将您的屏幕从浏览器流式传输到客户端(类似于 twitch)。

我所完成的是我用 rtmp 构建了一个工作的 nginx 服务器,我使用 OBS 测试了它。效果很好。

我的问题是如何使用 WebRTC 将屏幕从浏览器(不是来自 OBS 或其他广播公司)流式传输到带有 RTMP 的 nginx 服务器?

对于 RTSP<->WebRTC / RTMP<->WebRTC 转换, 您需要 运行 某种 WebRTC 网关/媒体服务器软件,可以与所有这些一起工作 formats/protocols 并且可以在它们之间进行传输。 试试 Wowza / Unreal Media Server / Flashphoner。 https://en.wikipedia.org/wiki/Comparison_of_streaming_media_systems

因此,在您的情况下,您希望通过 WebRTC(必须使用 H264 编解码器)将屏幕从浏览器发布到媒体服务器,然后使用 nginx-rtmp 模块将 RTMP 流从媒体服务器拉到 nginx 服务器。

请注意,反之亦然:您可以通过 RTMP 将流推送到媒体服务器(例如,OBS 屏幕捕获),然后通过 WebRTC 将该流从媒体服务器发送到 Web 浏览器。

这些转换的主要问题是编解码器兼容性:视频必须使用 H264,但如果您需要音频,则必须将 Opus 转码为 AAC。

SRS(Simple Realtime Server) 也可以将 WebRTC 转换为 RTMP,反之亦然。

WebRTC to RTMP用于H5发布商直播。因为现在(2021 年 12 月)RTMP 已禁用,所以通过 H5 发布流的唯一方法是 WebRTC。我们还需要将 WebRTC 转换为 RTMP,这使我们能够通过其他平台重用流。

并且SRS还支持RTMP to WebRTC,即低延迟直播。一般RTMP是3~5s左右的延迟,而RTMP to WebRTC0.8~1s左右的延迟。注意H5不支持RTMP,但是HTTP-FLV效果不错

除此之外,SRS还支持HTTP-FLV,可以让H5播放RTMP,flv.js。延迟也低于 HLS 或 LLHLS。

Note: Other live streaming features are also important, because of off-topic, so please check the wiki of SRS, like DVR-MP4, DASH, Cluster, HTTP-API, etc.

也可以用nginx从SRS拉RTMP流,或者让SRS把RTMP转发给nginx,在SRS隐蔽WebRTC转RTMP流后