raspberry pi4をTVサーバにする1(別サーバにつながったB-CASを利用)

#はじめに
今回の構成は、すでにある録画サーバーのB-CASカードを間借りしてTVサーバを立ち上げます。
うまくできればいずれ旧サーバーを退役させたい。

#まずは録画できるところまで
まず、コマンドラインで録画できるところまでやります。
このあとmirakrun/chinachuを入れてTVサーバー化します。

##作業用ディレクトリを掘る
まずは、作業用のディレクトリを作りましょうか。なんでもいいですが、
`mkdir ~/tvserver`
ぐらいで。
`cd ~/tvserver`
で作ったディレクトリに入っておきましょう。

##PX-S1UDのドライバのインストール
ドライバはPLEXにあるドライバをとってきて、その中にあるisdbt_rio.inpというファイルを/lib/firmware/の下に置くだけです。
なぜかx64/amd64のドライバでOKです。

`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/`

##カードリーダードライバインストール
今回カードリーダは本体につなぎませんが、これ入れないとこのあとのlibarib25インストールとかができないので入れます。

`sudo apt-get install build-essential git`

`sudo apt-get install pcscd libpcsclite-dev libccid pcsc-tools`

#B-CASデコードライブラリのインストール
libarib25をコンパイルするのにcmakeを使うのでcmakeをインストールします。また、cmakeするために、g++,automake,autoconfが必要なので、それも入れておきます。
`sudo apt install cmake g++`
`sudo apt install automake autoconf`

`wget https://github.com/stz2012/libarib25/archive/master.zip -O libarib25.zip`
`unzip libarib25.zip`
`cd libarib25-master`
`cmake .`
`make`
`sudo make install`

移動したディレクトリから戻っておきます。
`cd ~/tvserver`

#B-CASクライアントのインストール
WindowsでBonCasProxyとか呼ばれているものですね。
`git clone https://bitbucket.org/gn64/rec10.git`
`cd rec10/b25-remote`
`make`
`sudo make install`

移動したディレクトリから戻っておきます。
`cd ~/tvserver`

このライブラリは以下の環境変数を参照して動きます。
※以下は192.168.0.50のコンピュータでBonCasLinkのサービスがポート6900で動いている想定での例。
`export LD_PRELOAD=/usr/local/lib/b25-client.so`　b25-client.soのパス　
`export B25_SERVER_IP=192.168.0.50`　BonCasLinkサーバが動いているPCのIPアドレス
`export B25_SERVER_PORT=6900`　BonCasLinkのサーバのポート番号

#録画用コマンドのインストール
recdvbコマンドをインストールします

`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`
`sudo chown -R $(whoami) .`
`./autogen.sh`
`./configure --enable-b25`
`EXTRA_SID=1 make`
`sudo make install`

ここでさっきのb25-remoteを使って動かせるようにrecdvbをラッピングしたシェルを作ります
***注意：chinachuなどの録画アプリは、録画コマンドの強制停止にkillコマンドを発行するようですが、***
***ラッピングシェルをkillすることになるので、本体のrecdvbがゾンビ化してしまいチューナーを掴みっぱなしにしてしまいます。***
***なので別の方法を検討中。まずは/etc/environmentに前述の環境変数を設定してみるも、***
***コマンドラインでrecdvb起動した時は、ちゃんと環境変数を読み込んでデコードできるのに、***
***chinachu(というかMirakurun)からの実行ではうまく環境変数を読み込んでくれない。***

***2020/3/17追記***
***[pm2で環境変数の変更が反映されない時の解決策](https://qiita.com/tomboyboy/items/d64b00d53518b9de7b91)にあるように、pm2でmirakurunやchinachuのrestartをしてみたが、それでもダメ。手詰まり気味。***


cd /usr/local/bin
好きなエディタで以下の様に入力
※以下は192.168.0.50のコンピュータでBonCasLinkのサービスがポート6900で動いている想定での例。
sudo vi recdvb_remote

```
export LD_PRELOAD=/usr/local/lib/b25-client.so
export B25_SERVER_IP=192.168.0.50
export B25_SERVER_PORT=6900
/usr/local/bin/recdvb "$@"
```
※exportは要らないかもしれない
`sudo chmod +x recdvb_remote`

##まずは録画できるか確認
recdvbコマンドで録画がうまく行くか試します。
このあとの予約録画システムなどは、このコマンドを起動するので、これが動かないと話になりません。
※以下の32というのはチャンネルです。以下のページを見て、お住まいの地域に合わせて変えてね。
[マスプロアンテナのページ](https://www.maspro.co.jp/contact/bro/bro_ch.html)
※10は録画秒数です

`recdvb_remote --b25 --strip 32 10 ~/test.m2ts`

うまく行くと以下のようなメッセージを出して動きます。

```shell:
using B25...
enable B25 strip
pid = 27208
device = /dev/dvb/adapter0/frontend0
Using DVB card "Siano Mobile Digital MDTV Receiver"
tuning to 587143 kHz
polling..ok
SNR: 0

Recording...
Recorded 10sec
```


b-casデコードがうまくできていないと

```shell:
using B25...
enable B25 strip
pid = 26923
device = /dev/dvb/adapter0/frontend0
Using DVB card "Siano Mobile Digital MDTV Receiver"
tuning to 587143 kHz
polling..ok
SNR: 250
bcas->init failed
Cannot start b25 decoder
Fall back to encrypted recording

Recording...
Recorded 10sec
```
おそらく環境変数の設定が間違っている

---
mirakurun/chinachu編に続く...