缘起

一切都源于十天前用chrome上油管看某4K,60fpsMMD时卡成dog的体验,看着顶栏上CPU趋势图骤然飙升才发现问题不在小水管而在于显卡掉线。由此对Linux下究极看番体验的追求便开始了……

环境(x64):Ubuntu 18.04LTS/Chrome 73.0.3683.103/Firefox 66.0.3

CPU:Intel i7-8550U (8)

浏览器下的探索

Chrome与Firefox

显卡掉线的情况下,那就只得拜托CPU老哥加班了,这便是软解码。相比之下,Chrome看油管视频1080p 60fps就显得有些掉帧了,而火狐在这次4K 60fps播放时非常流畅,不过CPU占用也在60%-80%间起伏,看来..火狐的软解能力比谷歌还强?虽然是软解,但感觉这样其实也就够了,然而折腾的执念却依旧放不下——核显,N卡都摆在那了,为何不用呢?

补丁版Chromium(74.0.3729.75)

Chrome://gpuChrome://flags 里捣鼓半天无果后,才意识到一个惨痛的事实,谷歌就没打算为Linux提供GPU硬解功能,后来也的确得到了印证1,不过还是有办法。其实在2018年就已经有人提交了针对Chromium在这一问题上的补丁2,然而由于开发组顾虑Linux上各种因显卡驱动引发的Bug影响到Chrome所一贯追求的安全稳定而迟迟没有合并。

在Ubuntu里,我们可以直接使用saiarcot维护的chromium分支,添加PPA:

sudo add-apt-repository ppa:saiarcot895/chromium-beta
sudo apt-get update
sudo apt install chromium-browser

不过是以VA-API(Intel) 支持为主,似乎也可以通过打了补丁的vdpau-va-driver来支持一部分N卡

更详细的步骤可以参照这篇How To Enable Hardware Acceleration In Chromium On Ubuntu Or Linux Mint (VA-API Patched PPA Builds)

的确,硬件加速选项可以开启了,但实际体验依旧还是老样子,到chrome://media-internals里看看,发现video_decoderVpxVideoDecoder,的确现在油管流行vp9格式。启用h264ify拓展后,编码变成了h264然而随之而来的另一个变化便是视频最高画质只支持到1080p 60fps,同时video_decoder也不是所期待的GpuVideoDecoder而是MojoVideoDecoder。谷歌之,发现是谷歌为Chrome 从 73 版本开始在 Linux 平台启用的新视频解码器,还被称为“Linux 上的 Chrome 用户的春天”3(?。可惜在之后的1080p 60fps h264测试中,发现与Chrome上的FFmpegVideoDecoder在性能上差异并不是很大,高度怀疑究竟是否用上了硬件加速

chrome

Chromium

对于MojoVideoDecoder的信息也少得可怜,好吧,到这里就触及到知识盲区了,继续折腾下去也没什么结果,浏览器端的探索先告一段落

MPV

在那之后我才发现了Hardware video acceleration - Archwiki,不得不感叹Archwiki的强大

Hardware video acceleration - Archwiki
一张图表,清清楚楚。前人不知已经走过多少坑了,刚刚的确瞎忙活了许久。现在便是打算用传说中的极简跨平台的全能播放器mpv来试试看。

mpv 集成了 youtube-dl,所以只需mpv 'https://www.youtube.com/watch?v=********'

直接适配DASH流媒体,看油管视频就是那么轻松的事情,前提是..你懂得。大可以用--http-proxy=<proxy>,然而只支持http(s)代理。但Linux下用proxychains岂不更美哉

mpv

vp9 4k 60fps根本毫无压力,这才是硬解该有的样子嘛4k mpv

通过mpv可以支持更多硬解码,话说N卡的NVDECODE不会就是用Cuda吧。。

那么现在就来尝试用mpv来看B站吧,传送门->Linux下用mpv在B站看番(二):you-get