ラズパイ4テレビチューナーの設定
Raspberry Pi 4を使ってNAS兼テレビチューナーを作成したのがコチラ。Dockerを使わずにOpenMediaVault + Mirakurun + EPGStation をそれぞれインストールしています。
実際に運用して細かいところで設定を変えているので自分用メモをかねて書いてみます。ご自身の環境に合わせて適応してください。
SSD接続安定化
録画先をUSB3.0接続の2.5インチSSDにしていた時期に『録画予約は正しく開始されるけど録画が最後まででされない状態』になったことがありました。最初の15分くらい録画されていきなり終了。どうやらUASPというUSB接続されたHDDなどと高速通信するためのプロトコルが悪さをしていることがわかったので解除します。
// 対象デバイスのID確認
$ lsusb
// 対象デバイスのDriverを確認
$ lsusb -t
// 対象デバイスのUASPを無効にするためにbootファイルを編集
$ sudo nano /boot/firmware/cmdline.txt
ウチのラズパイで実行するとこんな感じ。
USB3.0に接続しているSSDのIDは我が家の場合”174c:55aa”でDriver=uasとなっていることが確認できます。cmdline.txtを開くと1行でイロイロ書いてあるので改行せず末尾に
usb-storage.quirks=174c:55aa:u
と追記します。IDはlsusbで表示されたご自身のデバイスのIDを記載してください。再起動してUASPが無効になっているか確認します。
$ sudo reboot
$ lsusb -t
対象デバイスがDriver=usb-storageになっていればokです。UASP無効で理論値若干遅くなりますが実際のところSSDの高速さは失われないので我が家では問題なく運用できています。
Bluetoothの無効化
録画サーバーのみで使用ならBluetoothはオフにしておいてもよいかと。常時起動しておくと電気が無駄になるのでOFFにします。
$ sudo nano /boot/firmware/config.txt
// 最後に以下を追記
dtoverlay=disable-bt
再起動後にBluetoothがオフになります。bootファイルに記載しているので再起動しようとも以降ずっとオフのままです。
WiFiの無効化
有線LANのみで接続してるなら同様に電気の無駄なのでオフにします。
// WiFiをオフ(無効化)
$ sudo iwconfig wlan0 txpower off
// WiFiをオン(有効化)
$ sudo iwconfig wlan0 txpower auto
こちら実行後すぐに設定が反映されます。再起動は不要です。bootファイルを編集したわけではありませんが再起動しても設定は維持されます。
SDカードの保護
我が家のラズパイは起動ディスクはSDカード、NASと録画先は外付けHDDで運用しています。OMVが起動ディスク兼共有ドライブをサポートしていない(パーティションいじっても素直にいかない)のでSDカードを使い続ける予定ですが書き込み頻度が多すぎて壊れたって話がちらほら。なのでSDカードへの書き込みを抑制します。
ラズパイのSDカードSWAP無効化
スワップを無効にします。
// swapサイズの確認
$ free
// Swapを無効化
$ sudo swapoff --all && sudo apt remove dphys-swapfile -y
// 確認、Swapのtotalが0ならok
$ free
ラズパイのログを抑制
ログの対象を減らします。RULESを探し、#cron以降をコメントアウトします。2024.02にはデフォルトでコメントアウトされていました。
$ sudo nano /etc/rsyslog.conf
//RULESを編集する
###############
#### RULES ####
###############
#
# First some standard log files. Log by facility.
#
auth,authpriv.* /var/log/auth.log
*.*;auth,authpriv.none -/var/log/syslog
#cron.* /var/log/cron.log
#daemon.* -/var/log/daemon.log
#kern.* -/var/log/kern.log
#lpr.* -/var/log/lpr.log
#mail.* -/var/log/mail.log
#user.* -/var/log/user.log
nanoなのでCtrl+sで上書き保存、Ctrl+xで終了です。
Mirakurunのログを抑制
Mirakurunってログがすごい多いので、ここでは定番の毎日ログを圧縮して1週間保存するように設定します。
//nanoでログ設定ファイルを開く
$ sudo nano /etc/logrotate.d/mirakurun
空っぽなので以下を記入します。
/usr/local/var/log/mirakurun.stdout.log
/usr/local/var/log/mirakurun.stderr.log
{
daily
compress
rotate 7
missingok
notifempty
}
同様にCtrl+sで上書き保存、Ctrl+xで終了です。
もしくはログを全くださなようにします。
$ sudo nano /usr/local/etc/mirakurun/server.yml
で設定ファイルを開いたら、
# logLevel: <number>
logLevel: -2
# path: <string>
path: /var/run/mirakurun.sock
# port: <number>
# You can change this if port conflicted.
# Don't expose this port on the internet, not even with NAPT.
# Use this in LAN or VPN.
# `~` to disable TCP port listening.
port: 40772
とログレベルを-2にしておきます。
Mirakurunのチャンネル設定
チャンネルスキャンで自動的に設定されるのですが明示的に示さないと抜けることがあるという情報がちらほら。地デジはお住まいの地域によりますが衛星放送はGitHubの内容をchannels.ymlにコピペするとフルコースです。
$ sudo nano /usr/local/etc/mirakurun/channels.yml
Mirakurunがチャンネルを認識するまでに時間がかかるので設定ファイルを編集して再起動してもすぐには表示されません。1時間くらい待ってすべてのチャンネルが表示されるようになります。
普段見ないチャンネルまでEPGStationの番組表に表示されるとみづらくなりますがMirakurunから非表示にできます。Config ⇒ Channelsから不要なチャンネルを非表示にすると番組表がスッキリします。
ストリーミングのエンコードオプションの追加
この設定でできるハズなのですが我が家ではエラー(ストリーミングが始まらない)で確認できていません。参考までに記載しておきます。
デフォルトだとEPGStationのブラウザ内mp4は740pと480pしかありません。ラズパイのcpuスペックだとエンコード速度が1以下となり、リアルタイム視聴ではちょっと再生して止まってを繰り返します。全然実用じゃないのでハードウェアエンコードのh264_omxを追加します。
まずはh264_omxを有効にします。
echo 'SUBSYSTEM=="vchiq",GROUP="video",MODE="0666"' | sudo tee /etc/udev/rules.d/10-vchiq-permissions.rules
EPGStation/config/config.ymlを編集します。
// pathは我が家の例
$ sudo nano ./EPGStation/config/config.yml
// stream: live: ts: mp4に以下を追加
- name: h264_omx
cmd:
'%FFMPEG% -re -i pipe:0 -threads 0 -c:a copy -bsf:a aac_adtstoasc -c:v h264_omx -vb 3000k -movflags frag_keyframe+empty_moov+faststart+default_base_moof -y -f mp4 pipe:1'
ラズパイ4のハードウェアエンコーダーh246_omxを使うように指定します。
$ sudo nano ./EPGStation/config/enc.js
// 14 行目あたりの const codec = 'libx264' を h264_omx に変更
const codec = 'h264_omx';
// その他設定の直前にビットレートの指定を追加
Array.prototype.push.apply(args, ['-b:v', '3000k']);
録画ファイルの再生ソフトを変更
スマホの場合、録画したTSファイルはデフォルトだと強制的にMXPlayerで再生されるのでVLCに変更しました。
// pathは環境で変わるので見つからなければfindする
$ sudo nano ./EPGStation/config/config.yml
//urlscheme:のm2tsとvideoを以下書換え
ios: vlc-x-callback://x-callback- url/play?url=PROTOCOL:// ADDRESS
android: intent://ADDRESS#Intent;package=org.videolan.vlc;type=video;scheme=PROTOCOL;end
毎週再起動
常時電源オンでほっとんどノートラブルで運用できているのですが、体感3週間超えたあたりから録画が途中で終了、m2ts ⇒ mp4変換のコマ飛びやエラーがみられるので1週間に1度自動で再起動するように設定します。毎日再起動ならsystemdをいじるのがよさそうですが週イチだとcronになります。
$ systemctl status cron.service
でactive (running) であることを確認したら、
$ sudo crontab -e
でnanoでもvimでもお好きなものを選択して、例えば火曜日の午前4時なら
0 4 * * 2 /sbin/reboot
と記載します。記述ルールは「分 時 日 月 曜日 <実行コマンド>」です。例えば毎週月曜日午後2時半なら
30 14 * * mon /sbin/reboot
となります。曜日は0から7(0と7が日曜日)もしくはsunからsatで指定できます。最後の行に記載すればokです。
$ sudo crontab -l
でちゃんと追記されていればあとは勝手に再起動してくれます。
コメント