在 Linux 上使用 Google Chrome 或 Chromium 浏览器观看bilibili、爱奇艺等网站的高清视频时, CPU 使用率会很高,如果你用的是笔记本,电脑会发热而且电池会很快用完。这是因为 Chrome/Chromium和firefox在 Linux 上不支持硬件加速的视频解码。( Firefox 的问题目前没有办法解决。)
如何解决这个问题呢?请往下看:
1、驱动程序
请使用apt命令安装vdpau和vaapi驱动和信息查看工具。
sudo apt install mesa-vdpau-drivers mesa-va-drivers vdpau-va-driver vainfo vdpauinfo
如果是intel或amd的显卡,二者都有官方的开源驱动,
如果是nvidia显卡,请在“软件和更新”的“附加驱动”中选择闭源驱动。
驱动程序安装完毕后,请查看显卡支持的视频解码信息。执行信息查看工具。
vdpauinfo
vainfo
2、chromium浏览器设置
带有硬件加速功能的chromium浏览器还没有合并进入正式版,所以要添加开发版的分支。
在此要感谢软件的维护者Saikrishna Arcot
项目的源代码托管在github上。https://github.com/saiarcot895/chromium-ubuntu-build
项目的安装包托管在lauchpad上。https://launchpad.net/~saiarcot895/+archive/ubuntu/chromium-dev/+packages
可以通过下载安装包来安装,也可以选择通过ppa来安装。个人觉得,ppa更方便一些。目前支持16.04及以上版本的ubuntu kylin优麒麟。
sudo add-apt-repository ppa:saiarcot895/chromium-dev
更新软件源。
sudo apt update
更新chromium。
sudo apt dist-upgrade
如果找不到app,请执行安装命令。
sudo apt install chromium-browser
开启视频硬解加速功能。在浏览器地址栏中输入“chrome://flags”。
搜索关键词“video”,将选项Hardware-accelerated video decode设置为enable。
3、验证视频的解码方式
浏览器是否在使用硬解码呢?我们需要验证一下。在浏览器中播放一段视频,cpu占用率已经降到10%左右了。
在新标签中输入“chrome://media-internals/”。点击正在播放的视频链接。如果选项video_decoder中显示的值为MojoVideoDecoder。恭喜你,浏览器已经使用显卡硬解视频了。
PS:关于MojoVideoDecoder。
“Mojo视频解码器”在windows视窗操作系统的chromium中是默认开启的,而这一里程碑式的特性在Linux系统上也实现了。
Mojo视频解码器是什么?与浏览器的其他特性比起来,谷歌对这项工作谈论不多。直到Phoronix的一位读者说,Linux桌面系统想要使用这个下一代的视频解码器需要一个补丁。大家这才注意到它。
自2018年11月初以来,Mojo视频解码器已被用于windows视窗操作系统、苹果macOS操作系统和谷歌chrome操作系统。由于时间的原因,Linux的默认启用在12月才出现。
几年来,Mojo一直是Chrome使用的进程间通信机制(inter-process communication (IPC) mechanism)。或者更具体地说,是进程间和进程内消息传递的IPC基元(primitives)、消息格式和库的抽象。他们为视频解码而开发的新VDA层(VDAv2),将视频解码交由GPU图形处理器来完成,而Mojo视频解码器是这个工作的一部分。但是整个过程存在一个追踪器漏洞。
长话短说,底层的视频播放有望改善chrome的视频回放体验。长时间以来,由于存在漏洞,在Linux上播放chrome/chromium视频一直被放在次要地位(或者至少对许多Linux桌面用户来说是这样的感觉)。不过还好,2019年这种情况将被改变。
4、播放器的设置
smplayer的“选项-首选项-常规-视频”中的“输出驱动”选择“vdpau”。如果是intel集成显卡,可以选择“vaapi”。
本文参考了archwiki的文献:https://wiki.archlinux.org/index.php/Hardware_video_acceleration_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)