いぶろぐのガジェット日記

いぶろぐのガジェット日記

ガジェットやOSS、その他興味のあるITニュースをぽつらぽつら投稿します。

LinuxのブラウザでYouTube 4K60fpsをヌルヌルで再生したい人生だった

f:id:ibulog_iblog:20201124235326p:plain

「みんなやってそうだけど意外と情報がなかった」シリーズ、始まりました。

記念すべき第一回は「YouTubeの4K60fpsムービーをLinux&ブラウザで視聴する」です。

意外と情報がなかったので、戦いの模様を書いておきます。


そろそろグラボ買い替えよか

Radeon RX480 限界に到達

YouTubeの4K60fpsは「VP9」コーデックなんですが、こいつのデコードに我が家のおじさんグラボ(Radeon RX480)は対応していないとのこと。

腐っても3年前のミドルハイなんですから、VP9くらいサクッと読み解いていただきたいものなんですが・・・

ちなみに同世代のGeforceはVP9デコードに対応しており、RadeonがVP9デコードにきちんと対応したのはRX5000シリーズから。

AMDさん、あんまり動画やる気ないんですかね(Fluid Motion廃止とか)。

日本橋になんか怪しいやつが売ってた

「最近シロッコファンのGTX1660Tiがパソコン工房に蔓延している」という情報を聞きつけ、日本橋に赴くとこんなものを拾うことができました。 f:id:ibulog_iblog:20201124234344j:plain

完全にノーブランドの謎グラボ。例のグラボとは違って映像出力はきちんとついています。 f:id:ibulog_iblog:20201124234445j:plain

私が使っているJonsbo RM2はけっこう小さいケースなんで、外排気のシロッコファンはありがたい。何回かベンチ回しましたが、とりあえず無事動いてるみたいです。 f:id:ibulog_iblog:20201124234355j:plain

こんな感じでめちゃくちゃ溢れてました。15000円台で10日保証は買いですね。


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

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

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

LinuxNvidiaとVP9を取り巻く現状

以下、適当まとめ。

・Geforce GTX1660TiはVP9デコードに対応している

NvidiaLinux向けプロプライエタリドライバも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」というものが公開されていました。

github.com

これを使うと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も認識している。 f:id:ibulog_iblog:20201124234918p:plain

でもFirefoxGPUのメモリを全然使ってない。 f:id:ibulog_iblog:20201124234948p:plain

何よりCPUが張り付いてしまっている。 f:id:ibulog_iblog:20201124235005p:plain

SMPlayerでハードウェアデコードに「VAAPI」を設定すると、きちんとSMPlayerバックエンドのmpvGPUのメモリを使う。動画自体もヌルヌルで再生できる。ハードウェアデコードに「VDPAU」を設定した場合も同じ。 f:id:ibulog_iblog:20201124235151p:plain

たぶん原因は「LinuxのブラウザでVAAPIの再生支援が使えなくなっている」

状況から見て、おそらくブラウザでVAAPIの再生支援が効かなくなってしまっていますね。なぜか。

これが直ればたぶん「LinuxでブラウザからYouTubeの4K60fpsをグラボの支援を使ってヌルヌルで再生する」という夢を叶えることができると思うのですが、今回は力及ばずここまで・・・

SMPlayerを使えば「LinuxYouTubeの4K60fpsをグラボの支援を使ってヌルヌルで再生する」ことは可能なので、しらばくこれで我慢します。

ブラウザのVAAPI再生支援はバグで死んでいるのか、こちらの不手際なのか、ちょっとわからないので追加で調査していきます。

YouTuber・瀬戸弘司の4K60fps実況をコメントと一緒に再生できる日は来るのか・・・


P.S.

RX480のリファレンス(左)と今回のGTX1660Ti(右)のサイズ比較。基板だけならGTX1660Tiのほうが短いのにケース含めるとRX480のほうが短くなるという。 f:id:ibulog_iblog:20201124234719j:plain

というわけでRX480さん、3年間お疲れ様でした。 f:id:ibulog_iblog:20201124234804j:plain