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

Posted

技术标签:

【中文标题】如何使用 WebRTC 将视频流式传输到 RTMP?【英文标题】:How to use WebRTC to stream video to RTMP? 【发布时间】:2019-10-07 20:09:23 【问题描述】:

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

我已经完成的是我用 rtmp 构建了一个工作 nginx 服务器,我使用 OBS 对其进行了测试。效果很好。

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

【问题讨论】:

为什么要RTMP?答案很可能是:你不知道。您改用 WebRTC。 你能告诉我你的意思吗? 【参考方案1】:

对于 RTSPWebRTC / RTMPWebRTC 转换, 您需要运行某种适用于所有这些格式/协议的 WebRTC 网关/媒体服务器软件,并且可以在所有这些格式/协议之间进行传输。 试试 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。

【讨论】:

【参考方案2】:

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

WebRTC to RTMP 用于 H5 发布者进行直播。而且SRS还支持RTMP to WebRTC,也就是低延迟直播。一般情况下,RTMP 的延迟约为 3~5s,RTMP to WebRTC 的延迟约为 0.8~1s。

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

注意:其他直播功能也很重要,因为跑题了,所以请查看 SRS 的 wiki,如 DVR-MP4、DASH、Cluster、HTTP-API 等。

也可以用Nginx从SRS拉RTMP流,或者让SRS把RTMP转发给Nginx,通过SRS将WebRTC隐蔽到RTMP流后。

【讨论】:

以上是关于如何使用 WebRTC 将视频流式传输到 RTMP?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 RTMP 将视频流式传输到 iOS?

使用 Rtmp 将视频流式传输到流媒体服务

使用 RTMP 协议将视频文件流式传输到使用 Python 的 rtmp 服务器

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

如何使用 Gstreamer 通过 RTMP 流式传输?

将音频和视频从 Android 手机流式传输到 RTMP 服务器的最佳方式