您当前的位置:首页 > 计算机 > 系统应用 > Linux

在优麒麟或 Debian 中,硬解 1080P 或 4K 视频

时间:11-21来源:作者:点击数:

环境

操作系统:Ubuntu Kylin 优麒麟 20.04 LTS、Debian

适用架构:ARM64(鲲鹏、飞腾)、AMD64(海光、兆芯)、MIPS64(龙芯)

在 Linux 上使用 Firefox、Google Chrome 或 Chromium 浏览器观看 BiliBili、爱奇艺等网站的高清视频时, CPU 使用率会很高,尤其是 4K 视频。如果你用的是笔记本,电脑会发热而且电池会很快用完。这是因为 Chrome/Chromium 和 Firefox 在 Linux 上没有开启硬件加速的视频解码。

如何解决这个问题呢?请往下看:

1、驱动程序

请使用 apt 命令安装 vdpau 和 vaapi 驱动和信息查看工具。

sudo apt install mesa-vdpau-drivers mesa-va-drivers vainfo vdpauinfo libvdpau-va-gl1

如果是 intel 或 amd 的显卡,二者都有官方的开源驱动,

如果是 nvidia 显卡,请先安装闭源驱动。

AMD64

方法1:

使用 sudo apt search nvidia-driver 查看系统提供的驱动版本。比如:nvidia-driver-440。然后使用命令行安装。

sudo apt install nvidia-driver-440

方法2:

在开始菜单中选择“软件更新器”,点击左下角的“设置”。在标签“附加驱动”中选择闭源驱动。

驱动程序安装完毕后,请查看显卡支持的视频解码信息。执行信息查看工具。

vdpauinfo

vainfo

ARM64

《安装 NVIDIA 显卡闭源驱动(ARM64 版)》https://my.oschina.net/chipo/blog/4478440

MIPS64

NVIDIA 显卡不适用于龙芯。

Fedora系统请参考《龙芯平台硬解1080和4k视频》https://my.oschina.net/chipo/blog/3050783

2、Firefox

Firefox 开始支持通过 VA-API 的硬件视频加速和 WebGL(由FFmpeg提供支持)。支持的显示服务器既包括 Wayland(从Firefox 77开始)也包括 X.org(从Firefox 80 开始)。Mozilla 还已经使用 Firefox 的 FFmpeg 完成了 VP9 VA-API 硬件解码的实现,Firefox 快速视频回放功能,目前只能在 Intel 和 AMD 的 GPU 上运行。

注意:由于 mesa 需要 kcmp syscall,在 linux-hardened 下的 AMD GPU 用户可能需要用 CONFIG_CHECKPOINT_RESTORE=y 重建 linux-hardened

浏览器的设置

在 Firefox 中尝试 VA-API 支持之前,请确保:

为您的显卡安装正确的 VA-API 驱动程序,并验证 VA-API 已启用且工作正常;

在 about:config 中将:

media.ffmpeg.vaapi.enabled 设置为 true

layers.acceleration.force-enabled 设置为 true。(Gecko的OpenGL后端,可以按照 /Tweaks#Enable OpenGL compositor 中的说明启用;)

gfx.webrender.all 设置为 true。(新的 Servo 浏览器引擎的网络渲染,可以按照 /Tweaks#Enable WebRender compositor 中的说明启用。)

media.ffvpx.enabled 为 false,禁用捆绑的FFmpeg,以便使用 VA-API 进行 VP8/VP9 解码;

安装Wayland(可选步骤)

如果不想使用 Wayland,这一步可以省略。

Gnome on wayland,

sudo apt install ubuntu-gnome-desktop

KDE on wayland,

sudo apt install plasma-workspace-wayland

请参考《安装 Ubuntu Gnome 桌面环境》https://my.oschina.net/chipo/blog/3065323

登录时在右下角选择“Ubuntu On Wayland”“Plasma On Wayland”。

环境变量

在启用以下环境变量的情况下运行 Firefox:

  在 Wayland 中,使用命令 MOZ_ENABLE_WAYLAND=1 firefox,请参见 #Wayland

  在 X.org 中,使用命令 MOZ_X11_EGL=1 firefox。

当然,如果为了避免每次启动时的繁琐,可以修改 /usr/share/applications/firefox.desktop 文件。在“exec=”之后,加入环境变量的设置,比如“MOZ_X11_EGL=1”。

提示: 例如,您可以通过使用 MOZ_LOG="PlatformDecoderModule:5" 环境变量运行 Firefox 来验证 VA-API 是否已启用,并在日志输出中检查 VA-API 是否已启用并在播放视频时使用(搜索“VA-API”字符串)。请注意这些日志,因为它们可能表明,在您的特定设置中,前面描述的两种可能的合成器(OpenGL 或 WebRender)中只有一种可以与 VA-API 一起工作。

例如,对于英特尔 GPU, intel-gpu-tools 中的英特尔 intel_gpu_top实用程序可用于监控视频回放期间的GPU活动。

要在 YouTube 中允许硬件解码,所使用的视频编解码器必须得到硬件的支持。您的 GPU 支持的配置文件可以通过 vainfo 进行检查,使用的 YouTube 编解码器可以通过 h264ify 或增强型 h264ify 扩展进行控制。或者,可以安装 firefox-h264ify。

重新启动Firefox之后,请确保它可以按以下方式工作:进入 about:support 滚动至 Graphics (图像)并确认 Compositing (合成)显示为 WebRender。

查看设置是否生效。

查看渲染方式。

VA-API快速视频播放仅支持H.264视频,YouTube默认为VP9,使用 h264ify Firefox扩展可以强制YouTube使用H.264编码。

3、Chromium

带有硬件加速功能的chromium浏览器还没有合并进入正式版,所以要添加开发版的分支。

在此要感谢软件的维护者Saikrishna Arcot

项目的源代码托管在github上。

https://github.com/saiarcot895/chromium-ubuntu-build

项目的安装包托管在lauchpad上。

Beta 分支

https://launchpad.net/~saiarcot895/+archive/ubuntu/chromium-beta/+packages

Alpha 分支

https://launchpad.net/~saiarcot895/+archive/ubuntu/chromium-dev/+packages

可以通过下载安装包来安装,也可以选择通过ppa来安装。个人觉得,ppa更方便一些。目前支持16.04及以上版本的ubuntu kylin优麒麟。

Beta 分支(更稳定)

sudo add-apt-repository ppa:saiarcot895/chromium-beta

Alpha 分支(更超前)

sudo add-apt-repository ppa:saiarcot895/chromium-dev

更新软件源。

sudo apt update

更新chromium。

sudo apt dist-upgrade

如果找不到app,请执行安装命令。

sudo apt install chromium-browser

系统将会安装3个必要的软件包,chromium-browser chromium-browser-l10n chromium-codecs-ffmpeg-extra

4、验证视频的解码方式

浏览器是否在使用硬解码呢?我们需要验证一下。在浏览器中播放一段视频,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年这种情况将被改变。

如果没有实现硬解,请参考以下方法:

开启视频硬解加速功能。在浏览器地址栏中输入“chrome://flags”。

搜索关键词“video”,将选项Hardware-accelerated video decode设置为enable。

5、播放器的设置

SMplayer 的“选项-首选项-性能-性能”中的“硬件解码”选择“vaapi”或“vdpau”。解码线程可以设置为 CPU 的核心数。

SMplayer 的“选项-首选项-常规-视频”中的“输出驱动”,如果存在选项,选择“vaapi”或“vdpau”。

参考文献

本文参考了archwiki的文献:https://wiki.archlinux.org/index.php/Hardware_video_acceleration_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门