瑞芯微rk3568移植openbmc(四)----关于novnc h264 webcodec硬解码

37 篇文章 0 订阅
6 篇文章 8 订阅
本文介绍了在novnc中实现H264软解码遇到的帧率低、CPU负载高的问题,以及如何通过Google浏览器的WebCodec技术实现硬解码,大幅提高帧率并降低CPU占用。在不支持WebCodec的浏览器上仍使用WebAssembly软解码作为备选方案。
摘要由CSDN通过智能技术生成

2022.11.04 更新

1、关于h264 novnc 软解码

        上一篇中实现了novnc h264的webassembly软解码,kvm功能 运行一切正常,但帧率较低,且cpu负载相对较高,google一圈以后才得知,由于webassembly运行于沙盒环境,无法调用gpu的硬解码,只能靠CPU软解H264,性能受CPU影响严重,实际测试也通过打印时间戳发现CPU解码时间在30~50ms不等,严重拖累了帧率(上一篇中有说明)

        于是进一步寻求web硬件方案,因水平所限,不是特别懂web技术,查询了一堆资料信息后才得知,要想实现浏览器硬解H264,只有通过mse的html 5 video tag以流媒体方式实现硬解码,但此方案需要对H264的帧添加封装“fMP4 fragment”,对于novnc已经解出每一帧的H264裸流来说,及其不友好

        好在山穷水尽疑无路,柳暗花明又一村,继续相关查询,发现google浏览器从98版本开始推出了最新的webcodec技术,此版本之后的浏览器直接提供浏览器硬编解码的API,供开发者调用,可以直接解析H264的每一帧裸流。效果十分不错,官方演示demo如下:

        WebCodec MP4 decode sample

        于是参考官方demo,移植进novnc代码当中,保留原来的webassembly软解码,在支持webcodec的浏览器上用webcodec硬解码,在不支持webcodec的浏览器继续使用webassemble软解码,效果如下:

         可以看到在不支持webcodec的搜狗浏览器上,完全靠CPU软解码,浏览器占用CPU及其的高,帧率通常在10~20帧上下。

       而在支持webcodec的谷歌浏览器上,已经正常使用GPU解码,浏览器CPU占用很低,帧率也提高到了40帧左右,效果十分的不错。

        合入openbmc原生web中,效果如下:

         webcodec提供了API直接调用浏览器硬解码,极大方便了项目开发,谷歌最新的beta版浏览器已经支持对H265的硬编解码,如果想进一步降低带宽使用,后续可以考虑rock3a上使用H265的硬编码,浏览器直接调用webcodec的h265硬解码,不过为了兼容普通不支持webcodec技术的浏览器可能还是需要添加上h265的webassembly软解码,目前来说H264已经满足项目使用了,后续有需求再来研究,H264的编解码就先到这里了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值