Raspberry Piで録画サーバーを作った
Raspberry PiにはH.264のハードウェアエンコーダが載っている
FFmpegを使い,M2TSをMP4に高速エンコードが出来る 使用したハードウェア類
Raspberry Pi 4 Model B 4GB
メモリの使用量的には2GBモデルでも平気だと思うけど
2GBモデルの値段が安くなったけど,メモリが余る分には困らないし4GBか8GBがおすすめ
エンコードなどでぶん回すのでヒートシンクとファンが付いているケースを買った
USB1つでチューナー4つを使える
4チャンネル同時視聴・録画ができる
B-CASカードを読み取るのに必要
使っていないテレビから拝借
HDD
録画ファイルなどを保存する
Raspberry PiのSDカードに直接書き込むと一瞬で死んでしまう
自分はとりあえずSambaで共有しているHDDを使ったので準備してない.
使用したソフトウェア
Raspberry Pi 本体のセットアップ
別ページに書いた
チューナーの準備
PX-Q1UD を使っているので,PLEXのサイトからドライバをダウンロード
Raspberry Piの/lib/firmware/に入れる.
PX-Q1UDの中身は, 1チャンネルモデルのPX-S1UDがUSBハブで4つ繋がってるのと同じ感じ
なのでPX-S1UDのドライバをそのまま使う
以下のコマンドを実行
$ 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++
$ cd libarib25
$ cmake .
$ make
$ sudo make install
録画用コマンドをインストール
recdvbを使う
以下のコマンドを実行
$ sudo apt install automake
$ 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をインストールする.
Mirakurunをインストール
Dockerを使ってインストールする方法と直接インストールする方法がある
自分は最初に作ったときは直接インストールしたけど,後からDockerに移行した
Dockerの使い方さえ分かればDockerでやる方が簡単だと思うのでおすすめ
FFmpegをインストール
EPGStationでFFmpegを使うので先にインストールしておく
H.264のハードウェアエンコーダが使えるFFmpegを使いたい
今は手動でビルドしなくてもaptからインストールするだけで普通に使える
$ sudo apt install ffmpeg
インストールしてffmpeg -encoders | grep h264を実行するとh264_omxが見える
EPGStationをインストール
セットアップマニュアルに書いてある通りに実行する
EPGStationの設定を書き換える
config/config.ymlをいくつか変更する必要がある
書き換えるプロパティ
ffmpegとffprobeの場所を指定する
which ffmpegで場所を調べてconfig.ymlのffmpegとffprobeを書き換える
録画関連のファイルの保存先をHDDに向けておく
初期設定ではmicroSDに保存されてしまう
recorded
recordedTmp
uploadTempDir
など
データベースにSQLite3を使う場合,regexp.soをビルドする
Sambaをマウントする
録画したファイルをSambaに保存する
適当な所にマウントする
起動時にマウントして欲しいので,/etc/fstabに書き込む
code:text
//192.168.1.1/tv /mnt/tv 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にマウントされる.
起動時にネットワーク周りの設定を待つため設定
sudo raspi-configを実行
3 Boot Options -> B2 Wait for Network at Bootを実行して
再起動する
EPGStationを起動する
下のコマンドで起動
http://192.168.xxx.xxx:8888(Raspberry PiのIPアドレス)にアクセスする
$ pm2 start dist/server/index.js --name "epgstation"
$ pm2 save
これで基本的な設定は終わり
後はエンコードスクリプトを調整などをする
所感
Raspberry Pi 4の録画サーバー.録画するだけなら余裕だし,エンコードもH.264のハードウェアエンコーダを使えば結構行ける
省電力での動作,ギガビットイーサネット対応,USB 3.0対応,ハードウェアエンコーダ搭載というスペック,Raspberry Pi Foundationからの「録画鯖に使ってくれ」という熱いメッセージを感じる