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

3 min読了の目安(約3000字TECH技術記事

Zenn初投稿です。

初投稿なのに自ブログ記事の焼き直しになってしまい申し訳ない・・・いや、はやくZenn使ってみたいという欲望に勝てませんでした。

というわけで、GPUの力を借りつつ、Linux上のブラウザでVP9な4K60fpsのYouTubeムービーをヌルヌルで再生しようとすると、こんな感じになりました。

テスト環境

  • CPU: Core i5 4570
  • GPU: Geforce GTX1660Ti
  • OS: Ubuntu 20.04

CPUがとっても古いですが、気にせずいきましょう。というか、CPUがとっても古いのでGPUによる再生支援が必要になり、ややこしいことになっている次第です。

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」というものが公開されていました。

https://github.com/xtknight/vdpau-va-driver-vp9

これを使うとVAAPIのバックエンドにVDPAUを使って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 をビルド&インストールします。インストールしたあとは念のためPCを再起動。

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実況をコメントと一緒に再生できる日は来るのか・・・

おまけ

今回使ったGTX1660Tiは2020年末に日本橋で投げ売りされていたこれです。

https://twitter.com/megutasorin/status/1330010172828176384

この記事は以下の記事をちゃちゃっと再編集したものです。

https://ibulog-iblog.hateblo.jp/entry/2020/11/24/235913