让CEF支持HEVC(H.265)视频播放

HEVC(H.265)有高昂的版权费用这个是众所周知的,所以现在绝大多数浏览器默认都不具备HEVC解码能力,这一点可以通过caniuse.com看到:
让CEF支持HEVC(H.265)视频播放_第1张图片
可以看到,基本上只有Apple是HEVC的主要支持者。Google Chrome以及使用Chromium内核的浏览器全军覆没。但实际中确实有很多需求是要在非Apple系的浏览器播放HEVC,怎么办呢?我所知道的有两种方式:一种是在页面上采用WebAssembly开发的Web播放器,这个主流媒体厂商应该大多数都提供了。开源的也有不少,github上一搜一大堆。另外一种那就是如果客户端是你提供的,并且采用了Chromium内核,那就可以通过自己手动修改Chromium源码和相关配置文件的方法,为Chromium提供native层的HEVC解码播放能力,让video标签可以直接渲染播放HEVC的mp4文件。

下面是我基于CEF 3809(Chromium 76内核)添加了HEVC解码的版本:
让CEF支持HEVC(H.265)视频播放_第2张图片
上面是我使用video标签,src给了一个 从Elecard网站上下载的一个 3840x2160@25fps 的HEVC mp4文件(Elecard_about_Tomsk_part2_HEVC_UHD(3840x2160@25fps).mp4,118.48MB)。也可以不用测试页面,直接把本地HEVC mp4文件地址粘贴到地址栏访问也是可以的。

让CEF 3809支持HEVC解码播放的修改,我在github上放了一份。 修改时参考了这个:henrypp / chromium

注意我写了一个readme.txt,里面有些说明。比较关键的是:虽然可以播放HEVC视频了,但是渲染播放时会有比较严重的卡顿和画面内容异常(物体跳动感),而相同的测试页面和测试视频文件,在macOS Safari 13上面播放就很流畅,没有任何问题。通过简单排查,在macOS上播放时,存在一个名字为 VTDecoderXPCService 的进程,这个进程属于VideoToolBox.framework。而大家知道VideoToolBox是苹果操作系统上一个可以访问硬件编解码器的底层框架。所以,猜想在Safari中播放HEVC视频,是利用了硬件加速而非CPU软解码播放。Chromium中应该是纯粹的软解码播放,所以性能会比较差。那么接下来就需要解决,或者寻找如何让Chromium支持硬解码HEVC播放的问题了,嗯,还有很多工作要做。

你可能感兴趣的:(CEF)