Hiroto's diary

プログラミングとか色々

Raspberry Pi 4 で録画サーバーを作った (Mirakurun + EPGStation)

Raspberry Pi 4 で録画サーバーを作った.

f:id:Hiroto-K:20200303210122j:plain
録画サーバー周りの様子, 超コンパクト

使用したハードウェア

Raspberry Pi 4 Model B 4GB

メモリの使用量的には 2GB モデルでも平気だと思うけど, とりあえず 4GB なら間違いない. 2GB モデルの値段が安くなったけども, メモリが余る分には困らないし, 4GB がおすすめ.

www.switch-science.com

Miuzei Raspberry Pi 4 ケース

電源なしのを購入. 1000 円ちょっとで ケース + ファン + ヒートシンクが揃っていい感じ.

PLEX PX-Q1UD

TV チューナー. 4 チャンネル同時視聴・録画可能な方 (PX-Q1UD) を買ったけど, そもそもテレビあんま見ないし 1 チャンネルの (PX-S1UD) でも良かったかも.

PLEX USB接続型フルセグ対応地上デジタルTVチューナー PX-Q1UD

PLEX USB接続型フルセグ対応地上デジタルTVチューナー PX-Q1UD

  • 発売日: 2018/02/28
  • メディア: Personal Computers
PLEX USB接続ドングル型地上デジタルTVチューナー PX-S1UD V2.0

PLEX USB接続ドングル型地上デジタルTVチューナー PX-S1UD V2.0

  • 発売日: 2015/09/10
  • メディア: エレクトロニクス

NTTCom SCR3310

B-CAS カードの読み取りに使う. Raspberry Pi で動作してる IC カードリーダーは他にもあるし動けば何でもあり.

B-CAS カード

使ってないテレビから拝借.

HDD

ファイルの保存用. 30分アニメを H.264 の mp4 にエンコードして 1GB 前後なので, デカい容量の方がいい.

自分は取りあえず RT-AC68U の Samba で共有している HDD を使ったので準備してない.

使用したソフトウェア

  • Mirakurun
  • EPGStation

github.com

github.com

Raspberry Pi 本体のセットアップ

デスクトップ用途では使わないので, ヘッドレスの Raspbian をインストールした. 別記事に書いた内容をほぼそのまま実行.

hiroto-k.hatenablog.com

チューナーの準備

今回は 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 をインストールする.

github.com

$ 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 をインストールする. 動けば何でもいいと思うけど, 自分は n でインストールした.

$ sudo apt install nodejs npm
$ sudo npm install n -g
$ sudo n stable

Mirakurun をインストール

Mirakurun のドキュメント に従ってインストールする.

github.com

プロセスマネージャーに 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 を使うと自動スキャンでよしなにしてくれるので curlAPI 叩いて待つ.

$ curl -X PUT "http://localhost:40772/api/config/channels/scan"

終わったら sudo mirakurun restart で再起動する.

EPGStation をインストール

EPGStation のセットアップマニュアル に従ってインストールする.

EPGStation のドキュメント, 親切に書いてあるのでちゃんと読んで実行すればいい感じになる.

github.com

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 に書いてある.

github.com

  • ffmpegffprobe の場所を指定する
    • which ffmpeg で場所を調べて config.jsonffmpegffprobe を書き換える
  • 録画関連のファイルの保存先を 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 のダッシュボードのスクショを貼っておく. 構成は上の方に書いた使用したハードウェア, ソフトウェアの通り.

f:id:Hiroto-K:20200305234704p:plain
EPGStation で 1 番組録画 + VLC で M2TS 無変換のストリーム 2 個 を実行してる時のダッシュボード

f:id:Hiroto-K:20200306000752p:plain
30 分アニメを 1 本エンコード (ハードウェアエンコーダ使用) + VLC で M2TS 無変換のストリームを 2 個 を実行してる時のダッシュボード

家の中でしか使ってないのでリアルタイム視聴は M2TS 無変換で流してる. ほぼ負荷なしで詰まることなく流せるので, 家の中に限ってはオススメ.


Raspberry Pi 4, 録画するだけなら余裕だし, エンコードH.264 のハードウェアエンコーダを使えば結構行ける.

省電力での動作, ギガビットイーサネット対応, USB 3.0 対応, ハードウェアエンコーダ搭載というスペック, Raspberry Pi Foundation からの「録画鯖に使ってくれ」という熱いメッセージを感じる.

© 2015 hiroxto