Raspberry Pi 3 + Mirakurun + 過去の資産 HDUS でチューナーサーバー構築

#はじめに動機とか
もはや化石で現在のWindows機で普通には使えないSKNET MonsterTV HDUS。
Linuxでならまだまともに使えるっぽかったのと、Mirakurunという面白いシステムを見つけたので、
余らせているRaspberry Pi 3を使ってチューナーサーバーを作ってみた。


#機材など

##必要なものとか

###Raspberry Pi 3
お家で腐らせてたもの
[<img width="400" alt="もはや旧型のRaspberry Pi 3 model B" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437909/eb1539de-0c08-8d43-5c7b-f1aa66860fb9.png">](https://www.raspberrypi.org/)


###microSDカード
とりあえず8GB以上
なんでもいいです

###RaspberryPiのOS
今回使ったのは2019-04-08-raspbian-stretch-full.zip

###SKNET MonsterTV HDUS
[<img width="400" alt="Monster TV HDUS" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437909/5cf380f8-041e-4ac5-f164-ec8a888fb388.jpeg">](https://sknet-web.co.jp/product/mtvhdus.html)
PT2入れ替え後、退役していたもの。
販売から10年経ちました。
今更誰が持ってるんだレベルですが、
たまにジャンク数百円とかで転がってるのを見かけます。

###HDUSのドライバ
MTVHDU_080701_Drv.zip
ファームウェア(SKNET_AS11Loader.sys)が必要なので公式のドライバファイルを利用します。
たまたま手元のHDD内にありましたが、
どうやらこのファイルすでに公式から消えてるらしいです。HDUS関係の場所探すとあるっぽいです。


###SCR331DI-NTTCom
![img006_SCR331DI.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437909/3ad3a0aa-9200-b650-73eb-b73f44dc9e4f.jpeg)
ICカードリーダー
身近な中古屋さんやジャンク屋さんで300円とか500円とかでよく転がってます。
お役所が総入れ替えしてるので、大量放出されたのかな。

###B-CASカード
チューナー付属品
ICカードリーダーに入れて使いますん

###アンテナケーブル
HDUSにつなぎます。
まぁ当然ですね。

###チューナー操作するためのrecfriio
recfriio https://github.com/stz2012/recfriio
古いですが普通に使えます。
C++17でちょっと問題あるっぽいですので、そのうちパッチ書きたいな。

###チューナーサーバーソフト
Mirakurun https://github.com/Chinachu/Mirakurun
便利なものがありました。
チューナーの一括管理機能があるので、複数ある場合は更に便利になります。

##その他あると便利なもの
###給電付きのUSB-miniBケーブル
<img width="200" alt="給電付きminiB" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437909/8c275510-9eef-a180-3e84-4156216c9b87.jpeg">
Y字ケーブルとか呼ばれてるやつ。
結構慢性的に低電圧警告出るので、ACつないでやるとたぶん安定します。
なお絶滅危惧種


#作業開始
それではやっていきましょうか

##OS周りの準備
今回はRaspberry PiのOSは標準のRaspbianで
https://www.raspberrypi.org/downloads/raspbian/
書き込み方はLinuxとかならddでWindows機ならWin32DiskImagerでしょうか
逸反人の方は普通に出来ると思うので詳細は省いて次へ。わからない人はググる先生でお願いします。

SD用意したらとりあえず一通り繋いでRaspberry Piを起動。

デスクトップでてきますが、以降コマンドなのでGUIターミナルでもSSH接続して作業でも構いません。

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

```
root@raspberrypi:~# apt-get install -y libglib2.0-dev libusb-dev pcscd libpcsclite-dev libccid libboost-dev libboost-thread-dev libboost-system-dev libboost-filesystem-dev
```

これでHDUS使用に必要なパッケージが入ります。

##カードリーダー
pcsc_scanコマンドで認識確認出来ます。
ちゃんとカード認識されてない場合は差し直しと向きの確認。

##チューナーの準備

必要なツールをまず引っ張ってきます

```
root@raspberrypi:~# git clone https://github.com/stz2012/recfriio
```

###ファームウェア転送ツールas11loader

```
cd recfriio/as11loader
make
```
HDUSのドライバ SKNET_AS11Loader.sys を同じディレクトリに置いて実行すると、
ファームが送り込まれHDUSが使用可能状態になります。

lsusbして ID 3275:6051 が見えてればOK
ID 1738:5211がファーム送られると変わります。
![as11loader_.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437909/876d77fd-2c82-4bcc-4607-1cb2daae22b9.png)

実行時のディレクトリに SKNET_AS11Loader.sys が置いてないとちゃんと動いてくれない困った子です。
HDUSの電源が切れるたびにファーム転送はやる必要があります。

このままだと不便なので、udevでUSB接続時に自動で実行するようにrulesを書きます。

```
root@raspberrypi:~# nano /etc/udev/rules.d/99-hdus.rules
```

```
SUBSYSTEM=="usb", ACTION=="add", \
        ATTRS{idVendor}=="1738", ATTRS{idProduct}=="5211", \
        RUN+="/bin/sh -c 'cd /root/recfriio/as11loader;./as11loader'"
#       ※as11loaderのファーム置いてあるパスに注意※
```

書き換えたあと次のコマンドでルールを読み直しさせます。

```
udevadm control --reload
```

これで再起動やUSBを抜き差ししても自動で実行されるようになりました。


###録画ツールrecfriio
そのままrecfriioをmakeするとなぜかセグフォします。
TS Splitter機能がちゃんと動いてないらしいので外すかスレ情報をもとに修正したという部分を戻す必要があります。。
MakefileからTSSL = -DTSSLをコメントアウト
または buffer 部の変更をしてからmakeします。

```
--- Makefile
+++ Makefile
@@ -3,7 +3,7 @@
 UDP = -DUDP
 #HTTP = -DHTTP
-TSSL = -DTSSL
+#TSSL = -DTSSL
```
または

```
--- a/recfriior5/tssplitter_lite.hpp
+++ b/recfriior5/tssplitter_lite.hpp
@@ -65,7 +65,7 @@ typedef struct splitter {
 typedef struct _splitbuf_t
 {
     int size;
-    u_char buffer[32*1024*1024];
+    u_char buffer[1024*1024];
 } splitbuf_t;

 splitter* split_startup(char *sid);
```


書き換えたらmake
どっちが正解なのかはわかっていませんがこれで動くようになります。
makeは結構時間かかります。
無事完了したら ./recfriio コマンド打ってみてusage出ればOKです


```
root@raspberrypi:~/recfriio/recfriior5# ./recfriio
usage: ./recfriio [--b25 [--round N] [--strip] [--EMM] [--sync]] [--hdus] [--hdp] [--lockfile lock] [--lnb] [--udp ip [--port N]] channel recsec destfile
以下略
```

仮動作確認
とりあえず数秒くらい何か動くかなというテスト

```
root@raspberrypi:~/recfriio/recfriior5# ./recfriio --b25 --hdus 23 5 /dev/null
B25Decoder initialized.
Tuner type is HDUS.
Search friios from dir: /dev/bus/usb
2 friios found:
/dev/bus/usb/001/009: use this friio.
/dev/bus/usb/001/004: not used.
device: /dev/bus/usb/001/009
opening HDUS...done.
freq = 533
CNR: 28.8649
Signal level: 55.2142
Output ts file.
sync 10 bytes
done.
Rec time: 3.486300 sec.
CNR: 28.1447
Signal level: 53.9017
closing HDUS...done.
```

デバイス開くのでroot権限は必須です。
friioとか出てくるけど仕様です。
とりあえず動作は問題なさそうですね。

recfriioは/usr/loacl/sbinあたりにコピーして置いとくといいとおもいます。


##チューナーサーバーをインストール
サーバーですので他のPCから利用できるようにするためにインストールします。
複数チューナーを繋いでる場合の管理等も出来るので便利になります。

OS標準のnodejsパッケージが古すぎて動かせないのでroot環境で専用に推奨？バージョンを用意します。

https://github.com/nvm-sh/nvm
https://github.com/Chinachu/Mirakurun

```
root@raspberrypi:~# curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.34.0/install.sh | bash
root@raspberrypi:~# source ~/.nvm/nvm.sh
root@raspberrypi:~# nvm install v10.15.0
root@raspberrypi:~# npm install pm2 -g
root@raspberrypi:~# npm install mirakurun -g --unsafe-perm --production
```

これでもう動いちゃいますがそのままだとチューナーが無いので追加してやります。
書式は次な感じでチューナーの数だけ書くっぽいです。

```
root@raspberrypi:~# nano /usr/local/etc/mirakurun/tuners.yml
```

```
- name: HDUS #1
  types:
    - GR
  command: recfriio --b25 --hdus <channel> - -
  decoder: 
  isDisabled: false

- name: HDUS #2
  types:
    - GR
  command: recfriio --b25 --hdus <channel> - -
  decoder: 
  isDisabled: false
```

今回はHDUS2機あるので2つ書いてます。
decoder使わないのでとりあえず空っぽ。
行削除でもいいかも？
細かい書式はマニュアルを参照で
https://github.com/Chinachu/Mirakurun/blob/master/doc/Configuration.md

別途decoder行使う場合は arib-b25-stream-test をインストールしてやる必要があるらしいです。

```
npm install arib-b25-stream-test -g --unsafe
```

あとはmirakurunに認識させるために再起動させてみます

```
root@raspberrypi:~# mirakurun restart
```

これでチューナーサーバーとしては完成。

##使用方法等

既にWindows機等でチューナー利用があれば
BonDriver_Mirakurun https://github.com/Chinachu/BonDriver_Mirakurun/releases
で利用するのがお手軽です。

BonDriver_Mirakurun.iniを編集してSERVER_HOST行をサーバーのIPに書き換えてやれば
TvTestやEpgDataCap_Bon等のBonDriverを使うソフトで利用できるようになります。

~~サーバーとして使うのであればこれでいいのではないかと思います。~~

本来の利用方法？としてのChinachuやEPGStationで録画サーバーに仕立て上げたりも出来るので、活用の幅は広いです。
EPGStation試しに入れてみましたがイマイチよくわかってないです。
<img width="200" alt="EPGStationよくわからんのでサンプル画像ぽく" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/437909/09cc232f-1a0a-8245-ed86-747eb273bd7a.png">


#最後に
Windowsだと既に対応打ち切られているため、まともに利用出来ないとずっと放置していたものでしたが、、
10年経った現在になって過去の遺産が無事活用出来るようになりました。
しかもRaspberryPi3という省電力サーバーという形で利用できるのが嬉しいものです。

先人の解析者たち、便利なチューナーサーバ作者に感謝を。


##蛇足
どうやら検索するとドライバセットなるものがあったようですね。
単に過去の資産を使いたいだけであれば、そういうのも手かもしれませんね。

ちょっと追加で
最近はDockerが便利だったのでなんとなく書いてみました。
参考にでもどうぞ
https://www.axfc.net/u/4023727