いぶろぐ雑記

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日保証は買いですね。

LinuxでVP9は一筋縄ではいかないみたい

我が家のCPUはおじいさんHaswell(Core i5 4570)なので、4K60fpsのVP9をCPUだけで再生するのは無理。

というわけでグラボに再生支援していただきたいのですが、これがどうも一筋縄ではいかないようで。

LinuxとNvidiaとVP9を取り巻く現状

以下、適当まとめ。

ここまで聞くとブラウザでもVP9を再生支援できそうなのですが、vdpau-va-driverがVP9に非対応。

あぁ〜夢敗れる・・・と思いきや、捨てる神あれば拾う神ありとはよく言ったもの。

vdpau-va-driver-vp9

なんと有志によってvdpau-va-driverにVP9デコード対応パッチを当てた「vdpau-va-driver-vp9」というものが公開されていました。

xtknight/vdpau-va-driver-vp9: Experimental VP9 codec support for vdpau-va-driver (NVIDIA VDPAU-VAAPI wrapper) and chromium-vaapi

これを使うと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年間お疲れ様でした。