ラズパイ４を使った地上波録画サーバーを作る　後編(docker-dvb版)


初版：2021/10/2
更新：2022/5/24

[メンテ＆トラブルシューティング](1e439b7cc10822f5ef69)
　∟ [定時診断スクリプト](02a6ea83a1169cd00153)
[前編](614c3973cc7d1439865e)
　１．ラズパイとサーバーの概要
　２．録画に必要なものを集める、購入する
　３．OSのインストールとセットアップ
　４．NASの構築
● 後編(docker-dvb版) now!
[後編(docker-px4_drv版)](6805564d57860a93169a)
　５．チューナードライバの導入
　６．docker-mirakurun-epgstationの導入
[後編(非docker版)](3bf7e152fbf73c5ca25e)
　５．チューナーの導入、テスト録画
　６．運用のためのツール、mirakurun、epgstation
[運用実践編](dc099b2f1ab39dad07f7)
　７．録画管理方法
　８．エンコードと再生
　９．システムバックアップ
番外．[まとめ版](0ea0f2ee3cfe5cb8e31e)
番外．[Mirakurunのチャンネル手動設定](28e360d8f678159059e8)
番外．[ラズパイ用ケース作成](237fedc55ac79c9d5723)

環境構築2回目以降とかコマンドうろ覚えとかの方は[まとめ版](0ea0f2ee3cfe5cb8e31e)の方がいいかもです。運用開始したけど何らかのトラブルに見舞われた方は[メンテ＆トラブルシューティング](1e439b7cc10822f5ef69)を参照するといいかもです。
S1UD(USB,1チューナー),Q1UD(USB,4チューナー)以外の多くのPlexチューナーを使う場合はpx4_drv版を参照ください。

## ５．チューナードライバの導入

ここからチューナー関連の設定を行っていく。
・チューナーのドライバを導入
・カードリーダーでB-Casカードを読めるようにする
・カードを使って地上波複合化を行えるようにする
・録画コマンドをインストール＆録画テストする
・録画を管理するツールを入れる
・他のマシンのブラウザから管理できるようにする
といった流れになります。

#### チューナー(PX-S1UD、PX-Q1UD)のドライバを導入する
PlexのPX-S1UDやQ1UDは非公式ドライバpx4_drvは非対応です

```ドライバのインストール.
wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip : 'ダウンロード'
unzip PX-S1UD_driver_Ver.1.0.1.zip : '解凍'
sudo cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/ : 'ファームウェアのフォルダにコピー'
```
PX-S1UD用ですが、Q1UDも共通。ドライバのアップデートはたぶんない？

もしくは ↓ のコマンドで入れているサイトもあったような。詳細忘れた
sudo apt-get install -y firmware-siano

#### docker版とは
この後出てくるMirakurunとEPGStationは通常版と仮想化技術を利用しているdocker版とあり、ここから分岐する。EPGStation作者が今後docker版メインにするとのことで、可能ならdocker版にしておきたい。メリットはライブラリ等のバージョン依存を受けにくいこと。デメリットは内部で何をやっているのかわかりにくいこと。

## ６．docker-mirakurun-epgstationの導入

チューナーのドライバ導入までは終わっている前提で進めます。ここからの工程としては、
（・チューナーのドライバを導入：済）
・dockerを入れる
　∟dockerパッケージ導入
　∟python-pipおよび関連パッケージ導入
　　(将来arm用composeバイナリが配布されたら不要に？)
　∟docker-composeパッケージ導入
・mirakurun-epgstation-docker導入
＊なぜかカードリーダー導入、復号化、録画コマンド導入プロセスはないです。mirakurunepgstationで一緒に入るということでしょうか？
＊なおdocker版でSoftCASを入れている人もいるようですが多分難しいか面倒くさいです(私はやったことない)。

ここら辺にそれぞれのコマンドを書いていく。

```dockerの設定.
dockerパッケージインストール
curl -sSL https://get.docker.com | sh

バージョンの確認
docker -v

権限の追加
sudo usermod -a -G docker $USER

python-pipおよび関連パッケージ導入
　(今後、composeバイナリなどの状況でここら辺は変わるかもしれない)
sudo apt install -y libffi-dev libssl-dev python3 python3-pip python3-dev

docker-composeパッケージインストール
sudo pip3 install docker-compose

docker-composeのバージョン確認
docker-compose -v
```
mirakurun-epgstation導入前に一度再起動が必要？

```mirakurun-epgstation-dockerの導入.
先にgitをインストールする必要あり？
sudo apt install -y git
インストールスクリプト
curl -sf https://raw.githubusercontent.com/l3tnun/docker-mirakurun-epgstation/v2/setup.sh | sh -s

ディレクトリ移動してから起動。初回は時間がかかるので注意。
cd docker-mirakurun-epgstation
sudo docker-compose up -d

OS起動時のスタートアップ設定は特に行う必要はない。

停止する場合。もちろんディレクトリ移動してから。
sudo docker-compose down
移動せず1行で行う
cd docker-mirakurun-epgstation; sudo docker-compose down; cd ~
```

```録画したファイルの保存場所.
nano docker-mirakurun-epgstation/docker-compose.yml
　なお、GUIでテキストエディタで開いて編集してもよい。
編集する場所は、epgstation>volumes>recordedの部分について、
- ＜録画ファイルを置くフルパス＞:/app/recorded　にする。
mirakurun-epgstationかPi自体を再起動で変更適用。
例：　- /home/pi/rec/recorded:/app/recorded
通常版とは異なるので注意すること。
なお、理由はわからないが、_から始まるフォルダ名を指定すると録画できない現象が発生したので注意。
変更を適用するには、mirakurun-epgstationかPi自体を再起動する。
```

一方、保存ファイル名(デフォルト)については通常版と考え方は同じ。

```保存ファイル名、他各種設定.
nano docker-mirakurun-epgstation/epgstation/config/config.yml
　なお、GUIでテキストエディタで開いて編集してもよい。
書き換える場所は、recordedformat:の部分。まぁこれは見てわかるでしょう。

チューナー設定
docker版では基本自動的に設定してくれるのでいじる必要はない。もし変える必要があるなら、mirakurunのuiから、もしくはtuners.ymlを編集する。
sudo nano docker-mirakurun-epgstation/mirakurun/conf/tuners.yml

チャンネル設定については、スキャンする方法と手動で設定する方法がある。個人的には、できるなら手動で設定した方が早く確実だと思ってしまう。

チャンネルをスキャンする.
curl -X PUT "http://localhost:40772/api/config/channels/scan"
: '40772はmirakurunのデフォルトのポート'

なお、物理チャンネルとは名前の通り内部で認識している周波数域？のこと。テレビのリモコンとは異なるので注意。
＜例＞リモコン、放送局、物理チャンネル
1　RAB　　28
2　NHKE　13
3　NHKG　16
5　ABA　　32
6　ATV　　30
＊青森県にはフジ系はありません。県南でめんこい、下北海沿いと津軽半島北部で北海道文化放送、深浦岩崎で秋田テレビが受信できるとのことだが。

sudo nano docker-mirakurun-epgstation/mirakurun/conf/channels.yml
docker-mi～フォルダ上で実行する場合
sudo nano mirakurun/conf/channels.yml
```

```設定例：channels.yml　(津軽地方)
- name: NHKEテレ
  type: GR
  channel: '13'
- name: NHK総合
  type: GR
  channel: '16'
- name: RAB青森放送
  type: GR
  channel: '28'
- name: ATV青森テレビ
  type: GR
  channel: '30'
- name: ABA青森朝日放送
  type: GR
  channel: '32'
```

#### Mirakurunのチューナー設定

基本的に自動的に設定はしてくれるが、一応その中身の一例を書いておく。

```tuners.ymlの一例.
- name: adapter0
  types:
    - GR
  dvbDevicePath: /dev/dvb/adapter0/dvr0
  decoder: arib-b25-stream-test
  command: >-
    dvbv5-zap -a 0 -c ./config/dvbconf-for-isdb/conf/dvbv5_channels_isdbt.conf
    -r -P <channel>
- name: adapter1
  types:
    - GR
  dvbDevicePath: /dev/dvb/adapter1/dvr0
  decoder: arib-b25-stream-test
  command: >-
    dvbv5-zap -a 1 -c ./config/dvbconf-for-isdb/conf/dvbv5_channels_isdbt.conf
    -r -P <channel>
- name: adapter2
  types:
    - GR
  dvbDevicePath: /dev/dvb/adapter2/dvr0
  decoder: arib-b25-stream-test
  command: >-
    dvbv5-zap -a 2 -c ./config/dvbconf-for-isdb/conf/dvbv5_channels_isdbt.conf
    -r -P <channel>
- name: adapter3
  types:
    - GR
  dvbDevicePath: /dev/dvb/adapter3/dvr0
  decoder: arib-b25-stream-test
  command: >-
    dvbv5-zap -a 3 -c ./config/dvbconf-for-isdb/conf/dvbv5_channels_isdbt.conf
    -r -P <channel>
```

余談。
```dockerの起動と停止.
各dockerインストールフォルダへ移動して、
停止
sudo docker-compose down
起動
sudo docker-compose up -d
再起動
sudo docker-compose restart
1行の場合
停止
cd docker-mirakurun-epgstation; sudo docker-compose down; cd ~
起動
cd docker-mirakurun-epgstation; sudo docker-compose up -d; cd ~
再起動
cd docker-mirakurun-epgstation; sudo docker-compose restart; cd ~
```

##### 信号の強さの計測例
recdvbが1.3.3以上(あるいはパッチ済み)を前提とします。
～USB接続で地デジ4チャンネル録画できるチューナーPX-Q1UDを略～さんによると。
CNRが20以上？、ERRBLKが0、SIGの値がある程度小さい(-45くらい？まで下がっている)と大丈夫っぽい？。
スクリプト等は[メンテ＆トラブルシューティング](1e439b7cc10822f5ef69)の方を参照を勧めます。

#### 録画時のトラブル
運用を行っていくと、なぜか録画が行われないといったトラブルに見舞われることがある。そんな時どこをチェックするか。
・recdvbを試してみる。問題がなければmirakurunやepgstationなどに何らかの原因？
・mirakurunの状況を確認(http://192.168.1.**:40772/ )。
・pidが増え続けている場合はチューナーの動作不良？OS再起動すれば多分大丈夫。
この辺りはトラブルシューティングを参照。

##### 補助電源忘れずに
環境作成時に外していたQ1UDの補助電源を付けておく

次の章はこちら→[運用実践編](dc099b2f1ab39dad07f7)
[後編(docker-px4_drv版)](6805564d57860a93169a)
[後編(非docker版)](3bf7e152fbf73c5ca25e)

--------------------------------
以下はメモ。そのうち消します

EPGの更新間隔を伸ばす
（詳しくはそのうち書く）Mirakurunの標準値は古くは15分に一度、現在も1時間に一度？EPGを更新する。Mirakurunの情報はEPGStationが吸い上げているっぽい。
以前のバージョンでは確かにEPGの更新がかかると場合によってはその間録画が失敗することもあった。ただし最近少なくともMirakurun3.8以降ではEPG更新中でも録画等は問題ない模様。なお、EPGの更新はMirakurun起動時(=OSの再起動時ももちろん含む)にもかかる。

```更新間隔変更。Mirakurun3.9以降？はGUIでもできそう。下記は24時間間隔。.
nano /usr/local/etc/mirakurun/server.yml
下記をファイルの最後に追記
programGCInterval: 86400000
epgGatheringInterval: 864000000
```

####Mirakurun互換
mirakcというのがあるようです。CPU使用率が少ない？情報は少なめ？。