当前位置:科学 > 正文

SRS6.0: 七年长跑,全面支持H.265

2023-04-16 07:04:50  来源:音视频开发T哥

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


(资料图片仅供参考)

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

1、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,一定要想好了,看看你的场景下收益是否能超过要付出的成本。

2、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流。暂时没看到支持的可能。• 不支持:VLC播放HTTP-FLV流。暂时没看到支持的可能。

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

• 原生支持:录制为FLV/MP4文件。FLV是非标准的,MP4是标准的。• 原生支持:解析HEVC元数据,通过HTTP API提供。• 原生支持:黑盒测试支持HEVC。• 原生支持:SRS镜像支持补丁的FFmpeg。可以不用自己编译FFmpeg,使用SRS镜像提供的FFmpeg即可。• 原生支持:WordPress plugin SrsPlayer插件支持HEVC。由于云SRS使用的是4.0稳定版本,还需要几年才能切换到6.0。• 不支持:Update srs-cloud for HEVC.• 不支持:Edge server supports publish HEVC stream to origin.• 不支持:Edge server supprots play HEVC stream from origin.• 不支持:HTTP Callback takes HEVC metadata.• 不支持:Prometheus Exporter supports HEVC metadata.• 不支持:Improve coverage for HEVC.• 不支持:Supports benchmark for HEVC by srs-bench.

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

由于Chrome 105 MSE已经支持了HEVC,所以浏览器上的完善度就很高了,感谢头条的开发者。

C++音视频学习资料免费获取方法:关注音视频开发T哥,点击「链接」即可免费获取2023年最新C++音视频开发进阶独家免费学习大礼包!

3、Usage: Live

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

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

git checkout develop./configure --h265=on && make

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

env SRS_LISTEN=1935 SRS_DAEMON=off SRS_LOG_TANK=console \  SRS_SRT_SERVER_ENABLED=on SRS_VHOST_SRT_ENABLED=on SRS_VHOST_SRT_TO_RTMP=on \  SRS_HTTP_SERVER_ENABLED=on SRS_VHOST_HTTP_REMUX_ENABLED=on \  SRS_VHOST_HTTP_REMUX_MOUNT=[vhost]/[app]/[stream].flv SRS_VHOST_HLS_ENABLED=on \  ./objs/srs -e

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

ffmpeg -stream_loop -1 -re -i doc/source.flv -acodec copy -vcodec libx265 \  -pes_payload_size 0 -f mpegts "srt://127.0.0.1:10080?streamid=#!::r=live/livestream,m=publish"

就可以直接打开网页播放HTTP-FLV流了,也可以使用ffplay或VLC播放HLS:

• http://localhost:8080/live/livestream.flv• http://localhost:8080/live/livestream.m3u8

其他协议请参考SRS的文档开启即可。

4、Usage: WebRTC

特别解释下WebRTC H.265:只有Safari支持HEVC,Chrome和Firefox还不支持。

Safari默认没有开启,需要手动点下开发 > 实验性功能 > WebRTC H265 codec

具体使用方法,请参考#465的Safari WebRTC部分的使用说明。

WebRTC对于AV1的支持更完善,Safari/Chrome/Firefox也都支持,具体请参考#1070,当然MSE对于AV1目前还没有支持。

5、FFmpeg Patch

众所周知,FFmpeg/ffplay是不支持HEVC over RTMP/HTTP-FLV,当然一般用FFmpeg的朋友都是有自己改代码的能力,下面是一些相关的Patch:

• 施维(runner365),支持FFmpeg 4/5/6版本的patch,参考ffmpeg_rtmp_h265,SRS使用的是这个Patch。• Intel 0001-Add-SVT-HEVC-FLV-support-on-FFmpeg.patch• 金山云修改的FLV的specfication以及对应的usage。

SRS提供了打过Patch的FFmpeg、ffplay和ffprobe,可以直接用SRS Docker推流:

# For macOSdocker run --rm -it ossrs/srs:encoder ffmpeg -stream_loop -1 -re -i doc/source.flv \  -acodec copy -vcodec libx265 -f flv rtmp://host.docker.internal/live/livestream# For linuxdocker run --net=host --rm -it ossrs/srs:encoder ffmpeg -stream_loop -1 -re -i doc/source.flv \  -acodec copy -vcodec libx265 -f flv rtmp://127.0.0.1/live/livestream

可以详细参考FFmpeg Tools

6、Known Issues

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

\1. Safari HEVC WebRTC只支持WebRTC,不支持转换其他协议。SRS可以实现,但目前使用的场景比较少,有需要会在未来完善。\2. Chrome/Firefox WebRTC是不支持HEVC的,也没有计划支持。\3. 几乎浏览器都支持MSE,除了iOS。注意HEVC MSE是依赖硬件解码的。\4. H5播放器目前mpegts.js支持,hls.js和dash.js还没有支持。

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

7、Thanks

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

• runner365 施维大神,最初的PR的提交者,RTMP、HLS和SRT支持265。• yinjiaoyuan 解决了265的bug,GB28181支持265的Patch。• PieerePi 解决了265的bug。• qichaoshen82 解决了265的bug。• ZSC714725 解决了265的bug。• bluestn MP4和GB28181录制支持265。• mapengfei53 MP4录制支持265。• chundonglinlin SRT支持265。• duiniuluantanqin GB28181支持265。• panda1986 WordPress SrsPlayer插件支持265。

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


原文链接:SRS6.0: 七年长跑,全面支持H.265



关键词:

推荐阅读

本田15万左右的车 本田是哪个国家的品牌?

本田15万左右的车1、凌派官方指导价:9 98万到16 98万广汽本田凌派是一辆小型车,特供车的地位并不妨碍一个月卖一万多,因为真的是一款优秀 【详细】

人工饲养白犀牛可以吗?白犀牛不白为何叫白犀牛?

人工饲养白犀牛可以吗?去年8月,一组国际科学家和兽医从他们那里获得了卵子。该小组将尝试人工授精雄性白犀牛的冷冻精子,然后将其植入南白 【详细】

库克称苹果永远不会垄断 苹果不会垄断什么?

库克称苹果永远不会垄断当地时间9月21日,当库克在节目中谈到对苹果等科技巨头的反垄断调查时,他说,大公司应该受到审查,这不仅是因为公 【详细】

福特野马怎么样?多少钱可以养一辆野马?

福特野马怎么样?第一代野马于1964年正式上市,长车头、短车尾、双门四座的设计布局也成为未来野马的标志性元素,嵌入马徽标的独特进气格栅 【详细】

美国将科学家送往国际空间站 ​NASA开放空间站的商业化怎么回事?

美国将科学家送往国际空间站美国宇航局正在考虑将超专业科学家派往国际空间站,与职业宇航员一起工作。这个想法绝不是新的,因为 NASA 曾 【详细】

关于我们  |  联系方式  |  免责条款  |  招聘信息  |  广告服务  |  帮助中心

联系我们:85 572 98@qq.com备案号:粤ICP备18023326号-40

科技资讯网 版权所有