Written by Winlin, runner365, yinjiaoyuan, PieerePi, qichaoshen82, ZSC714725, bluestn, mapengfei53, chundonglinlin, duiniuluantanqin, panda1986
经过七年的酝酿和开发,SRS在6.0中终于正式支持了HEVC(H.265),几乎全面支持,包括RTMP、FLV、SRT、TS、HLS、DASH、GB28181、WebRTC(Safari)、DVR FLV、DVR MP4、WordPress SrsPlayer等等。
一般H.265比H.264,可以省50%带宽,就是省50%的钱哈。
在大多数商业公司中,七年,黄花菜都凉了。开源项目只要能做出来,哪怕慢一些,也能活久见。
Why Important?
H.265比H.264的编码效率更高,不过一个编解码的更新换代,一般是以N个10年为基准的,现在也不能说H.265就能完全替换H.264,还有不少遗留问题。
H.265的收益就不用说了,可以用更少的带宽,传输同样的质量,这就是省钱啊。
此外,8K的朋友必须H.265,大约在9Mbps码率,而H.264得30Mbps而且最高分辨率无法支持8K。
但省钱的前提是不出问题,如果用户的设备支持H.265有问题,那就会引起投诉和体验问题,反而造成更大的成本。
当然了可以将 H.265转码一个H.264的流出来,给那些只支持H.264的设备用,不过这样一样会引入转码成本了。
而H.265正有这一堆的问题,所以如果你想要选择H.265,一定要想好了,看看你的场景下收益是否能超过要付出的成本。
Status of H.265
下面是各种场景下,H.265的支持情况,可以阅读原文,看详细的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使用mpegts.js。
- 原生支持:使用Chrome播放HTTP-FLV流,需要硬解支持,SRS使用mpegts.js。
- 配置支持:使用Safari拉WebRTC流,需要手动点下菜单栏开启。
- 不支持:使用Chrome hls.js播放HLS流。底层MSE支持,但hls.js是负责将HLS转fMP4,也需要支持才行。
- 不支持:使用Chrome dash.js播放DASH流。底层MSE支持,但dash.js是负责将DASH转fMP4,也需要支持才行。
- 不支持:使用Chrome/Firefox拉WebRTC流。暂时没有看到有支持的可能,Chrome主要是在做AV1方向。
第四部分,VLC播放流,对于TS和MP4封装支持比较好:
- 原生支持:VLC播放HTTP-TS流。
- 原生支持:VLC播放SRT流。
- 原生支持:VLC播放HLS流。
- 原生支持:VLC播放MPEG-DASH流。
- 不支持:VLC播放RTMP流。暂时没看到支持的可能。