コンテンツにスキップ

ハードウェアアクセラレーション

Jellyfinは、FFMpegを使用したビデオのエンコード/デコードのハードウェアアクセラレーション(HWA)をサポートしています。 FFMpegおよびJellyfinは、ビデオアクセラレーションAPIを介して、Intel Quicksync(QSV)、AMD AMF、nVidia NVENC / NVDEC、OpenMax OMX、MediaCodecなどの複数のハードウェアアクセラレーション実装をサポートできます。

VAAPIは、libvaを使用してローカルコントローラーと対話し、HWAを提供するビデオアクセラレーションAPIです。 QSVは、VAAPIの変更(フォーク)バージョンを使用し、それをlibmfxおよびその独自のドライバー(QSV互換プロセッサーのリスト)とインターフェースします。

<figcaption class=ハードウェアアクセラレーション"幅=" 832 "高さ=" 451 "/>ハードウェアアクセラレーション

OS推奨HWアクセラレーションLinuxQSV、NVENC、VAAPI WindowsQSV、NVENC、AMF、VAAPIMacOSNone(VideoToolbox Coming Soon)AndroidMediaCodec、OMXRPiOMX

HWAを使用したグラフィックスカードの比較

NVIDIAは公式のffmpegリストを使用しています。すべてのカードがテストされているわけではありません。これらのドライバーは、LinuxおよびWindowsに推奨されます。サポートされているコーデックのNVIDIAグラフィックカードの公式リストを次に示します。 UbuntuがNVENCと連携する例。 H264 10-bitはNVIDIAアクセラレーションをサポートしていません。

VAAPIでサポートされているコーデックのリスト。

AMF Linuxサポートはまだ公式ではなく、AMD GFXカードはLinuxでVAAPIを使用する必要があります。

Zenは単なるCPUです。どのような形式のビデオのデコード/エンコーディングにもハードウェアアクセラレーションはありません。ハードウェアアクセラレーションには、APUまたはdGPUが必要です。

LinuxでのIntel QSVベンチマーク。

Windowsでは、DXVA2 / D3D11VAライブラリをデコードに、libmfxライブラリをエンコードに使用できます。

CentOSでは、QSV用に追加のドライバーが必要になる場合があります。

詳細はこちらをご覧ください。

ハードウェアアクセラレーションを有効にする

ハードウェアアクセラレーションオプションは、管理ダッシュボードのセクションにあります トランスコーディング 。ドロップダウンメニューから有効なハードウェアアクセラレーションオプションを選択し、該当する場合はデバイスを指定し、[ハードウェア暗号化を有効にする]をオンにして、ハードウェアがサポートしている場合は暗号化とデコードを有効にします。

ハードウェアアクセラレーションは、メディア再生ですぐに利用できます。サーバーを再起動する必要はありません。

セットアップ

ハードウェアアクセラレーションの各タイプ、およびJellyfinインストールの各タイプでは、使用する前に異なる構成オプションが必要です。最新情報については、選択する加速のタイプについてFFMpegのドキュメントを常に参照することをお勧めします。

Dockerでの高速化

Dockerでハードウェアアクセラレーションを使用するには、デバイスをコンテナーに移動する必要があります。使用可能なビデオデバイスを確認するには、マシンでsudo lshw -c videoまたはvainfoを実行します。

NVIDIA GPUは現在Docker-Composeでサポートされていません。

Docker Runを使用して、次のようなコマンドでサーバーを起動できます。

docker run -d --volume / path / to / config:/ config --volume / path / to / cache:/ cache --volume / path / to / media:/ media〜-user 1000:1000 --net = host --restart = unless-stop --dev / dev / dri / renderD128:/ dev / dri / renderD128 --dev / dev / dri / card0:/ dev / dri / card0〜jellyfin / jellyfin

または、サーバーを再起動するたびに長いコマンドを実行する必要がないように、構成ファイルでdocker-composeを使用できます。

バージョン: "3"サービス:jellyfin:画像:jellyfin / jellyfinユーザー:1000:1000 network_mode: "host"ボリューム:-/パス/ to / config:/ config-/パス/ to /キャッシュ:/キャッシュ-/パス/ to / media:/メディアデバイス:# VAAPIデバイス-/ dev / dri / renderD128:/ dev / dri / renderD128-/ dev / dri / card0:/ dev / dri / card0 # RPi 4-/ dev / vchiq:/ dev / qchiq

Debian Docker Nvidia

Dockerを使用してハードウェアアクセラレーションを実現するには、いくつかの手順が必要です。

前提条件:

https://github.com/nvidia/nvidia-docker/wiki/Installation-(version-2.0)

GNU / Linux x86_64、カーネルバージョン。 3.10Docker; = 1.12アーキテクチャを備えたNVIDIA GPU; Fermi(2.1)NVIDIAドライバー〜= 361.93(以前のバージョンではテストされていません)

このコマンドでGPUが表示されることを確認します。

lspci | grep VGA

古いソフトウェアが問題を引き起こす可能性がないように、ホストを更新します。

apt-get update && apt-get dist-upgrade -y

必要なファイルのダウンロードに使用するカールをインストールします。

apt-get install curl

/etc/apt/sources.listのsources.listを編集し、必要に応じて各ソースにnon-freeコントリビューションを追加します。

deb http://ftp.ch.debian.org/debian/ stretch main

上記の行は、例として次の行と一致するように変更する必要があります。

deb http://ftp.ch.debian.org/debian/ stretch main non-free contrib

Nvidiaドックコンテナーフォントをダウンロードして追加します。

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key adddistribution = $(。/ etc / os-release; echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

パッケージリストを再度更新して、新しいリポジトリで利用可能な最新のソフトウェアをダウンロードします。

apt-get update

linux-headersをインストールして、次のコマンドを実行します。

apt-get install linux-headers-$(uname -r | sed $0027s / [^-] *-[^-] *-// $0027)

または、互換性の問題が発生している場合は、このコマンドを実行します。

apt-get install -t stretch-backports linux-headers-$(uname -r | sed $0027s / [^-] *-[^-] *-// $0027)

リポジトリからNvidia docker2をインストールします。

apt-getインストールnvidia-docker2

保守パッケージを保守するかインストールするかを選択するように求められたら、yを入力して保守リリースをインストールします。

インストール後、nvidiaをデフォルトのランタイムとして追加したい場合があります:/etc/docker/daemon.jsonを次のように編集します:

<"Default Runtime": "nvidia", "runtimes": { "nvidia": { "camino": "nvidia-contenedor-tiempo de ejecución", "runtimeArgs": [] } }}

現在機能しているstevedoresのサービスを再起動します。

sudo pkill -SIGHUP Docker

nvidiaドライバーと依存関係をインストールします。

apt-get install -t stretch-backports nvidia-driver libnvcuvid1 libnvidia-encode1 libcuda1 nvidia-smi

すべての変更を適用するには、ホストを再起動してください。

今すぐ再起動

このテストドライブでドライバーとカプラーが正しく構成されていることを確認します。

nvidia-smidocker run --gpus 0 nvidia / cuda:9.0-base nvidia-smi

ホストとstevedoreの必要なリソースへのアクセスを検証します。

ldconfig -p | grep cuvidldconfig -p | grep libnvidia-encode.so.1

これらの環境パラメーターを追加してコンテナーを開始します。

-e "NVIDIA_DRIVER_CAPABILITIES = all" -e NVIDIA_VISIBLE_DEVICES = all --runtime = nvidia --gpus all 

完全な実行コマンドは次のようになります。

docker run -d --name = jellyfin -e NVIDIA_DRIVER_CAPABILITIES = all -e NVIDIA_VISIBLE_DEVICES = all --gpus all --runtime = nvidia -p 8096:8096 -p 8920:8920 -v / config:/ config -v / media: / media -v / cache:/ cache-停止しない限り復元する〜jellyfin / jellyfin

次のオプションで実行する場合、いくつかの特別な手順があります。

-ユーザー1000:1000

このユーザーをビデオグループに追加する必要がある場合があります。

usermod -aGビデオユーザー

コンテナが起動したら、ホストのリソースへのアクセスを再検証できます。

docker exec -it jellyfin ldconfig -p | grep cuviddocker exec -it jellyfin ldconfig -p | grep libnvidia-encode.so.1

次に、Jellyfinの再生設定に移動し、Nvidia NVENCを有効にして、トランスコーディングが必要なファイルを再生するためにGPUがサポートするものに応じてターゲットコーデックを選択します。ビットレートを変更することは、これをテストする良い方法です。

トランスコーディングログを確認して、すべてが正しく機能していることを確認します。

ストリーム#0:0 -----; #0:0(h264(h264_cuvid)-------; h264(h264_nvenc))ストリーム#0:2 -------; #0:1(ac3(ネイティブ)-------; aac(ネイティブ))<-pre>

.debパッケージからDebian / UbuntuでVAAPIアクセラレーションを設定する

Debian / UbuntuでのVAAPI構成では、権限が正しいことを確認するために追加の構成が必要です。

システムのVAAPI情報を確認するには、コマンドラインからvainfoをインストールして実行します。

  1. 関連ドキュメントに従って、システムのVAAPIを構成します。 / dev / driにレンダーデバイスが存在することを確認し、書き込みに使用できるアクセス許可とグループをメモします。この場合はレンダーします。$ls -l / dev / dritotal 0drwxr-xr-x 2 root 100 Apr 13 16:37 by-pathcrw-rw ---- 1ルートビデオ226、0 Apr 13 16:37 card0crw-rw ---- 1ルートビデオ226、1 Apr 13 16:37 card1crw-rw ---- 1ルートレンダー226、128 Apr 13 16:37 renderD128注一部のバージョンでは、グループがレンダーではなくビデオである場合があります。
  2. Jellyfinサービスユーザーを前のグループに追加して、Jellyfin FFMpegプロセスからデバイスへのアクセスを許可し、Jellyfinを再起動します。
sudo usermod -aG render jellyfinsudo systemctl restart jellyfin
  1. 管理パネルの「トランスコーディング」ページでVAAPIアクセラレーションを設定します。 VA APIのデバイス値として、上記のデバイス/ dev / dri / renderD128を入力します。
  2. 映画を見て、ffmpeg-transcode-*。/ var / log / jellyfinのログを表示し、radeontopまたは同様のツールを使用して、トランスコーディングが行われていることを確認します。

LXCまたはLXDコンテナー

これはLXC 3.0でテストされており、以前のバージョンでは動作しない場合があります。

上記の手順に従って、状況に応じてjellyfinユーザーをビデオまたはレンダーグループに追加します。

  1. GPUをコンテナーに追加します。
$ lxc構成デバイスの追加 gpu gpu gid = <gid de su video o grupo de renderización;
  1. コンテナ内にカードがあることを確認してください:
$ lxc exec jellyfin-ls -l / dev / dritotal 0crw-rw ---- 1ルートビデオ226、0 Jun 4 02:13 card0crw-rw ---- 1ルートビデオ226、0 Jun 4 02:13 controlD64crw -rw ---- 1ルートビデオ226、128 Jun 4 02:13 renderD128
  1. デフォルトのオプションが間違っている場合は、ビデオアクセラレーションを使用して正しいデバイスを指すようにJellyfinを設定します。
  2. トランスコーディングが必要なビデオを再生して次を実行してみてください。ヒットするはずです。
$ ps aux | grep ffmpeg |グレップ・アクセル
  1. また、トランスコーディングが必要なビデオを再生してみることもできます。

役立つリソース:

Raspberry Pi 3および4

  1. Jellyfinサービスユーザーをビデオグループに追加して、エンコーダーへのJellyfin FFMpegプロセスのアクセスを許可し、Jellyfin.sudo usermod -aG video jellyfinsudo systemctl restart jellyfinを再起動します注Raspberry Pi 4を使用している場合は、sudo rpi-updateを実行する必要がありますカーネルとファームウェアの更新用。
  2. サーバーダッシュボードの[トランスコーディング]タブで、ハードウェアアクセラレーションとしてOpenMAX OMXを選択します。
  3. GPUに割り当てられたメモリの量を変更します。 GPUは、高速のデコードとエンコードを同時に処理できませんsudo nano /boot/config.txt RPi4の場合は、gpu_mem = 320の行を追加します。詳細はこちらRPi3の場合は、gpu_mem = 256の行を追加します。任意の値を設定できますが、320は数量です4K HEVCに推奨されます。 CPUとGPUメモリの分割を確認します:vcgencmd get_mem arm && vcgencmd get_mem gpu CPUクロックの温度と速度を監視します:vcgencmd measure_temp && vcgencmd measure_clock arm

RPi4は現在HWAデコードをサポートしていません。H.264HWAエンコードのみをサポートしています。アクティブ冷却が必要ですが、トランスコーディングにはパッシブ冷却では不十分です。 RPi3テストでは、ビデオのサイズが変更されていたため、トランスコーディングがリアルタイムで動作するのに十分な速さで動作していませんでした。

トランスコードの確認

適切なライブラリを使用していることを確認するには、トランスコーディングレコードに対してこのコマンドを実行します。これは、[管理ダッシュボード]> [ログ]で確認できます。リポジトリ経由の場合は、/ var / log / jellyfinでも確認できます。

grep -A2 "ストリームマッピング:/var/log/jellyfin/ffmpeg-transcode-85a68972-7129-474c-9c5d-2d9949021b44.txt

これにより、次の結果が得られました。

現在のマッピング:#0現在:0 ----; #0:0(hevc(ネイティブ)----; h264(h264_omx))現在の#0:1 ----; #0:1(aac(ネイティブ)----; mp3(libmp3lame))

#0:0ストリームは、ソフトウェアを使用してHEVCをデコードし、HWAを使用してエンコードしました。

#0:1つのストリームで同じ結果が得られました。デコードはエンコードよりも簡単なので、これらは一般的に良い結果です。 HWAデコードは進行中の作業です。

ja日本語