Raspberry Pi 4 と NAS で録画環境を整える
ウチは今まで nasne を使って楽チン運用をしてきたのだけど、 生産も終わってサービス停止もそう遠くない将来にきてしまう 。 容量1TBの運用も窮屈に感じてきたし、元々運用していたNAS(8TB)を利用できる録画サーバーを作ることにした。 先人の多くの記録があったので「わたしでもできるっしょ、やってみっか」となった。感謝。
- Raspberry Pi 3+Chinachuで地デジ録画サーバー構築 - Qiita
- Raspberry Pi でTVを見る録る! - Qiita
- 「PX-S1UD V2.0」Linuxでも使える定番TVチューナー | 秋葉原ぶらり | ページ 2
重複する箇所は多々あるが、私の環境構築に必要なコマンドは全て記述しておく。
使ったハード
- 元々持っていたもの
- 新たに購入したもの
割り当てIPについて
私の自宅環境ではこんな感じ。
192.168.10.1 # ルーター 192.168.10.2 # NAS 192.168.10.128 # Raspberry Pi を今回割り当てる
作業
Raspberry Pi をセットアップ
TVに映像出力(Steam Link)もしたかったので、GUIを含んだパッケージの Raspbian Buster with desktop をインストール。 副次的効果として、言語・キーボード・タイムゾーン・wifi 設定もGUIのウィザードで終わるので楽だった。
Raspberry Pi に SSH 接続するために
慣れた端末(Mac) から SSH で接続できるようにする。やることの大枠は他のLinuxディストリビューションと変わらない。
ユーザの初期パスワードを変更する
sudo raspi-config
上記コマンドで設定画面を開き 1 Change User Password
で更新。
初期パスだと外部端末から Permission denied
で弾かれるので、「LANでしか繋がないし」と面倒がらずきちんと変更しておこう。
起動時にネットワーク関連処理を待つ
sudo raspi-config
上記コマンドで設定画面を開き 3 Boot Options
> B2 Wait for Network at Boot
で有効化。
この設定をしておかないと、後述のfstab設定をしたとしても起動時にNASを自動マウントしてくれないので注意。
SSH サーバーを enable
sudo raspi-config
上記コマンドで設定画面を開き 5 Interfacing Options
> P2 SSH
で有効化
IPを固定する
192.168.10.128
を割り当てたいので /etc/dhcpcd.conf
に以下を追記しておく。
(ルーターの物理LANポートが埋まってたのでとりあえず無線LANで接続している。スイッチングハブ買わないとな・・)
interface wlan0 static ip_address=192.168.10.128/24 static routers=192.168.10.1 stacit domain_name_servers=192.168.10.1 8.8.8.8
公開鍵を登録しておく
上の状態で Raspberry Pi を再起動したらパスワードを用いた SSH 接続はできるが、頻繁に接続するには面倒なので公開鍵を登録しておく。
pi@raspberrypi:~ $ mkdir .ssh pi@raspberrypi:~ $ touch .ssh/authorized_keys pi@raspberrypi:~ $ chmod 700 .ssh pi@raspberrypi:~ $ chmod 600 .ssh/authorized_keys
接続する端末(Mac)で以下コマンドを実行して鍵を登録しとく。
% cat ~/.ssh/id_rsa.pub | ssh pi@192.168.10.128 'cat >> .ssh/authorized_keys'
NAS をセットアップ
NAS の共有フォルダを NFS 利用できるように
USB接続のHDDを利用する手もあるが、ウチにはNASがあるので有効活用しようかと思う。 (USB接続のHDDでもfstab設定を置き換えるだけで同じようにセットアップできると思う)
NAS の設定変更する
Synology 216j を利用しているので、GUIをポチポチするだけで用意できる。
Raspberry Pi でマウント設定する
マウントポイントを作成。
pi@raspberrypi:~ $ sudo mkdir -p /mnt/nas pi@raspberrypi:~ $ sudo chown pi /mnt/nas/
/etc/fstab
に以下を追記し、自動マウントさせる。
192.168.10.2:/volume1/video /mnt/nas nfs rsize=8192,wsize=8192,timeo=14,intr
自動マウントしたら、保存先のディレクトリ作成と権限を付与しておく。
pi@raspberrypi:~ $ sudo mkdir -p /mnt/nas/recorded pi@raspberrypi:~ $ sudo chown pi /mnt/nas/recorded pi@raspberrypi:~ $ sudo chown :video /mnt/nas/recorded
チューナーサーバと録画サーバをセットアップ
ドライバ等々のインストール
ビルドに必要なものやカードリーダーのライブラリを導入。
ハードウェアも含めてちゃんとできたかは sudo pcsc_scan
で動作確認できる。
(参考にしたQiitaの記事内容とは異なり、B-CASのカードリーダーは SCMと認識されるものが届いており、 libccid_Info.plist
を編集する作業は必要なかった)
pi@raspberrypi:~ $ sudo curl -sL https://deb.nodesource.com/setup_12.x | sudo bash - pi@raspberrypi:~ $ sudo apt-get install -y vim cmake autoconf nodejs pcscd pcsc-tools libpcsclite-dev libccid vainfo
TVチューナーのファームウェアを導入。
pi@raspberrypi:~ $ cd Downloads/ pi@raspberrypi:~/Downloads $ wget http://plex-net.co.jp/plex/px-s1ud/PX-S1UD_driver_Ver.1.0.1.zip pi@raspberrypi:~/Downloads $ unzip PX-S1UD_driver_Ver.1.0.1.zip pi@raspberrypi:~/Downloads $ sudo cp PX-S1UD_driver_Ver.1.0.1/x64/amd64/isdbt_rio.inp /lib/firmware/
B-CASのデコード用ライブラリを導入。
pi@raspberrypi:~/Downloads $ wget https://github.com/stz2012/libarib25/archive/master.zip pi@raspberrypi:~/Downloads $ unzip master.zip pi@raspberrypi:~/Downloads/libarib25-master $ cmake . pi@raspberrypi:~/Downloads/libarib25-master $ make pi@raspberrypi:~/Downloads/libarib25-master $ sudo make install pi@raspberrypi:~/Downloads/libarib25-master $ cd ..
録画用コマンドの導入
pi@raspberrypi:~/Downloads $ wget http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.2.tgz pi@raspberrypi:~/Downloads $ tar xvzf recdvb-1.3.2.tgz pi@raspberrypi:~/Downloads $ cd recdvb-1.3.2/ pi@raspberrypi:~/Downloads/recdvb-1.3.2 $ ./autogen.sh pi@raspberrypi:~/Downloads/recdvb-1.3.2 $ ./configure --enable-b25 pi@raspberrypi:~/Downloads/recdvb-1.3.2 $ make pi@raspberrypi:~/Downloads/recdvb-1.3.2 $ sudo make install
Mirakurun(チューナーサーバ)の導入
pi@raspberrypi:~/Downloads $ sudo npm install pm2 -g pi@raspberrypi:~/Downloads $ sudo npm install mirakurun -g --unsafe-perm --production pi@raspberrypi:~/Downloads $ sudo mirakurun init
Mirakurun にチューナーの設定を追記
pi@raspberrypi:~/Downloads $ sudo mirakurun config tuners
- name: PX-S1UD-1 types: - GR command: recdvb --b25 --dev 0 <channel> - -
pi@raspberrypi:~/Downloads $ sudo mirakurun restart pi@raspberrypi:~/Downloads $ curl -X PUT "http://192.168.10.128:40772/api/config/channels/scan" pi@raspberrypi:~/Downloads $ sudo mirakurun restart
Mirakurun 経由で、TVチューナー・B-CASのデコード・録画用コマンドが動作するか確認
# VLC でネットワークストリーム再生 http://192.168.10.128:40772/api/channels/GR/25/stream
Chinatu (録画サーバ)の導入
pi@raspberrypi:~/Downloads $ git clone https://github.com/Chinachu/Chinachu.git pi@raspberrypi:~/Downloads $ cd Chinachu/ pi@raspberrypi:~/Downloads/Chinachu $ ./chinachu installer # 1) Auto (full) を選択
ARM(Raspberry Pi)だと Chinachu は node と ffmpeg をうまく扱えないので、手動でシンボリックリンクを貼る。
pi@raspberrypi:~/Downloads/Chinachu $ cd .nave pi@raspberrypi:~/Downloads/Chinachu/.nave $ rm node pi@raspberrypi:~/Downloads/Chinachu/.nave $ rm npm pi@raspberrypi:~/Downloads/Chinachu/.nave $ ln -s /usr/bin/node . pi@raspberrypi:~/Downloads/Chinachu/.nave $ ln -s /usr/bin/npm . pi@raspberrypi:~/Downloads/Chinachu/.nave $ cd ../usr/bin pi@raspberrypi:~/Downloads/Chinachu/usr/bin $ rm avconv pi@raspberrypi:~/Downloads/Chinachu/usr/bin $ rm avprobe pi@raspberrypi:~/Downloads/Chinachu/.nave $ ln -s /usr/bin/ffmpeg avconv pi@raspberrypi:~/Downloads/Chinachu/.nave $ ln -s /usr/bin/ffprobe avprobe
pi@raspberrypi:~/Downloads/Chinachu $ echo [] > rules.json pi@raspberrypi:~/Downloads/Chinachu $ cp config.sample.json config.json pi@raspberrypi:~/Downloads/Chinachu $ vim config.json # `"uid": "pi",` `"recorderdDir": "/mnt/nas/recorded/"` へ変更
Chinachu の起動と自動起動。前後に sudo reboot
して再起動しておくと良い。
pi@raspberrypi:~/Downloads/Chinachu $ sudo pm2 start processes.json pi@raspberrypi:~/Downloads/Chinachu $ sudo pm2 save
感想など
これで、Raspberry Pi でVLCを用いたリアルタイムのストリーム再生・録画が可能となった。TVでの視聴にはNAS経由で行えば良い(これは以前から行っていた)ので楽チンだ。エンコードについてはこれはこれで沼っぽいので別途ハマることにする。Raspberry Pi で録画予約のない日中にバッチエンコードでもするかな。
作業内容はネットワークやデバイスドライバのセットアップがほとんどを占めていた・・ものの、ちょこちょことハマっている。再起動をする必要がある箇所でしていない・・といった凡ミスがあったり、原因不明で録画ファイルが作成されずsdカードにOS焼く所からやり直し・・みたいな裏のゴタゴタがあった。のだが、結果ちゃんと動作するものが作れてよかったよかった。
普段お仕事(うぇぶえんじにあ)で触るのはDockerやクラウドで、よしなにしてくれている箇所だったので良い経験になった。