LinuxのブラウザでYouTube 4K60fpsをヌルヌルで再生したい人生だった
目次
「みんなやってそうだけど意外と情報がなかった」シリーズ、始まりました。
記念すべき第一回は「YouTubeの4K60fpsムービーをLinux&ブラウザで視聴する」です。
意外と情報がなかったので、戦いの模様を書いておきます。
そろそろグラボ買い替えよか
Radeon RX480 限界に到達
YouTubeの4K60fpsは「VP9」コーデックなんですが、こいつのデコードに我が家のおじさんグラボ(Radeon RX480)は対応していないとのこと。
腐っても3年前のミドルハイなんですから、VP9くらいサクッと読み解いていただきたいものなんですが・・・
ちなみに同世代のGeforceはVP9デコードに対応しており、RadeonがVP9デコードにきちんと対応したのはRX5000シリーズから。
AMDさん、あんまり動画やる気ないんですかね(Fluid Motion廃止とか)。
日本橋になんか怪しいやつが売ってた
「最近シロッコファンのGTX1660Tiがパソコン工房に蔓延している」という情報を聞きつけ、日本橋に赴くとこんなものを拾うことができました。
完全にノーブランドの謎グラボ。例のグラボとは違って映像出力はきちんとついています。
私が使っているJonsbo RM2はけっこう小さいケースなんで、外排気のシロッコファンはありがたい。何回かベンチ回しましたが、とりあえず無事動いてるみたいです。
こんな感じでめちゃくちゃ溢れてました。15000円台で10日保証は買いですね。
GTX1660TI15980円とGTX16660 13980円 pic.twitter.com/EcIgD2wYRD
— 白銀のレガ (@megutasorin) November 21, 2020
LinuxでVP9は一筋縄ではいかないみたい
我が家のCPUはおじいさんHaswell(Core i5 4570)なので、4K60fpsのVP9をCPUだけで再生するのは無理。
というわけでグラボに再生支援していただきたいのですが、これがどうも一筋縄ではいかないようで。
LinuxとNvidiaとVP9を取り巻く現状
以下、適当まとめ。
- Geforce GTX1660TiはVP9デコードに対応している
- NvidiaのLinux向けプロプライエタリドライバもVDPAUによるVP9デコードに対応している
- LinuxではChromiumのbeta/dev版とFirefoxでVAAPIによる再生支援を利用できる
- VAAPIのバックエンドにVDPAUを使える「vdpau-va-driver」というものが存在する
ここまで聞くとブラウザでもVP9を再生支援できそうなのですが、vdpau-va-driverがVP9に非対応。
あぁ〜夢敗れる・・・と思いきや、捨てる神あれば拾う神ありとはよく言ったもの。
vdpau-va-driver-vp9
なんと有志によってvdpau-va-driverにVP9デコード対応パッチを当てた「vdpau-va-driver-vp9」というものが公開されていました。
これを使うとVAAPIのバックエンドにVDPAUを使ってVP9を再生支援できる!!
というわけでセットアップやっていきましょう。
vdpau-va-driver-vp9セットアップ
まずは依存パッケージをインストール。ビルド時のエラーを見つつ調整していったので、もしかしたら無駄なパッケージがあるかもしれません。
sudo apt install \
git \
build-essential \
automake \
autoconf \
libtool \
pkg-config \
meson \
libx11-dev \
xtrans-dev \
x11proto-dri2-dev \
x11proto-dev \
libxext-dev \
x11proto-xext-dev \
libx11-xcb-dev \
doxygen \
dot2tex \
libva-dev
続いてVP9パッチ済みのVDPAUライブラリlibvdpau
をビルド&インストール。
git clone https://gitlab.freedesktop.org/vdpau/libvdpau.git
cd libvdpau
meson --prefix=/usr build
ninja -C build
sudo ninja -C build install
今回のチャレンジの核となるvdpau-va-driver-vp9
をビルド&インストールします。インストールしたあとは念のため再起動。
git clone https://github.com/xtknight/vdpau-va-driver-vp9.git
cd vdpau-va-driver-vp9
./autogen.sh --prefix=/usr
make
sudo make install
Firefoxを使いたい場合はそのままでOK、Chromiumを使いたい場合はbeta/dev版をインストール。
sudo add-apt-repository ppa:saiarcot895/chromium-dev
sudo apt update
sudo apt install chromium-browser
Chromiumの場合はchrome://flagsで「Hardware-accelerated video decode」を有効に。
これで万事OKのはず!だったんですが・・・
無念の敗北
嬉々としてYouTubeの4K60fps動画を再生してみると・・・カクカクなんですが。
vainfoを見るとnvidia_drv_video.so
を読み込んでいるし、VAProfileVP9Profile0
も認識している。
でもFirefoxがGPUのメモリを全然使ってない。
何よりCPUが張り付いてしまっている。
SMPlayerでハードウェアデコードに「VAAPI」を設定すると、きちんとSMPlayerバックエンドのmpvがGPUのメモリを使う。動画自体もヌルヌルで再生できる。ハードウェアデコードに「VDPAU」を設定した場合も同じ。
LinuxのブラウザでVAAPIの再生支援が使えなくなっている?
状況から見て、おそらくブラウザでVAAPIの再生支援が効かなくなってしまっていますね。なぜか。
これが直ればたぶん「LinuxでブラウザからYouTubeの4K60fpsをグラボの支援を使ってヌルヌルで再生する」という夢を叶えることができると思うのですが、今回は力及ばずここまで・・・
SMPlayerを使えば「LinuxでYouTubeの4K60fpsをグラボの支援を使ってヌルヌルで再生する」ことは可能なので、しらばくこれで我慢します。
ブラウザのVAAPI再生支援はバグで死んでいるのか、こちらの不手際なのか、ちょっとわからないので追加で調査していきます。
YouTuber・瀬戸弘司の4K60fps実況をコメントと一緒に再生できる日は来るのか・・・
P.S.
RX480のリファレンス(左)と今回のGTX1660Ti(右)のサイズ比較。基板だけならGTX1660Tiのほうが短いのにケース含めるとRX480のほうが短くなるという。
というわけでRX480さん、3年間お疲れ様でした。