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

0aydgbwb  于 2023-02-21  发布在  Nginx
关注(0)|答案(2)|浏览(585)

我正在尝试构建一个服务,它可以将你的屏幕从浏览器传输到客户端(类似于twitch)。
我所完成的是我用rtmp构建了一个工作的nginx服务器,我用OBS测试了它。
我的问题是如何使用WebRTC将屏幕从浏览器(而不是OBS或其他广播公司)流到带有RTMP的nginx服务器?

unhi4e5o

unhi4e5o1#

对于RTSP<->WebRTC / RTMP<->WebRTC转换,您需要运行某种WebRTC网关/媒体服务器软件,该软件可以处理所有这些格式/协议,并可以在所有这些格式/协议之间进行多路传输。
因此,在您的情况下,您希望通过WebRTC(H264编解码器是必须的)将屏幕从浏览器发布到媒体服务器,然后使用nginx-rtmp模块将RTMP流从媒体服务器拉到nginx服务器。
请注意,相反的情况也是可能的:您可以通过RTMP将流推送到媒体服务器(例如,OBS屏幕捕获),然后通过WebRTC将此流从媒体服务器发送到Web浏览器。
这些转换中的主要问题是编解码器兼容性:H264必须用于视频,但如果你需要音频,那么你将不得不做Opus到AAC转码。

ubbxdtey

ubbxdtey2#

SRS(Simple Realtime Server)还能够将WebRTC转换为RTMP,反之亦然。
WebRTC to RTMP用于H5发布器进行流媒体直播。由于RTMP现在已禁用(2021.12),因此H5发布流媒体的唯一方式是WebRTC。我们还需要将WebRTC转换为RTMP,以便其他平台重用流媒体。
它是这样工作的:

Chrome --WebRTC---> SRS ---RTMP--> YouTube, VLC, etc.
       H.264+OPUS       H.264+AAC

注:SRS将WebRTC/OPUS转换为RTMP/AAC,因此每个流消耗约2%的CPU。
请按照此wiki将WebRTC转换为RTMP,RTMP在localhost上运行。如果您需要在互联网上的网页,您需要设置HTTPS,因为WebRTC需要localhost或HTTPS网页来访问相机,请参见此wiki。
并且SRS还支持RTMP to WebRTC,这是一种低延迟的直播,一般RTMP的延迟在3~5s左右,而RTMP to WebRTC的延迟在0.8~1s左右,注意H5不支持RTMP,但是HTTP-FLV的效果很好。
此外,SRS还支持HTTP-FLV,使H5能够以mpegts.js的速度播放RTMP,延时也低于HLS或LLHLS。
注:其他直播功能也很重要,因为离题,所以请查看SRS的wiki,如DVR-MP4,DASH,Cluster,HTTP-API等。
在SRS将WebRTC转换为RTMP流之后,也可以使用nginx从SRS拉取RTMP流,或者让SRS将RTMP转发到nginx。
请不要使用WebRTC做直播,除非你知道你在做什么,请阅读Why and Why NOT use WebRTC for live streaming

相关问题