Raspberry Piで録画サーバー

レコーダーがほしいが高いのでRaspberry Piで作る。


ラズパイTV視聴&録画サーバー

・省電力
・家中どこでもリアルタイム視聴&録画データ視聴
・いろんなデバイスで再生可能


使用機材
・raspberry pi 3 model b 家にあったやつ
・PX-S1UD V2.0(USBドングルTVチューナー)Amazon:4840円
・SCR3310-NTTCom(カードリーダー)ヤフオク:1000円
・B-CASカード(こわれたチューナーから拝借)
・HDD500GB 家にあったやつ
・アンテナケーブル Amazon:552円
・ACアダプタ付きUSBハブ 家にあったやつ

家にあったもの+追加6392円
意外と高い…
※B-CASカード単体で購入はできません
※録画ファイルは個人で楽しんでください

最終的に


こんなことができます。

構成

OS:Raspbian buster Lite
チューナー制御:Mirakurun
録画制御:chinachu γ

手順

⓪前準備

適宜実施
・ssh許可
・JISキーボード設定
・ロケーション設定
・静的IP設定(以下例として192.168.0.81で表記 パイだけに81)

①HDDをマウント

HDDの接続確認
HDDを接続して

$ sudo fdisk -l | grep /dev/sd
 Disk /dev/sda: 465.8 GiB, 500107860992 bytes, 976773166 sectors

sdaのaの部分を覚える

HDDパーティション設定(覚えたaの部分は適宜変更)

$ sudo fdisk /dev/sda
$ Command (m for help): d #パーティション削除
$ Command (m for help): p #状態確認
$ Command (m for help): n #パーティション作成
$ Command (m for help): p #状態確認
$ Command (m for help): w #書込み
 The partition table has been altered!
 Calling ioctl() to re-read partition table.
 Syncing disks.

HDDフォーマット

$ sudo mkfs.ext4 /dev/sda
 Allocating group tables: done
 Writing inode tables: done
 Creating journal (32768 blocks): done
 Writing superblocks and filesystem accounting information: done  

HDDのUUDIを確認

$ sudo blkid /dev/sda
 /dev/sda: UUID="66d07669-6e68-4fda-90de-e2f74bdc7cec" TYPE="ext4"

起動時に自動的にマウントされるよう設定

$ sudo vim /etc/fstab

以下追記(確認したUUIDに適宜書換え)
UUID=66d07669-6e68-4fda-90de-e2f74bdc7cec /mnt/hdd1 ext4 nofail 0 0

再起動

$ sudo reboot
マウントされていること確認
$ df -h | grep /mnt/hdd1
 /dev/sda         458G  0G  458G   0% /mnt/hdd1

②ユーザー追加(任意)

$ sudo adduser tv    #ユーザー追加
$ sudo gpasswd -a tv sudo #sudoできるように
$ sudo adduser tv video    #videoグループ

録画先のディレクトリ権限を変更する(Videoグループにしないと録画できない)
$ sudo chown -R tv:video /mnt/hdd1

~~~~~以下追加ユーザーで操作~~~~~

③sambaで共有設定

録画ファイルの共有用に設定

sambaインストール
$ sudo apt install samba
samba設定
$ sudo vim /etc/samba/smb.conf
以下追記
[tv]
   comment = Raspberry Pi
   path = /mnt/hdd1
   guest ok = yes
   read only = no
   browsable = no
   force user = tv

samba再起動

$ sudo service smbd restart

windowsPCから接続する場合は
エクスプローラーで以下にアクセスして接続確認
\\192.168.0.81\tv

④チューナーの接続

ドライバのファイルをfirmware配下にコピー

$ 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
$ sudo reboot now

接続確認
チューナーを接続した状態で

$ ls /dev/dvb/
adapter0

と表示されればOK

⑤カードリーダーの接続

必要なパッケージのインストール

$ 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(Ctrl-Cで抜ける)

B-CASデコード用ライブラリのインストール

$ sudo apt-get install cmake g++
$ wget https://github.com/stz2012/libarib25/archive/master.zip -O libarib25.zip
$ unzip libarib25.zip
$ cd libarib25-master
$ cmake .
$ make
$ sudo make install

⑥録画用コマンドのインストール

必要なパッケージのインストール

$ sudo apt-get install autoconf 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
$ make
$ sudo make install

動作確認(17チャンネルを10秒間録画)

recdvb --b25 --strip 17 10 /mnt/hdd1/test.m2ts

マウントしたHDDに録画したファイルが作成されていればOK
エラーが起こっている場合はこのサイトでチャンネルが存在するか確認
(リモコンのチャンネルではなく物理チャンネル)

★この時点でリアルタイム視聴が可能★

接続元のIPアドレスをホワイトリストに登録し

$ sudo vim /etc/hosts
$ recdvb --b25 --strip --http 8080

を実行するとTV起動

VLCアプリのネットワークから、
http://192.168.0.81:8080/[チャンネル]
で視聴可能
金沢エリアは以下
http://192.168.0.81:8080/13
http://192.168.0.81:8080/14
http://192.168.0.81:8080/15
http://192.168.0.81:8080/16
http://192.168.0.81:8080/17
http://192.168.0.81:8080/23

終了するときは

$ ps ax | grep recdvb
でプロセスIDを確認し
$ kill [プロセスID]

⑦Mirakurunのインストール

GitHubの手順に従ってインストール

Node.jsインストール

$ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash -
$ sudo apt-get install -y nodejs

一緒にNode.jsのパッケージ管理ツールnpmもインストールされる

npmコマンドで必要なパッケージインストール

$ sudo npm install pm2 -g
$ sudo npm install mirakurun -g --unsafe-perm --production
$ sudo npm install rivarun -g
$ sudo npm install arib-b25-stream-test -g --unsafe

TVチューナーの設定

$ sudo EDITOR=vim mirakurun config tuners
以下追記
- name: PX-S1UD-1
  types:
    - GR
  command: recdvb --b25 --strip --dev 0  - -
  isDisabled: false

チャンネルの設定

$ sudo EDITOR=vim mirakurun config channels
以下追記(地域に合わせて) nameは適当でわかればOK
- name: NHK総合
  type: GR
  channel: '15'
- name: NHKEテレ
  type: GR
  channel: '13'
- name: テレビ金沢
  type: GR
  channel: '17'
- name: 北陸朝日放送
  type: GR
  channel: '23'
- name: 北陸放送
  type: GR
  channel: '14'
- name: 石川テレビ放送
  type: GR
  channel: '16'

または以下コマンドでチャンネルをスキャン

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

Mirakurun再起動
statusがonlineになっていればOK

Mirakurunを通してリアルタイム視聴するにはVLCで以下にアクセス
http://192.168.0.81:40772/api/channels/GR/13/stream
http://192.168.0.81:40772/api/channels/GR/14/stream
http://192.168.0.81:40772/api/channels/GR/15/stream
http://192.168.0.81:40772/api/channels/GR/16/stream
http://192.168.0.81:40772/api/channels/GR/17/stream
http://192.168.0.81:40772/api/channels/GR/23/stream

⑧Chinachu (録画サーバー) 設定

必要なパッケージのインストール

sudo apt-get install build-essential curl git-core vainfo

chinachuはマウントしたHDDにインストール

$ git clone git://github.com/kanreisa/Chinachu.git /mnt/hdd1/chinachu
$ cd /mnt/hdd1/chinachu
$ ./chinachu installer
1. Auto を選択

録画ルールの初期ファイル作成

$ echo "[]" > rules.json

設定ファイルの編集

$ cp config.sample.json config.json
$ vim config.json
以下設定
"uid": "tv"
"recordedDir" : "/mnt/hdd1/recorded/",

Chinachuの起動確認

$ cd /mnt/hdd1/chinachu/
$ ./chinachu service wui execute

Ctrl+Cで停止
Errorが出なければOK

Node.jsとnpmのバイナリへのリンクを追加

$ cd .nave/
$ ls -al
node -> /mnt/hdd1/chinachu/.nave/installed/10.16.3/bin/node
npm -> /mnt/hdd1/chinachu/.nave/installed/10.16.3/bin/npm

nodeとnpmのリンク設定を確認する

この設定に合わせてリンクする

$ cd installed/
$ mkdir 10.16.3
$ mkdir 10.16.3/bin
$ cd 10.16.3/bin/
$ ln -s /usr/bin/node .
$ ln -s /usr/bin/npm .

ちなみにNode.jsのバージョンは

$ nodejs -v
v12.16.2

で、リンクの10.16.3とは異なるが、ただのフォルダ名なので気にしない。

サービスに登録

$ cd /mnt/hdd1/chinachu/
$ sudo pm2 startup
$ sudo pm2 start processes.json
$ sudo pm2 save

Mirakurun再起動

$ sudo mirakurun restart

EPG情報の取得テスト

$ cd /mnt/hdd1/chinachu
$ ./chinachu update

エラーが出なければOK

エラーが出た場合うまくいかない場合はMirakurunのログを確認してみる

$ sudo mirakurun log server

チャンネル登録ができているか確認するには以下

$ rivarun --list | sed 's/},/},n/g'

chinachuのダッシュボードにアクセス
http://192.168.0.81:20772/
番組表がうまく取得できていればOK

~~~~~~~~~~~~~~~~~~~~~~
TVの視聴、録画ファイルの視聴はKodiというアプリがおすすめ
設定参考サイト
https://github.com/Chinachu/Chinachu/wiki/Gamma-Installation-V2

うちの場合はAndroidTVにKodiをインストールして、ネットワーク越しに録画ファイルを視聴している。
そのほかPCにもKodiをインストールして、家じゅうどこでもTVが視聴できる環境ができた!

※その他設定
Mirakurunがメモリを食うのでラズパイのSWAPメモリ容量は2Gに変更

Mirakurunのバッファがオーバーフローしてフリーズするのでバッファサイズを変更

$ sudo vim /usr/local/etc/mirakurun/server.yml
最後の行に、以下を追加する
highWaterMark: 67108864