如何使用 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 协议将视频文件流式传输到使用 Python 的 rtmp 服务器