突破:SRS4支持WebRTC,迎来两位新作者

2022-03-18 17:11:10 浏览数 (1)

SRS4支持了WebRTC播放,John(志宏)大神实现了RTC框架,Bepartofyou(B神)实现了aac转opus,刘连响大神主持定义的协议保持RTMP、HLS、FLV、WebRTC的高度一致性,另外Native Demo正在路上,后续还有更多惊喜。

Scenarios

SRS支持WebRTC后,将获得下面新的应用场景:

  • 低延迟直播:RTMP延迟在3到5秒,WebRTC可以在1秒之内,可以基于云计算部署比较稳定的低延迟直播服务;也可以接入CDN厂商,目前阿里云和腾讯云CDN都支持了WebRTC直播方式。
  • 一对一通话:在一对一通话中,推一路流拉一路流,经过SRS服务器转发的通话质量会更高;若没有服务器转发,直接P2P方式一般效果比较差。目前SRS还未支持WebRTC推流,正在开发中。
  • 直播连麦:可以在一对一通话基础上,在主播端开OBS抓取通话窗口,合流成为RTMP后再直播出去。比较完善的是在服务器上合流,SRS目前还没有计划,可以自行开发。
  • 直播H5播放器:Flash将在2020年左右禁用,目前H5播放直播一般使用MSE技术用flv.js或hls.js或dash.js播放直播流,SRS可以将直播转成WebRTC后可以用WebRTC播放直播流,作为一种补充播放器。
  • 监控播放器:SRS正在合并GB28181的支持的PR,很快将支持GB28181,摄像头可以直接将流推送到SRS,可以用H5播放器播放流,监控摄像头的流就可以在浏览器无插件播放。
  • 组合场景:上述场景还可以组合,比如摄像头可以GB28181推流后直播,或者SRS作为会议中的网关可以让监控摄像头入会,或者结合SRT做跨国的推流和通话,还可以作为控制协议比如控制远程摄像机。

SRS的核心定位是互联网的流媒体服务器,主要支持互联网的场景,包括:

  • 互联网分发:浏览器和CDN支持的方式分发流,比如RTMP、FLV、HLS、WebRTC等方式,浏览器和CDN都支持,可以被互联网用户直接消费,触达庞大的互联网用户群体。
  • 协议转换网关:支持SRT是为了支持广电和直播行业互联网化,支持GB28181是为了监控和智能家居行业互联网化,支持WebRTC是视频会议行业互联网化。

SRS的目标是像Nginx成为标准的Web服务器一样,成为视频的标准服务器。

Demo

废话不多说,点阅读原文,或者按下面的步骤,只需要一个命令就可以:

代码语言:javascript复制
docker run -p 1935:1935 -p 8080:8080 -p 1985:1985     -p 8000:8000/udp --env CANDIDATE=192.168.1.3     registry.cn-hangzhou.aliyuncs.com/ossrs/srs:v4.0.14     objs/srs -c conf/rtc.conf

Note: 请将上面的IP换成你的IP。WebRTC是在SDP中交换的服务器地址,SRS在docker中运行时自动获取的是docker的内网ip,在浏览器中无法访问这个IP,所以需要将服务器的IP配置给docker。

这样支持RTMP和RTC的SRS就跑起来了。可以使用FFMPEG或OBS推流:

代码语言:javascript复制
ffmpeg -re -i doc/source.200kbps.768x320.flv -c copy     -f flv -y rtmp://192.168.1.3/live/livestream

可以播放RTMP或WebRTC地址:

  • RTMP流:rtmp://192.168.1.3/live/livestream
  • WebRTC流:webrtc://192.168.1.3/live/livestream

Remark:要使用rtc_player才能播放RTC流,请使用Chrome浏览器打开这个地址:http://ossrs.net/players/rtc_player.html Note: 这个实例只配置了RTMP和RTC流,其他的流可以修改配置文件支持。

效果图如下:

代码已经提交到了develop分支,也可以编译和调试。

Milestones

目前SRS4支持的功能包括:

  • RTMP推流,WebRTC播放,WebRTC推流还在开发中。
  • AAC转成Opus,直播主要是AAC,而WebRTC是Opus。
  • H5播放器rtc_player.html,已经放在了SRS网站上。
  • 支持UDP端口复用,默认UDP/8000端口传输数据。
  • 支持通过ENV设置IP,在docker中比较方便使用。
  • 裁剪的FFMEPG库,静态库链接,后续会支持动态库链接。
  • 使用FFMPEG-AAC编解码(LGPL),没有用GPL的fdkaac。
  • 支持丢弃B帧,避免抖动,后续会支持高级丢帧。

正在计划中和开发中的功能包括:

  • Native播放器,刘连响大神开发完成,正在联调中。
  • 兼容Firefox和Safari等浏览器,目前主要支持Chrome。
  • 支持动态链接FFMPEG的库,遵守LGPL协议。
  • 高级丢弃B帧,根据引用关系丢帧,避免局部花屏。
  • WebRTC上行推流,避免音频转码。
  • 支持切网,移动端可能会变更网络。

未来可能会支持的功能包括:

  • 单PC和SFU,支持拉多路流。
  • 支持直播连麦,MCU服务器合流。
  • 支持Simulcast多流。
  • 支持屏幕分享。

Thanks

特别感谢以下朋友,没有你们SRS就无法支持WebRTC:

  • John,志宏大神,只用了10天左右就在SRS上实现了RTC的框架。另外,SRS用到的ST的库支持ARM的汇编代码,也是John实现的;而且,John也完整调研了用微信libco替代ST的可能性,结果发现ST是最合适的协程库。
  • B.P.Y(Bepartofyou),B神,只用了4天就完成了aac转opus,将FFMPEG代码从84MB裁剪到了8MB左右,只保留了必要的代码;aac转opus意味着直播和RTC的打通,是极其重要的能力。
  • 刘连响大神,定义了WebRTC播放流的协议,让RTC和RTMP、FLV、HLS等协议保持了高度的一致,并且能和阿里云以及腾讯云兼容,可以无缝从开源方案迁移到大规模商用方案。另外连响也在做Native客户端,RTC更强大的可能是在Native上的应用。

特别感谢一下朋友,为SRS支持WebRTC做出了突出的贡献:

  • 大师兄,推荐了B神解决了编解码问题。另外,FFMPEG实现了aac的编解码库,协议是LGPL,一并感谢FFMPEG让SRS有符合开源协议的库可用。
  • 施维大神,在nginx上实现过部分的RTC,也尝试移植这部分代码到SRS,后续拥塞控制算法还需要施维大神才能解决。另外,施维大神也是SRS支持SRT的maintainer,解决了SRS支持跨国等远程弱网传输的难题。

热烈欢迎John和B.P.Y成为SRS maintainer,成为视频行业的造风者,目前SRS已经有5位maintainer,后续将会迎来更大的爆发:

  • Winlin,负责系统框架。
  • Wenjie,负责HDS。
  • Runner365(施维大神),负责SRT。
  • John(志宏大神),负责RTC。
  • B.P.Y(B神),负责RTC编解码。

视频正在异军突起,成为数字经济时代的基础设施之一。SRS的目标是像Nginx成为标准的Web服务器一样,成为视频的标准服务器。SRS将持续努力,不避锋芒,不媚逢迎,不辞风雨,不患得失,不畏将来,不念过往。

0 人点赞