缘起
一切都源于十天前用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://gpu
和 Chrome://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
后记:这个ppa的chromium可能会因为版本滞后而被官方包覆盖。。
有更新更为频繁的ppa:saiarcot895/chromium-dev
,虽然我还没试
不过是以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_decoder
是VpxVideoDecoder
,的确现在油管流行vp9格式。启用h264ify
拓展后,编码变成了h264然而随之而来的另一个变化便是视频最高画质只支持到1080p 60fps,同时video_decoder
也不是所期待的GpuVideoDecoder
而是MojoVideoDecoder
。谷歌之,发现是谷歌为Chrome 从 73 版本开始在 Linux 平台启用的新视频解码器,还被称为“Linux 上的 Chrome 用户的春天”3(?。可惜在之后的1080p 60fps h264测试中,发现与Chrome上的FFmpegVideoDecoder
在性能上差异并不是很大,高度怀疑究竟是否用上了硬件加速
对于MojoVideoDecoder
的信息也少得可怜,好吧,到这里就触及到知识盲区了,继续折腾下去也没什么结果,浏览器端的探索先告一段落
MPV
在那之后我才发现了Hardware video acceleration - Archwiki,不得不感叹Archwiki的强大
一张图表,清清楚楚。前人不知已经走过多少坑了,刚刚的确瞎忙活了许久。现在便是打算用传说中的极简跨平台的全能播放器mpv来试试看。
mpv 集成了 youtube-dl
,所以只需mpv 'https://www.youtube.com/watch?v=********'
直接适配DASH流媒体,看油管视频就是那么轻松的事情,前提是..你懂得。大可以用--http-proxy=<proxy>
,然而只支持http(s)代理。但Linux下用proxychains
岂不更美哉
vp9 4k 60fps根本毫无压力,这才是硬解该有的样子嘛
通过mpv可以支持更多硬解码,与其听我说还不如自己去看文档。话说N卡的NVDECODE不会就是用Cuda吧。。
那么现在就来尝试用mpv来看B站吧,传送门->Linux下用mpv在B站看番(二):you-get
不是说用mpv看b站吗,你好像只提到看youtube
By mafia at June 12th, 2019 at 03:33 pm.
@mafia
∠( ᐛ 」∠)_在(二)里才会具体写这个过程,然而最近有些忙,只写到了一半。。可能得拖到7月发布了,其实关键在于 you-get, 如果等不及可以先自己研究下。
By FSpark at June 13th, 2019 at 12:09 am.
@FSpark
you-get我早就在用了,用
you-get -u
获得视频地址,然后用mpv播放,但是只能播放b站的直播,播放视频会出现HTTP error 403 Forbidden
错误,所以想看看你怎么解决的。By mafia at June 13th, 2019 at 03:54 pm.
@mafia
是会碰到这个问题,解决办法有些繁琐不好在这展开。。等下一篇发上来的时候会再通知你
By FSpark at June 13th, 2019 at 07:19 pm.
@FSpark
刚刚又分析了一下,通过添加一个Referer头字段指向 "https://www.bilibili.com" 解决了播放视频问题
By mafia at June 13th, 2019 at 09:07 pm.
@mafia
原来只要指向bilibili.com就行了吗...又能简化一些了,感谢
By FSpark at June 13th, 2019 at 11:34 pm.