kumak1’s blog

kumak1のイラストや技術ログ

Raspberry Pi 4 と NAS で録画環境を整える

f:id:kumak1:20200102193438p:plain
AVラックがワチャワチャしだしたの図

ウチは今まで nasne を使って楽チン運用をしてきたのだけど、 生産も終わってサービス停止もそう遠くない将来にきてしまう 。 容量1TBの運用も窮屈に感じてきたし、元々運用していたNAS(8TB)を利用できる録画サーバーを作ることにした。 先人の多くの記録があったので「わたしでもできるっしょ、やってみっか」となった。感謝。

重複する箇所は多々あるが、私の環境構築に必要なコマンドは全て記述しておく。

使ったハード

割り当て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 PiSSH 接続するために

慣れた端末(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をポチポチするだけで用意できる。

f:id:kumak1:20191231190246p:plain
共有フォルダを作成

f:id:kumak1:20191231190631p:plain
NFSでのアクセスを許可する

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

感想など

f:id:kumak1:20200102193807p:plain
録画できたの図(NAS をマウントした Mac から参照できている)

これで、Raspberry PiVLCを用いたリアルタイムのストリーム再生・録画が可能となった。TVでの視聴にはNAS経由で行えば良い(これは以前から行っていた)ので楽チンだ。エンコードについてはこれはこれで沼っぽいので別途ハマることにする。Raspberry Pi で録画予約のない日中にバッチエンコードでもするかな。

作業内容はネットワークやデバイスドライバのセットアップがほとんどを占めていた・・ものの、ちょこちょことハマっている。再起動をする必要がある箇所でしていない・・といった凡ミスがあったり、原因不明で録画ファイルが作成されずsdカードにOS焼く所からやり直し・・みたいな裏のゴタゴタがあった。のだが、結果ちゃんと動作するものが作れてよかったよかった。

普段お仕事(うぇぶえんじにあ)で触るのはDockerやクラウドで、よしなにしてくれている箇所だったので良い経験になった。