12
11

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

Last updated at Posted at 2020-08-20

初版:2020/8/20
更新:2021/12/17

メンテ&トラブルシューティング
 ∟ 定時診断スクリプト
前編
 1.ラズパイとサーバーの概要
 2.録画に必要なものを集める、購入する
 3.OSのインストールとセットアップ
 4.NASの構築
後編(docker-dvb版)
後編(docker-px4_drv版)
 5.チューナードライバの導入
 6.docker-mirakurun-epgstationの導入
● 後編(非docker版)
 5.チューナーの導入、テスト録画
 6.運用のためのツール、mirakurun、epgstation
運用実践編
 7.録画管理方法
 8.エンコードと再生
 9.システムバックアップ
番外.まとめ版
番外.Mirakurunのチャンネル手動設定
番外.ラズパイ用ケース作成

前編に引き続き、テキトーに書いていきます。
適宜修正予定

5.チューナーの導入、テスト録画

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

チューナーのドライバを導入する

入れなくてもデバイスは認識にしているように見えるが、入れないと録画はできないようだ。

ドライバのインストール.
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も共通。ドライバのアップデートはたぶんない?なお、ここではQ1UDを使うので該当しないが、PLEXのチューナーによっては非公式チューナーが一般に使われるものもあるとのこと。

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

以下、MirakurunやEPGStationは通常版を使う場合

この後出てくるMirakurunとEPGStationは通常版と仮想化技術を利用しているdocker版とあり、ここから分岐する。EPGStation作者が今後docker版メインにするとのことで、可能ならdocker版にした方がいいのかもしれない? が、ここでは旧来の、docker使わない版を書いていきます。

B-CASカードを読めるようにする。SoftCASでもたぶん必要

カード使用のため.
sudo apt-get install -y build-essential git pcscd libpcsclite-dev libccid pcsc-tools

essentialが必要かどうかはわからないが、これを入れればカードを読み込める。読み込めているかの確認は、

カード確認.
pcsc_scan

これを実行して、"Japanese Chijou Digital B-CAS Card (pay TV)" といった感じのを含んで出てくればOKとのこと。読み込み続けるため、Ctrl+Cで停止する必要がある。(softcasで動作している場合はエラーになる)

地上波複合化を行えるようにする

日本はなぜか地上波放送にも一律に暗号化が行われ、謎の企業B-CASのカードで複合化する必要がある。で、そのライブラリを導入する。softcasの場合でも必要。

libarib25.
sudo apt-get install -y cmake g++ : 'コンパイルのためのパッケージ導入'
git clone https://github.com/stz2012/libarib25.git : 'ダウンロード'
(*アーカイブ場所→https://github.com/stz2012/libarib25/archive/master.zip)
cd libarib25 : 'カレントフォルダをダウンロードしたフォルダに移動'
(*softcas使用で下記の方法2の場合ここで編集)
cmake .
make
sudo make install : 'ビルドしたファイルをインストールする'
cd ~ : 'カレントフォルダを戻す(次何かのコマンドを打つ時のため)'

最後の更新が2016年?とかなのでもう更新ないのでは?

SoftCAS使う?使わない?

違法性は抜き、有料番組の不正視聴録画×でCASも持っているという前提で、利便性の観点です。
○ 省スペース、USBポートが一つ空く
 個人的に思う最大のメリット
× 無線LANだと特に面倒。有料番組ではそのたび更新必要
 地上波のみならあまり問題にならないかも
△ 安定性が悪いという5chの書き込みがある。本当かは不明
△ アップデートしたから?なぜかうまく動かなくなることがある。まぁ非正規の方法なのでリスクを覚悟or突破できる人向けということかもしれません。
カツカツじゃなかったら真面目にCASつないだ方がいいかも?

今日はこんなところで、おやすみなさい...

/usr/lib/arm-linux-gnueabihf/libpcsclite.soというファイルがCASの複合化を行っている。通常はこれがカードリーダーにアクセスしている?のだが、softcasのlibpcsclite.soに置き換えるとリーダーなしで複合化できる。なお余談だがWin版softcasではwinscard.dllを置き換えることで可能になる、詳しくは適当にググってね。
なお、libpcsclite.soがwifiにも関係しているのかよくわからないが、そのまま置き換えてしまうとwifiが(そのpiで)使えなくなるとのこと。piは有線のみならそのまま置き換えの方法(1)でいいでしょう。wifiが使えた方がいい場合はsoftcas版libpcsclite.soを置いて復号化のリンクだけをそちらにする方法(2)をとる必要がある。
libpcsclite.soについては本来はどこかからソースを持ってきてビルドする必要がある。ただ、事情は分からないが必要なファイルが欠けて公開されていて...?まぁ「libpcsckai.so ダウンロード」でググるなりで...どうにか入手した方が楽ではないかと。libpcsckai.soが古いと有料放送は無理?地上波はCASの更新はないはずなので大丈夫か?。新しくするのはバイナリを書き換えれば大丈夫?らしいですね。

なお、ARM以外のCPUの場合はarm-linux-gnueabihfフォルダの名前が異なるはず。以下同様

まず、バックアップとリストアの方法を。

```libpcsclite.soをlibpcsclitebup.soでバックアップ
sudo cp /usr/lib/arm-linux-gnueabihf/libpcsclite.so /usr/lib/arm-linux-gnueabihf/libpcsclitebup.so
```

```libpcsclite.soを戻す(リストア方法).
sudo cp /usr/lib/arm-linux-gnueabihf/libpcsclitebup.so /usr/lib/arm-linux-gnueabihf/libpcsclite.so
```

★ 方法1.有線のみになるが、簡単に行う方法

```上書きでlibpcsclite.so書き換え
sudo cp /home/pi/libpcsckai.so /usr/lib/arm-linux-gnueabihf/libpcsclite.so
*softcasのlibpcsclite.soをpiフォルダに置いている場合
```
これだけでOKだったはず。思ったより簡単かも?
なお、先日cockpitを入れたあとでsoftcasが効かなくなった、ファイルコピーを再度&OS再起動で復活。正確な理由は不明だが、こんな事もあったということで。

★ 方法2.wifiも可能にする
(現段階ではなぜか成功せず)

上記のlibarib25のところ*では、

```libarib25ビルドファイルの書き換え.
(/home/pi/libarib25上で実行)
nano CMakeLists.txt
[編集]
set(PCSC_CFLAGS "pkg-config libpcsckai --cflags")
set(PCSC_LIBS "pkg-config libpcsckai --libs")
 の2行を先頭行「cmake_minimum_required(VERSION 2.8.5)」の後に追加
set(WITH_PCSC_PACKAGE "libpcsckai" CACHE STRING "pkg-config package name for PC/SC")
の「libpcsclite」を「libpcsckai」とし、保存する

nano cmake/FindPCSC.cmake
[編集]
「libpcsclite」を「libpcsckai」とし、保存する 
```
を行い、上記の通りビルドをしておく。

改変libarib25からここにリンクされる?
設定ファイルlibpcsckai.pcを作成する。

```コピーでlibpcsckai.pc作成
sudo cp /usr/lib/arm-linux-gnueabihf/pkgconfig/libpcsclite.pc /usr/lib/arm-linux-gnueabihf/pkgconfig/libpcsckai.pc
sudo nano /usr/lib/arm-linux-gnueabihf/pkgconfig/libpcsckai.pc
[編集]
Libs: -L${libdir} -lpcscliteをLibs: -L${libdir} -lpcsckaiとする
```
これで、libpcsckai.soを読み込んでくれる?

Win版ではsoftcasでwinscard.dllの改変で、tvtestと同じフォルダに入れれば可能だったはず。録画時のみ必要で、視聴するときはb-cas/softcasは必要なかったはず。

むにゃ、ああ、これは夢か...

録画コマンドのインストール&テスト録画をする

録画のためのコマンドはいくつかあり、ここではrecdvbを使う。同様のコマンドとしてはrecpt1がある。(なお、これはdocker版を入れていても入れることはできる。recdvbchksigで電波強度を見れるので意味なくもない)

なおこのrecdvb***.tgzは2023/8/20現在ダウンロードできなくなっており、今後も望めない?ので代替方法を考えておきたいです。

recdvbコマンド.
sudo apt-get install -y automake autoconf : 'パッケージ導入'
wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.3.tgz : 'ダウンロード'
tar xvzf recdvb-1.3.3.tgz : '解凍'
cd recdvb-1.3.3 : 'カレントフォルダを解凍したフォルダに移動'
./autogen.sh
./configure --enable-b25
make
sudo make install : 'ビルドしたファイルをインストール'
cd  ~ : 'カレントフォルダを戻す'

更新は鈍いが、1年に1回くらいはチェックしてもいいのかも。

ここで録画コマンドを試すときは念のために再起動

普通にスタートメニューからGUIで再起動でも構わない.
sudo reboot

ここまで来てやっと録画が可能に。チャンネル指定は物理チャンネル(地域によって違う。マスプロ電工 https://www.maspro.co.jp/contact/bro/bro_ch.html などで調べるとよい)。

録画テストコマンド.
recdvb --b25 --strip --dev 0 16 7 /home/pi/recdvb0_nhk.m2ts
: 'デバイス0で、物理チャンネル16(津軽ではNHK総合)で、7秒間、/home/pi/recdvb0_nhk.m2tsに保存する'

注意点。使用する文字(ファイル名などに使用)には、NGのものもある(システム的に使われるための誤作動?)。使っても問題ないものを覚えた方がいいでしょう。
・漢字はOK。もちろんひらカタも。
・_(アンダーバー)はOK。
・.(ピリオド)は普通に文中に使うのは問題ないっぽい。
・-(ハイフン)も問題ないみたいだ
それ以外の記号は、大丈夫な可能性もあるが、試してみないとわからないので、最初から使わない方がいいでしょう。テスト録画ではまず引っかからないでしょうが、後述するcron等利用の際に問題になりうる。

チューナーがエラーか何かでたまに一部の局や番組で録画できない場合、recdvbで録画テストするとDMX SET PES FILTERが出る場合。
https://octais.blogspot.com/2012/04/usb.html?m=1
を参考にして、一度チューナーの電源を落とす(OSのシャットダウン?チューナーをusbから抜く?再起動ではダメ)と治ることも。

{なお、コマンドをインストール後しばらくは特に、cannot open frontend device というエラーが出ることがある。]
small{sudo adduser pi(ユーザー名) video でユーザー権限を追加する解決策もネットに上がっているが、すでに権限があり何も変わらなかった。ではどうするか?}
{→→→何もせずに1~2日放置したら動くようになっていた。なぜなのかはよくわからないが。。。}
{チューナーが番組情報へのアクセスをしていて使用中だったのが一通り終わったからとか?(てきとう)}

この段階でも録画マシンとして利用できなくはないが、その都度コマンドを打たなければで使い勝手は悪い。次は運用を便利にするソフトを導入していく。

さてとここからが注意点?MirakurunやEPGStationは改善が盛んなのか、アップデートによるトラブルも出てくる。これは不備というよりは進化による弊害(要は使用するコンポーネントの変更や設定ファイル名などの変更)で、いい点も多いので何とかついていきたいところです。以下、今後ちょこまかまた書き換えていく予定(21.8/21)

6.運用のためのツール、Mirakurun、EPGStation

より使いやすくするために、MirakurunとEPGStationを導入する。Mirakurunは...たぶんですがチューナー管理ソフト。複数のチューナーをうまく割り振る仕事をしているで合ってる?EPGStationは、他のマシンからアクセスして番組表を見てそこから予約を入れることを可能にする。同様のパッケージにChinachuがある。
通常版とdocker版があり、作者様によるとdocker版がメイン。どちらがいいかはよくわからないが、ARMアーキテクチャであるラズパイは、個人的にはしばらくは通常版でいいのではと思います。

Node.js

mirakurunやrivarunなどなどをインストールする際に必要なので、Node.jsを先にインストールしておく。依存関係があるので注意(EPGStationがMirakurunの特定以上バージョンを要求し、MirakurunがNode.jsの特定以上バージョンを要求する)

まずはaptなどでnode.jsをインストールする
sudo apt-get install nodejs npm
sudo npm install -g npm

これで入るバージョンが古かったような気がする?最新のMirakurun(3.9)はnode.js12以上が必要だったような。なので、npmからnパッケージをインストールする(よくわからんが)

npmからnをインストール.
sudo npm install -g n

で、nを使い安定板のNode.jsをインストールする

nからNode.jsのLTS版をインストール.
sudo n lts

で、apt由来の古いnodejsとnpmをアンインストール、と。

複数バージョンあると面倒?なので古いのを削除.
sudo apt purge nodejs npm
suto apt autoremove

...なんでこんな面倒なことをせにゃならんのかw最初から比較的新しいの入れるのどうやるの?

Rivarun

録画に必須ではないが、これがあると複数チューナーある状態でもデバイス番号を指定せずにコマンドで録画できるようになる。チューナーが複数なら入れておいてもいいかも(EPGStation2では時間指定録画もできるっぽいのでなくても大丈夫かもしれないが)

sudo npm install rivarun -g
PM2

プロセスをデーモン化などして起動を管理するソフト。再起動時に自動的に起動してくれるなどできる。

sudo npm install pm2 -g
Mirakurun

ここでやっとMirakurunをインストールする。

mirakurun、最新でも同じだったか?少なくとも3.2とかの時はこれでOKだった.
sudo npm install mirakurun -g --unsafe --production

成功すればstatusがonlineとなる。

Mirakurunサービス起動等操作
mirakurun起動.
sudo mirakurun start
mirakurun再起動.
sudo mirakurun restart
起動確認.
sudo pm2 status

現在のプロセスを覚えて、OS起動時に、自動的に起動するには、まずは

pm2.
pm2 startup
pm2startupで指定されたコマンドを実行.
sudo env PATH=$PATH:/usr/bin /usr/local/lib/node_modules/pm2/bin/pm2 startup systemd -u pi --hp /home/pi
記録する.
sudo pm2 save
: 'あるいは'
pm2 save
: 'なおpm2 listで出てくるリストはsudo ありなしで違うので注意'

Mirakurunのチューナー設定

mirakurunにチューナーを登録する.
sudo nano /usr/local/etc/mirakurun/tuners.yml

同時録画できる数分だけ設定をする。ここではdev 0からdev 3までの4つ分。

tuners.yml
- name: PX-S1UD-0
  types:
    - GR
  command: recdvb --b25 --dev 0 <channel> - -
  isDisabled: false
- name: PX-S1UD-1
  types:
    - GR
  command: recdvb --b25 --dev 1 <channel> - -
  isDisabled: false
- name: PX-S1UD-2
  types:
    - GR
  command: recdvb --b25 --dev 2 <channel> - -
  isDisabled: false
- name: PX-S1UD-3
  types:
    - GR
  command: recdvb --b25 --dev 3 <channel> - -
  isDisabled: false

Mirakurunの管理ページで設定する場合、[config][tuners]から、
name:ご自由に。PX-S1UD-0とか。
Types:地上波ならGR
commant:recdvb --b25 --dev 0 - -
 でOK。
DVB Device Path:空欄で問題ない。
Decoder:同上

チャンネル登録について。住んでいる地域がチャンネル数が多いならスキャンに任せるのも手かもしれないが、地方でチャンネル数が少なくてBSCSもない場合は手動登録した方が楽かもしれない。

チャンネルをスキャンする.
curl -X PUT "http://localhost:40772/api/config/channels/scan"
: '40772はmirakurunのデフォルトのポート'
手動チャンネル登録する場合.
sudo nano /usr/local/etc/mirakurun/channels.yml

(参考)津軽地方のチャンネル設定

channels.yml
- name: NHKE
  type: GR
  channel: '13'
- name: NHKG
  type: GR
  channel: '16'
- name: RAB
  type: GR
  channel: '28'
- name: ATV
  type: GR
  channel: '30'
- name: ABA
  type: GR
  channel: '32'

↓リモコン↓物理チャンネル
1 RAB  28
2 NHKE 13
3 NHKG 16
5 ABA  32
6 ATV  30

EPGの更新間隔を伸ばす
(詳しくはそのうち書く)Mirakurunの標準値は古くは15分に一度、現在も1時間に一度?EPGを更新するみたいだが、EPGStation側に提供されるわけでもない?ので更新なんて究極やらなくてもいいらしい...?とりあえず間隔を1日に一回にする。
EPGの更新がかかると場合によってはその間録画が失敗することもあるので結構重要。なお、EPGの更新はMirakurun起動時(=OSの再起動時ももちろん含む)にもかかる。

更新間隔変更.
nano /usr/local/etc/mirakurun/server.yml
下記をファイルの最後に追記
programGCInterval: 86400000
epgGatheringInterval: 864000000
FFmpeg

エンコードコマンドのFFmpegを入れて設定しておくと、録画したファイルを後で自動的にmp4にしてくれる。

FFmpegのインストール.
sudo apt install ffmpeg

インストールして ffmpeg -encoders | grep h264 を実行すると h264_omx が見えるはず。これがあればハードウェアエンコードが可能で、それにより負荷を減らせる。私の場合なぜかたまに失敗しているしエンコは母艦で行うので入れていないが。ラズパイ標準のffmpegだとうまくいかないという説もあったっけな...?

Mirakurun互換

mirakcというのがあるようです。CPU使用率が少ない?情報は少なめ?。

*EPGStationが、2になると細かいところでインストールコマンド等が変わっていたような。今後修正等していきます。

EPGStation

より簡単に録画できる。

EPGStationのインストール.
git clone https://github.com/l3tnun/EPGStation.git : 'コピー'
cd EPGStation : 'カレントフォルダの移動'
npm install
npm run build
cp config/config.sample.json config/config.json : 設定ファイルとしてとりあえずサンプルをコピー
cp config/operatorLogConfig.sample.json config/operatorLogConfig.json
cp config/serviceLogConfig.sample.json config/serviceLogConfig.json

*ここからしばらくv1の時に書いたもので、v2では異なるかも注意。

今ほどコピーしたconfig.json を書き換える.

config.json書換え.
sudo nano /home/pi/EPGStation/config/config.json

設定の内容は全部 https://github.com/l3tnun/EPGStation/blob/master/doc/conf-manual.md に書いてあるとのことだがなんのこっちゃ...w
保存先等のディレクトリは設定しておこう。

config.jsonの中身
    "recorded": "/home/pi/ssd/ts", : '/home/pi/ssd/tsフォルダに保存'

原則、recorded以外の3つ"recordedTmp"、"recordedTSDefaultDirectory"、"recordedEncodeDefaultDirectory"は設定する必要はない。

また、コマンド登録の場所を指定するが、フルパスが必要だったはず。
コマンドのパスを出すにはwhichコマンド。
which ffmpeg
などなど。

epgstationサービス起動 (v1のみ?2は別のコマンドだったか).
pm2 start /home/pi/EPGStation/dist/server/index.js --name "epgstation"
: '何らかで起動していない状態から起動させる'
epgstationサービス再起動 (v1のみ?v2以降は一度止めて再び起動しかなかったはず).
pm2 restart /home/pi/EPGStation/dist/server/index.js --name "epgstation"
チャンネル設定完了確認.
curl -o - http://localhost:40772/api/config/channels
チャンネル設定確認~rivarunを使う場合.
rivarun --list | sed 's/},/},\n/g'
チャンネル設定未検知を確認~rivarunを使う.
rivarun --list | sed 's/},/},\n/g'  | grep -v serviceId

なお、チャンネルはスキャンしてもすぐにはうまくいかない。設定、再起動したのち一晩放置するくらいでいいかもしれない。

ログ
/home/pi/epgstation/logs/operator/system.log

□□□□□□□□□□□ ここからdocker版と合流 □□□□□□□□□□□

信号の強さの計測例

recdvbが1.3.3以上(あるいはパッチ済み)を前提とします。
~USB接続で地デジ4チャンネル録画できるチューナーPX-Q1UDを略~さんによると。
CNRが20以上?、ERRBLKが0、SIGの値がある程度小さい(-45くらい?まで下がっている)と大丈夫っぽい?。

デバイス0-3物理チャンネル13_NHKEテレ津軽.
timeout 7 recdvbchksig --dev 0 13
timeout 7 recdvbchksig --dev 1 13
timeout 7 recdvbchksig --dev 2 13
timeout 7 recdvbchksig --dev 3 13
timeout 7 recdvbchksig --dev 0 13;timeout 7 recdvbchksig --dev 1 13;timeout 7 recdvbchksig --dev 2 13;timeout 7 recdvbchksig --dev 3 13
デバイス0-3物理チャンネル16_NHK総合津軽.
timeout 7 recdvbchksig --dev 0 16
timeout 7 recdvbchksig --dev 1 16
timeout 7 recdvbchksig --dev 2 16
timeout 7 recdvbchksig --dev 3 16
timeout 7 recdvbchksig --dev 0 16;timeout 7 recdvbchksig --dev 1 16;timeout 7 recdvbchksig --dev 2 16;timeout 7 recdvbchksig --dev 3 16
デバイス0-3物理チャンネル28_RAB青森放送津軽.
timeout 7 recdvbchksig --dev 0 28
timeout 7 recdvbchksig --dev 1 28
timeout 7 recdvbchksig --dev 2 28
timeout 7 recdvbchksig --dev 3 28
timeout 7 recdvbchksig --dev 0 28;timeout 7 recdvbchksig --dev 1 28;timeout 7 recdvbchksig --dev 2 28;timeout 7 recdvbchksig --dev 3 28
デバイス0-3物理チャンネル30_ATV青森テレビ津軽.
timeout 7 recdvbchksig --dev 0 30
timeout 7 recdvbchksig --dev 1 30
timeout 7 recdvbchksig --dev 2 30
timeout 7 recdvbchksig --dev 3 30
timeout 7 recdvbchksig --dev 0 30;timeout 7 recdvbchksig --dev 1 30;timeout 7 recdvbchksig --dev 2 30;timeout 7 recdvbchksig --dev 3 30
デバイス0-3物理チャンネル32_ABA青森朝日放送津軽.
timeout 7 recdvbchksig --dev 0 32
timeout 7 recdvbchksig --dev 1 32
timeout 7 recdvbchksig --dev 2 32
timeout 7 recdvbchksig --dev 3 32
timeout 7 recdvbchksig --dev 0 32;timeout 7 recdvbchksig --dev 1 32;timeout 7 recdvbchksig --dev 2 32;timeout 7 recdvbchksig --dev 3 32

録画時のトラブル

運用を行っていくと、なぜか録画が行われないといったトラブルに見舞われることがある。そんな時どこをチェックするか。これも場合によっては項目将来独立するかも。
・recdvbを試してみる。問題がなければmirakurunやepgstationなどに何らかの原因?
・mirakurunの状況を確認(http://192.168.1.**:40772/ )。getepgが行われている間のチューナーは他に使えないので注意。また、pidが暴走しているときは何らかの不具合?最適な解決方法はよくわからないが、チューナーをUSBから外してOSを再起動すれば多分大丈夫じゃないかな?

・自分の範囲でEPGStationで起こっていること
ルール設定での録画は、メインのファイルに加えて時間が短い謎のファイルが一緒にできる。チューナー占拠はせず1つのみ。単発での番組指定録画では大丈夫。検索で出てきたのを選ぶのも同じく大丈夫。また、局を指定すると大丈夫。
よって、キーワードを指定する際に局が決まっている(例えばプリキュアは大体の県で朝日系で放映)、固定であれば(週1の定期録画がいい例)そこで局も決めてしまった方がいい。

ここから先は、運用実践編へ(記事分離)。お手数おかけします。

前編はこちら
後編(docker版)

12
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
11