TrueNAS SCALEのJellyfinで緑画面・致命的エラーが発生したので調査した

IT

TrueNAS SCALE上でJellyfinを運用している環境で、Tailscale経由による外部再生を試したところ、映像が緑色になったり、「致命的なエラー」が表示されたりする症状が発生しました。

最初はCPU性能不足やIntel Quick Sync(QSV)の設定ミスを疑いましたが、実際に設定画面やログを確認していくと、当初想像していた内容とは異なる結果になりました。

この記事の結論

今回の調査では、CPU性能不足やFFmpegの異常終了は確認できませんでした。FFmpegは終了コード0で正常終了しており、CPUトランスコードも正常に開始されていました。一方で、Jellyfin側ではIntel Quick Sync(QSV)が有効になっているにもかかわらず、「追加設定が必要です」と表示されていました。現在はCPUトランスコード構成で安定して再生できています。

この記事で分かること

  • 緑画面・致命的なエラーが発生した際の切り分け方法
  • Jellyfinログ・FFmpegログの見方
  • Intel Quick Sync(QSV)設定を確認した結果
  • 最終的に安定した構成

検証環境

項目内容
OSTrueNAS SCALE 25.10.4
Jellyfin10.11.11
CPUIntel Core i5-13400
GPUIntel UHD Graphics 730(CPU内蔵)
接続方式Tailscale
クライアントAndroid版 Jellyfin 2.6.3

発生した症状

  • 映像が緑色になる
  • 「致命的なエラー」と表示される
  • 再生開始直後に停止する
  • Android版Jellyfinアプリで正常に再生できない
  • 同じ動画でも時間を置くと正常に再生できる場合がある

毎回同じ症状が発生するわけではなく、正常に再生できる場合もありました。そのため、サーバー・ネットワーク・Androidアプリのどこに原因があるのか、この時点では判断できませんでした。

まずはTrueNASの状態を確認

最初に確認したのは、TrueNAS自体の負荷です。CPU使用率やメモリ使用量を確認し、サーバーの処理能力に問題がないか調べました。

TrueNASダッシュボード

確認した時点ではCPU使用率はほぼ0%で推移しており、メモリにも十分な余裕がありました。

メモリの多くはZFSキャッシュとして利用されていましたが、これはTrueNASでは正常な動作です。

この時点では、CPU性能不足やメモリ不足が今回の症状の直接的な原因とは考えにくい状態でした。

Jellyfinのトランスコーディング設定を確認

続いてJellyfinの「トランスコーディング」設定を確認しました。

ハードウェアアクセラレーションには「Intel Quick Sync(QSV)」が選択されていました。

一方で、その直下には「ハードウェアアクセラレーションを利用するには追加設定が必要です。」というメッセージが表示されていました。

この画面だけでは原因は判断できませんが、「QSVが完全に利用できている状態ではない可能性」が考えられます。

ただし、この時点ではQSVが今回の症状の原因であるとは断定できません。

ここまでで確認できたこと

確認項目結果
CPU使用率問題なし
メモリ使用量十分余裕あり
QSV設定有効
追加設定が必要という表示あり
現時点で原因は判明したかまだ判明していない

ここまでの調査では、サーバー性能不足が原因とは考えにくいこと、そしてQSV設定について気になる点があることまでは確認できました。

次は実際のJellyfinログとFFmpegログを確認し、サーバー内部でどのような処理が行われていたのかを調査します。

JellyfinログとFFmpegログを確認する

ここまでの調査では、TrueNAS自体の負荷は低く、CPUやメモリ不足が原因とは考えにくいことが分かりました。また、JellyfinではIntel Quick Sync(QSV)が有効になっている一方、「追加設定が必要です」というメッセージも表示されていました。

しかし、設定画面だけでは原因は判断できません。そこで次は、実際にJellyfinとFFmpegのログを確認し、サーバー内部で何が起きていたのかを調査しました。

Jellyfinログを確認

まずJellyfinログを確認したところ、動画再生開始直後に再生が停止していることが分かりました。

[INF] Playback stopped reported by app Jellyfin Android
playing 0

さらに、ユーザーの再生ポリシーとして次の内容も記録されていました。

EnablePlaybackRemuxing: True
EnableVideoPlaybackTranscoding: True
EnableAudioPlaybackTranscoding: True

Remux・動画トランスコード・音声トランスコードはいずれも許可されており、設定によって再生が制限されている状態ではありませんでした。

WebSocket切断も記録されていた

ログには次のようなメッセージも記録されていました。

WebSocketConnection:
The remote party closed the WebSocket connection
without completing the close handshake.

WebSocket接続が切断されていることは確認できました。しかし、このログだけでは「WebSocket切断が原因で再生できなかった」のか、「再生停止の結果として切断された」のかは判断できません。

そこで、さらにFFmpegログを確認しました。

FFmpegログを確認

まず確認できたのは、Remux処理を実行しているログです。

-codec:v copy
-codec:a copy
-f hls
-hls_segment_type fmp4

この設定では映像・音声ともにコピーされるため、動画を再エンコードするのではなく、コンテナ形式のみを変換しています。

そしてログの最後には次のメッセージが記録されていました。

FFmpeg exited with code 0

終了コード0は、FFmpegが正常終了したことを意味します。

つまり、この時点ではFFmpeg自体がクラッシュして動画再生に失敗したわけではありませんでした。

CPUトランスコードも正常に開始していた

Intel Quick Sync(QSV)を無効化したあとに取得したログでは、CPUによるソフトウェアトランスコードも確認できました。

-codec:v libx264
-preset veryfast
-crf 23
-pix_fmt yuv420p
-codec:a copy

このログから、CPUによるH.264エンコードは正常に開始されていることが分かります。

つまり、「CPUトランスコードが開始できず再生できなかった」という状況ではありませんでした。

FFmpegはエラー終了していなかった

さらにログを追っていくと、FFmpegはエラーによって停止したのではなく、Jellyfinから停止指示を受けて終了していました。

Stopping ffmpeg process with q

FFmpeg exited with code 0

Deleting partial stream file(s)

Playback stopped reported by app
Jellyfin Android

このことから、FFmpegは正常に動作しており、Android版Jellyfinアプリ側から再生停止が通知されていたことが確認できました。

ログから確認できたこと

確認項目結果
Remux処理正常開始
CPUトランスコード正常開始
FFmpeg終了コード0で正常終了
WebSocket切断は確認できたが原因は不明
Android版Jellyfin再生停止通知を送信していた

ここまでで分かったこと

今回取得したログを見る限り、FFmpegがクラッシュした形跡は確認できませんでした。また、CPUによるトランスコードも正常に開始されていました。そのため、この時点では「サーバー側の動画変換処理が原因で再生できなかった」と断定できる状況ではありませんでした。

では、実際にもう一度同じ動画を再生するとどうなるのでしょうか。次は社宅側から改めて再生テストを実施し、そのときのCPU使用率や動作状況を確認します。

もう一度同じ動画を再生してみる

ログを確認したあと、症状が発生していた同じ動画を社宅側から改めて再生してみました。

すると、それまで表示されていた緑画面や「致命的なエラー」は発生せず、動画は正常に再生できました。

なぜ正常に再生できるようになったのかは、この時点では分かりません。しかし、再生中のTrueNASの状態を確認することで、いくつか新しい事実を確認できました。

CPU使用率を確認

動画再生中のCPU使用率を確認したところ、使用率は最大でも約4%程度でした。

CPUトランスコードを利用している状態でも負荷は非常に低く、CPU性能不足によって動画再生が停止している状況ではありませんでした。

また、メモリ使用量にも大きな変化はなく、サーバー全体としては余裕を持って動作していました。

現在の構成

項目設定内容
ハードウェアアクセラレーションなし(CPUトランスコード)
動画トランスコードlibx264
画質自動
実効ビットレート約8Mbps
接続方式Tailscale
再生端末Android版 Jellyfin 2.6.3

現在はこの構成で問題なく動画を再生できています。

今回の調査で確認できたこと

確認項目結果
CPU使用率動画再生中も約4%程度
メモリ使用量十分な余裕あり
FFmpeg終了コード0で正常終了
CPUトランスコード正常開始
Android版Jellyfin再生停止通知を送信していた
再テスト同じ動画を正常再生できた

今回の調査で分からなかったこと

重要

今回の検証では、「緑画面」や「致命的なエラー」が発生した直接の原因を特定することはできませんでした。

  • 緑画面が発生した直接の原因
  • 「致命的なエラー」が表示された直接の原因
  • Intel Quick Sync(QSV)の設定がどこまで影響していたのか
  • Android版Jellyfinアプリ固有の問題だったのか
  • 通信状況が影響していたのか

同じ症状が発生した場合の確認ポイント

  • TrueNASのCPU使用率・メモリ使用量を確認する。
  • Jellyfinのトランスコーディング設定を確認する。
  • Jellyfinログを確認する。
  • FFmpegログを確認し、「FFmpeg exited with code 0」なのか、エラー終了なのかを確認する。
  • Androidアプリだけでなく、ブラウザからも再生を試してみる。
  • 別のネットワーク環境でも再現するか確認する。

まとめ

今回の調査では、当初疑っていたCPU性能不足やFFmpegの異常終了は確認できませんでした。ログを確認した結果、FFmpegは終了コード0で正常終了しており、CPUによるトランスコードも正常に開始されていました。

また、JellyfinではIntel Quick Sync(QSV)が有効になっていたものの、「追加設定が必要です」というメッセージも表示されていました。ただし、この設定が今回の症状に直接関係していたかどうかは判断できません。

再テストでは同じ動画を正常に再生できたことから、少なくとも今回取得した情報だけでは原因を一つに絞ることはできませんでした。

技術的なトラブルでは、最初に思い付いた原因だけを追いかけるのではなく、ログやサーバーの状態を一つずつ確認しながら切り分けることが重要だと改めて感じました。

この記事が、TrueNAS SCALEやJellyfinで同じような症状に悩んでいる方の調査や切り分けの参考になれば幸いです。

コメント

タイトルとURLをコピーしました