经过七年的酝酿和开发,SRS在6.0中终于正式支持了HEVC(),几乎全面支持,包括RTMP、FLV、SRT、TS、HLS、DASH、GB28181、WebRTC(Safari)、DVRFLV、DVRMP4、WordPressSrsPlayer等等。

在大多数商业公司中,七年,黄花菜都凉了。开源项目只要能做出来,哪怕慢一些,也能活久见。

1、WhyImportant?

比的编码效率更高,不过一个编解码的更新换代,一般是以N个10年为基准的,现在也不能说就能完全替换,还有不少遗留问题。

的收益就不用说了,可以用更少的带宽,传输同样的质量,这就是省钱啊。

此外,8K的朋友必须,大约在9Mbps码率,而得30Mbps而且最高分辨率无法支持8K。

但省钱的前提是不出问题,如果用户的设备支持有问题,那就会引起投诉和体验问题,反而造成更大的成本。

当然了可以将转码一个的流出来,给那些只支持的设备用,不过这样一样会引入转码成本了。

而正有这一堆的问题,所以如果你想要选择,一定要想好了,看看你的场景下收益是否能超过要付出的成本。

2、

下面是各种场景下,的支持情况,可以阅读原文,看详细的Commit。

第一部分,推流,推流端基本是支持的,通过打Patch也可以支持:

•原生支持:使用FFmpeg推SRT流,目前支持得最好的方式。

•原生支持:OBS推SRT流,需要有硬件支持。

•原生支持:摄像头推GB28181流,基本上都支持。

•补丁支持:使用FFmpeg推RTMP流,需要打Patch

•配置支持:Safari浏览器推WebRTC流,需要手动点下菜单栏的选项才能开启。

•不支持:Chrome/Firefox推WebRTC流。

•不支持:使用OBS推流RTMP流。

第二部分,FFmpeg/ffplay拉流,支持度是比较完善的:

•原生支持:使用FFmpeg拉HTTP-TS流。

•原生支持:使用FFmpeg拉HLS流。

•原生支持:使用FFmpeg拉MPEG-DASH流。

•原生支持:使用FFmpeg拉SRT流。

•原生支持:使用ffplay播放HTTP-TS流。

•原生支持:使用ffplay播放HLS流。

•原生支持:使用ffplay播放MPEG-DASH流。

•原生支持:使用ffplay播放SRT流。

•补丁支持:使用FFmpeg拉RTMP流。

•补丁支持:使用FFmpeg拉HTTP-FLV流。

•补丁支持:使用ffplay播放RTMP流。

•补丁支持:使用ffplay播放HTTP-FLV流。

第三部分,浏览器H5播放流,MSE支持,但也需要上层播放器库支持:

•原生支持:使用Chrome播放HTTP-TS流,需要硬解支持,SRS使用。

•原生支持:使用Chrome播放HTTP-FLV流,需要硬解支持,SRS使用。

•配置支持:使用Safari拉WebRTC流,需要手动点下菜单栏开启。

•不支持:使用播放HLS流。底层MSE支持,但是负责将HLS转fMP4,也需要支持才行。

•不支持:使用播放DASH流。底层MSE支持,但是负责将DASH转fMP4,也需要支持才行。

•不支持:使用Chrome/Firefox拉WebRTC流。暂时没有看到有支持的可能,Chrome主要是在做AV1方向。

第四部分,VLC播放流,对于TS和MP4封装支持比较好:

•原生支持:VLC播放HTTP-TS流。

•原生支持:VLC播放SRT流。

•原生支持:VLC播放HLS流。

•原生支持:VLC播放MPEG-DASH流。

•不支持:VLC播放RTMP流。暂时没看到支持的可能。

•不支持:VLC播放HTTP-FLV流。暂时没看到支持的可能。

第五部分,辅助功能,关于HEVC的重要的辅助能力:

•原生支持:录制为FLV/MP4文件。FLV是非标准的,MP4是标准的。

•原生支持:解析HEVC元数据,通过HTTPAPI提供。

•原生支持:黑盒测试支持HEVC。

•原生支持:SRS镜像支持补丁的FFmpeg。可以不用自己编译FFmpeg,使用SRS镜像提供的FFmpeg即可。

•原生支持:WordPresspluginSrsPlayer插件支持HEVC。由于云SRS使用的是4.0稳定版本,还需要几年才能切换到6.0。

•不支持:Updatesrs-cloudforHEVC.

•不支持:EdgeserversupportspublishHEVCstreamtoorigin.

•不支持:EdgeserversupprotsplayHEVCstreamfromorigin.

•不支持:HTTPCallbacktakesHEVCmetadata.

•不支持:PrometheusExportersupportsHEVCmetadata.

•不支持:ImprovecoverageforHEVC.

•不支持:SupportsbenchmarkforHEVCbysrs-bench.

至于iOS或AndroidNative,可以用FFmpeg硬解码,早就可以自己支持了。

3、Usage:Live

我们看一个最简单的直播的例子。

首先,编译SRS,注意开启HEVC()支持,+:

gitcheckoutdevelop./configure--h265=onmake

然后,启动SRS服务器,我们启动了SRT、HTTP-FLV和HLS:

envSRS_LISTEN=1935SRS_DAEMON=offSRS_LOG_TANK=console\SRS_SRT_SERVER_ENABLED=onSRS_VHOST_SRT_ENABLED=onSRS_VHOST_SRT_TO_RTMP=on\SRS_HTTP_SERVER_ENABLED=onSRS_VHOST_HTTP_REMUX_ENABLED=on\SRS_VHOST_HTTP_REMUX_MOUNT=[vhost]/[app]/[stream].flvSRS_VHOST_HLS_ENABLED=on\./objs/srs-e

接着,启动FFmpeg推流,我们选择SRT推流,天然兼容HEVC:

ffmpeg-stream_loop-1-re-idoc/\-pes_payload_size0-fmpegts'srt://127.0.0.1:10080?streamid=465的SafariWebRTC部分的使用说明。

WebRTC对于AV1的支持更完善,Safari/Chrome/Firefox也都支持,具体请参考FormacOSdockerrun--rm-itossrs/srs:encoderffmpeg-stream_loop-1-re-idoc/\-acodeccopy-vcodeclibx265-fflvrtmp:///live/livestream#Forlinuxdockerrun--net=host--rm-itossrs/srs:encoderffmpeg-stream_loop-1-re-idoc/\-acodeccopy-vcodeclibx265-fflvrtmp://127.0.0.1/live/livestream

可以详细参考FFmpegTools

6、KnownIssues

目前已知的问题,总结下:

\1.SafariHEVCWebRTC只支持WebRTC,不支持转换其他协议。SRS可以实现,但目前使用的场景比较少,有需要会在未来完善。

\2.Chrome/FirefoxWebRTC是不支持HEVC的,也没有计划支持。

\3.几乎浏览器都支持MSE,除了iOS。注意HEVCMSE是依赖硬件解码的。

\4.H5播放器目前支持,和还没有支持。

在某些场景下,HEVC的应用完全成熟了,具体就需要各位开发者自己评估了。

7、Thanks

这个功能,核心的贡献都是社区的朋友,有可能会漏掉哈请多包涵,包括但不限于:

•runner365施维大神,最初的PR的提交者,RTMP、HLS和SRT支持265。

•yinjiaoyuan解决了265的bug,GB28181支持265的Patch。

•PieerePi解决了265的bug。

•qichaoshen82解决了265的bug。

•ZSC714725解决了265的bug。

•bluestnMP4和GB28181录制支持265。

•mapengfei53MP4录制支持265。

•chundonglinlinSRT支持265。

•duiniuluantanqinGB28181支持265。

•panda1986WordPressSrsPlayer插件支持265。

最后,特别感谢,谦谦大神的H5播放器,支持了HTTP-FLV和HTTP-TS的能力,这是的延续的项目,我觉得大家都欠他一个Star哇。

原文链接::七年长跑,全面支持