見出し画像

テレビ録画メディアサーバー構築入門(第19回)

トラブルシューティング

サーバークラッシュ

サーバーとしてlinuxを使用していて、こんなことが起きるのは珍しいため驚いたのだが、カーネルパニックによる機能停止を経験した。

サーバー側で録画中のときに、スマホやFire TV(アンドロイド端末)にてJellyfinクライエント(専用、またはweb)を利用中に生じる。

原因をさぐると、BCASカードリーダーとIntel内蔵Wifiドライバ (iwlmvm)の干渉らしく、OSレベルのバグらしい。

対策として、サーバーのネット接続方法をWi-Fiから有線イーサネット接続に変更したら問題は解消した。

error: TSDecoder#数字 unexpected dead

Mirakurunのlogにみられる深刻なエラーで、BCASカードが正常に刺さっていない場合にみられる。が、チューナー側の不具合によって生じる場合もある。(カードリーダーへの電力供給不足による。ソフトウェア的に対処可能だが法的問題あり。第3回参照。)

この記事で非推奨としたPX-Q1UDを使っていると、内蔵4チューナーのうちのどれかの不具合により録画が失敗することがある。失敗率の高いチューナーは番号(/dev/dvb/adapter数字)を特定してmirakurunの設定から外す。いつも失敗するわけではなく、しばらく使っていると不安定になりだす「心配な」チューナーについては、優先度を下げて、複数番組同時録画の際の予備役助っ人として運用するのだが、よくわからない理由により、このエラーTSDecoder#. unexpected dead が出て使用不能になる。そのまま放置すると、すべてのチューナーが使用不能に陥ることがある。こうなるともうどうしようもないので、cronで 以下のchkerr.shを走らせることにした。

crontab -l
* * * * * $HOME/chkerr.sh >> /dev/null 2>&1
cat chkerr.sh
#!/bin/bash

# 変数設定
LOG_PATTERN="error"
NTFY_URL="https://fearow22.taile153a7.ts.net/PX-S1UD"
LOGURL="http://100.x.y.z:40772/api/log"

# ログ出力を取得
OUTPUT=$(curl $LOGURL 2>/dev/null | grep -i "$LOG_PATTERN")
echo $OUTPUT
# エラーが見つかった場合のみ curl を実行
if [ -n "$OUTPUT" ]; then
    curl -H "X-Priority: 4" -d "ERROR:  $OUTPUT" $NTFY_URL
fi

通知用NTFY_URL:


ドロップエラー

(PX-Q1UDの場合)経験的に、使用不能になる前に、予兆として、録画結果にドロップ(データ欠損)が確認できるようになる。これを検知して、通知することで、ドロップしはじめたらすぐ手動でUSBを抜き差しをすれば、とりあえず問題は解決する。

現行版Mirakurun 4.0.0-betaではドロップ数を表示してくれるが、apiとして取得する方法は提供されていないようです。EPGStationにも、過去にはドロップ情報をしめす機能があったような気もするが現行版v2.10.0には実装されていないようです。

なので、録画動画を処理する前のタイミングで ffmpeg でエラーチェックしてntfyで通知するスクリプトを使うことにした。

takya@fearow22:~/work$ cat chkdrp.sh
#!/bin/bash

LOGFILE="/tmp/chkdrp.log"
LOG_PATTERN="error"
NTFY_URL="https://fearow22.taile153a7.ts.net/PX-S1UD"
#LOCKFILE="/tmp/encode.lock"
## ロックファイルが既存の場合は終了
#if [ -f "$LOCKFILE" ]; then
#    echo "encode.sh is already running. Exiting."
#    exit 1
#fi
#touch $LOCKFILE

ffmpeg -v error -i "$1" -f null - 2> $LOGFILE
OUTPUT=$( grep "$LOG_PATTERN" $LOGFILE|tail)
#OUTPUT=$( grep -i "$LOG_PATTERN" $LOGFILE|tail)

if [ -n "$OUTPUT" ]; then
    echo "ERROR: DROP $1 $OUTPUT"
    curl -H "X-Priority: 4" -d "ERROR: DROP $1 $OUTPUT" $NTFY_URL
fi

ffmpeg -v warning -i "$1" -f null - 2> $LOGFILE
OUTPUT=$( grep -Eq "non[- ]monotone|Invalid DTS|invalid PTS|corrupt|Packet corrupt|timestamp" $LOGFILE|tail)
if [ -n "$OUTPUT" ]; then
    echo "ERROR: CORRUPT $1 $OUTPUT"
    curl -H "X-Priority: 4" -d "ERROR: CORRUPT $1 $OUTPUT" $NTFY_URL
    exit 1
fi

## lockfile を削除
#rm -f $LOCKFILE



enc01.shのtsreadex行の直前に、以下1行を追記する:

$WORKDIR/chkdrp.sh "$FILE" #エラーチェック                              

(追記:2連PX-S1UDで同症状確認。ハードウェア的な理由によるもので、mirakurunでは検知できず、rebootで解決しないケースあり。いったん電源を落とすと解決する。遠隔地に置き去りのサーバーの場合どうする!?→重要課題)

熱暴走

ハードウェアエンコード(第16回)を試す前に、熱暴走らしきクラッシュを経験した。対策として、enc0.sh, enc1.shの ffmpegのOPTION に -threads (数字)を追加して使用スレッド数を制限した。処理速度が落ちるので、encode.shの変数speedを小さくする。

どう変更すべきかは、PCの性能によります。

スレッド数(論理コア)は コマンド nproc で確認できます。

使うスレッドを半分にして、エンコード速度がどのくらい遅くなるかを確認する、など。

夏場はUSBファンを使うことにした。

PCのCPUのみならず、チューナーも熱を帯びます。休みなく録画し続けると不安定化要因となる(ライトな使用法では問題ない)。

索引

自分でも何をどこに書いたかわからなくなってきたので、今後の作業用に各回の概要をまとめておくことにした。

第1回:はじめに。準備が必要なもの


第2回:Ubuntu OS インストール。はじめてのlinux。

新PCが使えるようになる


第3回:デバイス認識。EPGStation, Mirakurunインストール

テレビ録画できるようになる


第4回:AviSynth, chapter_exe, logoframe, join_logo_scp, ffmpeg


第5回:CMカット。ロゴファイル作成


第6回:作業フォルダ、メディアフォルダ。Jellyfin インストール

とりあえず視聴環境が整う


第7回:処理済み判定、自動フォルダ整理


第8回:空き時間に自動編集処理


第9回:録画ルール設定、処理済み動画を自動削除


第10回:スマホに自動通知


第11回:使用雑感。不具合対策。再起動方法


第12回:外部データベース連携。TMDB登録方法


第13回:新ライブラリ「映画」追加


第14回:ダッシュボード(ホームページ)


第15回:ネットダウンローダー


第16回:ハードウェアアクセラレーション


第17回:スマートテレビ


第18回:外部ストレージ増設





いいなと思ったら応援しよう!

ピックアップされています

全自動TV録画 視聴環境構築

  • 26本

コメント

コメントするには、 ログイン または 会員登録 をお願いします。
予約録画、カット編集、番組整理を全自動化し、複数デバイスで手軽に視聴可能な、自分だけのメディアサーバーを、ゼロから作り上げる過程の全記録。誰でもたどれるよう必要なすべてを書き残す。https://github.com/takyaO/epg2jelly/
テレビ録画メディアサーバー構築入門(第19回) |takya
word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word word

mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1
mmMwWLliI0fiflO&1