Raspberry Pi 4 で録画サーバーを作った (Mirakurun + EPGStation)
ブログは移動したので,最新のを見る場合は下記のリンクを参照。
Raspberry Pi 4 で録画サーバーを作った.
Raspberry Pi 4 Model B 4GB + Mirakurun + EPGStation で録画鯖作った
— hiroxto (@hiroxto) 2020年3月3日
FFmpeg 周りまだ何も手つけてないけどとりあえず録画は出来たっぽい pic.twitter.com/oSlgPnk7mB
使用したハードウェア
Raspberry Pi 4 Model B 4GB
メモリの使用量的には 2GB モデルでも平気だと思うけど, とりあえず 4GB なら間違いない. 2GB モデルの値段が安くなったけども, メモリが余る分には困らないし, 4GB がおすすめ.
Miuzei Raspberry Pi 4 ケース
電源なしのを購入. 1000 円ちょっとで ケース + ファン + ヒートシンクが揃っていい感じ.
PLEX PX-Q1UD
TV チューナー. 4 チャンネル同時視聴・録画可能な方 (PX-Q1UD) を買ったけど, そもそもテレビあんま見ないし 1 チャンネルの (PX-S1UD) でも良かったかも.
NTTCom SCR3310
B-CAS カードの読み取りに使う. Raspberry Pi で動作してる IC カードリーダーは他にもあるし動けば何でもあり.
B-CAS カード
使ってないテレビから拝借.
HDD
ファイルの保存用. 30分アニメを H.264 の mp4 にエンコードして 1GB 前後なので, デカい容量の方がいい.
自分は取りあえず RT-AC68U の Samba で共有している HDD を使ったので準備してない.
使用したソフトウェア
- Mirakurun
- EPGStation
Raspberry Pi 本体のセットアップ
デスクトップ用途では使わないので, ヘッドレスの Raspbian をインストールした. 別記事に書いた内容をほぼそのまま実行.
チューナーの準備
今回は PLEX PX-Q1UD を使っているので, PLEX のサイトからドライバをダウンロードして Raspberry Pi の /lib/firmware/
に入れる.
PX-Q1UD の中身は, 1 チャンネルモデルの PX-S1UD が USB ハブで 4 つ繋がってるのと同じ感じなので PX-S1UD のドライバをそのまま使う.
$ 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
再起動して dmesg
を実行すると PX-S1UD Digital TV Tuner
が 4 つ見えるはず.
$ dmesg | grep PX-S1UD
カードリーダーの準備
ビルドツールや諸々をインストールする.
$ sudo apt install build-essential pcscd libpcsclite-dev libccid pcsc-tools
B-CAS カードを読み取れているかを確認する.
$ sudo pcsc_scan
Japanese Chijou Digital B-CAS Card (pay TV)
みたいなのが出てれば OK.
B-CAS デコード用のライブラリをインストール
stz2012/libarib25 をインストールする.
$ sudo apt install cmake g++
$ git clone https://github.com/stz2012/libarib25
$ cd libarib25
$ cmake .
$ make
$ sudo make install
録画用コマンドをインストール
recdvb を使うのでインストール.
$ sudo apt install automake $ wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.2.tgz $ tar xvzf recdvb-1.3.2.tgz $ cd recdvb-1.3.2 $ ./autogen.sh $ ./configure --enable-b25 $ EXTRA_SID=1 make $ sudo make install
recdvb --b25 --strip --dev 0 20 10 test.m2ts
みたいなのを実行すれば録画できてるはず. (物理チャンネル 20
を 10 秒間録画して test.m2ts
に保存.)
Node.js をインストール
Mirakurun と EPGStation が動作するバージョンの Node.js をインストールする. Node.js をインストールする方法は無限にあるけど動けばなんでもいい.
Mirakurun をインストール
Dockerを使ってインストールする方法と直接インストールする方法がある.
自分は最初に作ったときは直接インストールしたけど,後からDockerに移行した. Dockerの使い方さえ分かればDockerでやる方が簡単だと思うのでおすすめ.
Docker を使ってインストール
別の記事に書いたのを参照
直接インストール
Mirakurun のドキュメント に従ってインストールする.
プロセスマネージャーに pm2 を使うのでインストールする必要がある.
$ sudo npm install pm2 -g $ sudo npm install mirakurun -g --unsafe --production
チューナーの設定.
sudo mirakurun config tuners
を実行すると /usr/local/etc/mirakurun/tuners.yml
が開かれるので設定する.
$ sudo mirakurun config tuners
で YAML をこんな感じに. PX-Q1UD は PX-S1UD が 4 つあるのと同じ感じなので, 4 個書く.
- name: PX-Q1UD-1_1 types: - GR command: recdvb --b25 --strip --dev 0 <channel> - - - name: PX-Q1UD-1_2 types: - GR command: recdvb --b25 --strip --dev 1 <channel> - - - name: PX-Q1UD-1_3 types: - GR command: recdvb --b25 --strip --dev 2 <channel> - - - name: PX-Q1UD-1_4 types: - GR command: recdvb --b25 --strip --dev 3 <channel> - -
sudo mirakurun restart
で一回再起動する.
次に channels.yml
を設定.
これは API を使うと自動スキャンでよしなにしてくれるので curl で API 叩いて待つ.
$ curl -X PUT "http://localhost:40772/api/config/channels/scan"
終わったら sudo mirakurun restart
で再起動する.
EPGStation をインストール
EPGStation のセットアップマニュアル に従ってインストールする.
EPGStation のドキュメント, 親切に書いてあるのでちゃんと読んで実行すればいい感じになる.
FFmpeg をインストール. Raspberry Pi にはビデオ入力用に H.264 のハードウェアエンコーダがあるのでそれを有効化した FFmpeg を使いたいんですけど, 今は手動ビルドしなくても apt から入る FFmpeg で既に有効化されているので, 普通にインストールした.
インストールして ffmpeg -encoders | grep h264
を実行すると h264_omx
が見えるはず
$ sudo apt install ffmpeg
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
config.json
を書き換える.
設定の内容は全部 https://github.com/l3tnun/EPGStation/blob/master/doc/conf-manual.md に書いてある.
ffmpeg
とffprobe
の場所を指定するwhich ffmpeg
で場所を調べてconfig.json
のffmpeg
とffprobe
を書き換える
- 録画関連のファイルの保存先を Samba に向けておく
- 初期設定では microSD に保存される
recorded
,recordedTmp
,uploadTempDir
, など
- データベースに SQLite3 を使う場合,
regexp.so
をビルドする.
Samba をマウントする
今回は録画したファイルを Samba に保存するので, 適当な所にマウントする.
起動時にマウントして欲しいので, /etc/fstab
に書き込む.
//192.168.1.1/TV-Rec /mnt/TV-Rec cifs username=username,password=password,rw,vers=2.0,file_mode=0755,dir_mode=0755,iocharset=utf8,defaults 0 0
sudo mount -a
を実行すると /mnt/TV-Rec
にマウントされる.
また, 起動時にネットワーク周りの設定を待つため, sudo raspi-config
を実行して, 3 Boot Options
-> B2 Wait for Network at Boot
を実行して再起動.
EPGStation を起動する
下のコマンドで EPGStation を起動して, http://192.168.1.xxx:8888
(Raspberry Pi の IP アドレス) にアクセスする.
$ pm2 start dist/server/index.js --name "epgstation" $ pm2 save
これで基本的な設定は終わり. 後は FFmpeg のオプションなどを調整しないと厳しい.
所感など
FFmpeg 関連はまだ研究中だけど, 少しオプションを調整して 30 分アニメのエンコードを実行したら 40~45 分で終了. まだ改善の余地ありかもしれないけど, 深夜アニメを録画して朝以降に見るくらいにしか使ってないので, 一旦これで運用中.
他に Raspberry Pi で録画鯖を作ろうとしてる人のために Webmin のダッシュボードのスクショを貼っておく. 構成は上の方に書いた使用したハードウェア, ソフトウェアの通り.
家の中でしか使ってないのでリアルタイム視聴は M2TS 無変換で流してる. ほぼ負荷なしで詰まることなく流せるので, 家の中に限ってはオススメ.
Raspberry Pi 4, 録画するだけなら余裕だし, エンコードも H.264 のハードウェアエンコーダを使えば結構行ける.
省電力での動作, ギガビットイーサネット対応, USB 3.0 対応, ハードウェアエンコーダ搭載というスペック, Raspberry Pi Foundation からの「録画鯖に使ってくれ」という熱いメッセージを感じる.