Raspberry Pi でTVを見る録る！

# 目的

- TVを見る。
- TV番組を録る。
- 録ったTV番組を見る。
- 同一ネットワーク内ならできるようにする。

我が家には、モニターとなるものがTVしか存在しません。(surfaceをメインPCとして使っていますが、HDMIでの映像の入力はではできません。)RaspberryPiをつなげて使ったりするとTVが見ることができません。私は、TV見たいです。そこで、RaspberryPiでTVサーバーを構築できれば**同一ネットワーク**内ならばSurfaceやスマートフォンを使って視聴できると考えTVサーバーを構築することにしました。

# 参考にしたサイト

- [Raspberry Pi 3+Chinachuで地デジ録画サーバー構築](https://qiita.com/shotasano/items/3809b8f3e0b62d51d3c3)
- [Raspberry Pi 3 で TV チューナー鯖構築](https://qiita.com/ww24/items/0adc36c013511524da80)
- [とりあえずRaspberryPiにChinachu γを導入できた件](http://k-pi.hatenablog.com/entry/2017/07/30/151659)

上のサイトを参考にしました。どれも、非常によくまとまっています。ちょくちょく詰まったり私の環境と違ったので新たに行う人の参考になるように、自分でもう一度作るときにコピーするだけでできるようにするために書きます。

# 著作権について

最近、TV番組の著作権についての私が好きな某こわもて俳優がやっているTVCMを見ました。今回サーバーを作るにあたって少し調べてみました。

> 個人や家庭内で楽しむためにテレビ番組を録画することは、著作権を持っている人や会社の許可なく行うことができます。  
> [ホットライン　テレビ番組著作権　テレビ番組の著作権とは](https://tv-copyright.jp/about_c/index.html)

私が録ったものは~~一緒に見る人がいないので~~私しか見ません。個人で楽しむ範囲ですから録画が許されると考えています。ですが

> - テレビ番組を録画したDVDやビデオテープを許可無く販売すること
> - テレビ番組を録画して、許可なくインターネット上で公開すること
> - テレビ番組を録画して、許可なくファイル交換ソフトで共有すること  
> [ホットライン　テレビ番組著作権　テレビ番組の著作権とは](https://tv-copyright.jp/about_c/index.html)

などは、著作権違反に当たります。十分に気を付けてください。

<!--  -->

# 下準備

## 用意するもの（ハード）

- Raspberry Pi Model B(以下raspi)
    - 本体
    - [Raspberry Pi　初期設定](https://qiita.com/sigma7641/items/995c7bb07eab408b9d0e)がなされているとして書きます。
        - ただし、ipアドレスの固定、webminのインストールは必要ありません。
- ~~[PLEX USB接続型フルセグ対応地上デジタルTVチューナー PX-Q1UD](https://www.amazon.co.jp/gp/product/B079YD3QT3/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)~~
    - うまくいかなかったので↓で行いました。時間があるときに再挑戦します。
- [PLEX USB接続ドングル型地上デジタルTVチューナー PX-S1UD V2.0](https://www.amazon.co.jp/gp/product/B0141NFWSG/)（以下TVチューナー）
    - TVチューナーです。
- [NTTコミュニケーションズ 接触型 USBタイプ ICカード リーダーライター ACR39-NTTCom](https://www.amazon.co.jp/gp/product/B017Y8QV4O/ref=ppx_yo_dt_b_asin_title_o00_s00?ie=UTF8&psc=1)（以下カードリーダー）
    - B-CASカードの読み取りに使います。
- B-CASカード
    - 頑張って手に入れてください。
- TVの電波
    - TVチューナーにつなぎます。

- 用意するもの（ソフト）
    - [VLC](https://www.videolan.org/vlc/download-windows.ja.html)
        - TVを見るために使います。
        - PCやスマートフォン上にインストールしてください。

## 接続

TVチューナーとカードリーダーのUSBをraspiに接続してください。また、カードリーダーにB-CASカードを挿入してください。すくなくとも、私の場合はB-CASカードとカードリーダの見た目は上下逆になりました。
（写真は PX-Q1UDなので参考）
![_20190309_194712.JPG](https://qiita-image-store.s3.amazonaws.com/0/308715/84bfb723-01d8-9388-d239-602c15111274.jpeg)

# TVチューナー

ファームウェアをダウンロードします。

```bash
sudo apt-get install -y firmware-siano
```

# カードリーダー

```bash
sudo apt-get install -y build-essential git pcscd libpcsclite-dev libccid pcsc-tools
```

これだけです。`pcsc_scan`を行っていろいろ出てきますが、最後に` Japanese Chijou Digital B-CAS Card (pay TV)`と出てくれば成功です。

# B-CASカードのデコード用ライブラリ

暗号化された状態で地デジ放送は行われているので復号するために必要らしい。

```bash
sudo apt-get install -y cmake g++
git clone https://github.com/stz2012/libarib25.git
cmake .
make
sudo make install
cd ~
```

# 録画コマンド

```bash
sudo apt-get install -y automake autoconf
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.tgz
./autogen.sh
./configure --enable-b25
make
sudo make install
cd  ~
```
`sudo recdvb --b25 --dev 0 --strip --sid hd 20 10 test.m2ts`などを実行して録画できるか確認してください。なぜか`sudo`がないとTVチューナーにアクセスできませんでした。firmwareを開けないのかと思い権限をいじってみましたが変わらなかったので何か思い当たることがある人は教えてください。

# Mirakurun

チューナーサーバーをインストールします。[ここ](https://github.com/Chinachu/Mirakurun/blob/master/doc/Platforms.md)を参考にしてください。

## Node.js

Node.jsが必要なのでまずはNode.jsをインストールしていきます。

```bash
sudo apt-get install nodejs npm
sudo npm install -g npm # npmはアップグレードする必要があった。
```
 Node.jsの現在のバージョンは`nodejs -v`で確認できる。今回は`v8.11.1`だった。
npmの現在のバージョンは`npm -v`で確認できる。今回は`6.9.0`だった。

## pm2

プロセスをデーモン化したりの起動を管理するソフトです。

```bash
sudo npm install pm2 -g
```

## Mirakurunのインストール

```bash
sudo npm install mirakurun -g --unsafe --production
```

成功すればstatusが`online`となります。

## Mirakurunの設定

Mirakurunにチューナーの存在を教えてあげます。

```bash
sudo mirakurun config tuners
```

```vim
- name: PX-S1UD-1
  types:
    - GR
  command: sudo recdvb --b25 --dev 0 <channel> - -
```

Mirakurunでチャンネルの設定をします。

```bash
curl -X PUT "http://raspberrypi.local:40772/api/config/channels/scan"
```

`raspberrpi.local`の部分は自分のipアドレス(192.168.1.1など)やホスト名に変更してください。

これで、Mirakurunを介して地デジを見ることができます。

windowsのVLCでは`メディア`->`ネットワークストリームを開く`で`http://raspberrypi.local:40772/api/channels/GR/20/stream`と入力することで見ることができます。

`raspberrpi.local`の部分は自分のipアドレス(192.168.1.1など)やホスト名に変更してください。また、20の部分も自分が住んでいる地域の[**チャンネル**](https://www.maspro.co.jp/contact/bro/bro_ch.html)を入れてください。

地デジを見ることができたら成功です。

# Chinachu

[ここ](https://github.com/Chinachu/Chinachu/wiki)を参考にいしてください。

## Chinachuインストール

必要なパッケージをインストールします。

```bash
sudo apt-get install vainfo
```

```bash
git clone https://github.com/Chinachu/Chinachu.git
cd Chinachu/
./chinachu installer
```
Autoを選択してインストールしてください。数時間かかります。終了後`./chinachu service wui execute`で起動できるか確認してください。

## 自動起動の設定

- 設定ファイルの用意
- リンクを張る
- `pm2`を`save`する
- ログをとるように設定

設定ファイルを用意します。

```bash
cp config.sample.json config.json
echo [] > rules.json
```

`config.json`は設定を一か所だけ変える必要があります。

```bash
vim config.json
```

一行目の`"uid"`の値を自分のユーザー名に変える必要があります。

```vim
"uid": "pi",
```

次に`npm`と`node`にリンクを張ります。
まずは、`nodejs -v`で`nodejs`のバージョンを確認します。今回は`8.11.1`でした。`Chinachu/.nave/installed`の下に新たなディレクトリを作りリンクを張ります。
 
```bash
mkdir Chinachu/.nave/installed/8.11.1
mkdir Chinachu/.nave/installed/8.11.1/bin
cd Chinachu/.nave/installed/8.11.1/bin
ln -s /usr/bin/node .
ln -s /usr/bin/npm .
```

次に`pm2`の`save`をします。

```bash
cd Chinachu
sudo pm2 start processes.json
sudo pm2 save
```

ログの設定をします。

```bash
sudo pm2 logrotate -u root
sudo vim /etc/logrotate.d/pm2-root
```

以下を追記

```vim
/usr/local/var/log/chinachu-operator.stderr.log
/usr/local/var/log/chinachu-operator.stdout.log
/usr/local/var/log/chinachu-wui.stderr.log
/usr/local/var/log/chinachu-wui.stdout.log
{
weekly
rotate 4
missingok
notifempty
compress
delaycompress
copytruncate
create 0644 root staff
}

/usr/local/var/log/mirakurun.stdout.log
/usr/local/var/log/mirakurun.stderr.log
{
daily
rotate 7
missingok
notifempty
compress
delaycompress
copytruncate
create 0644 root staff
}
```

`sudo pm2 logs`を行うことでログを見ることができます。

あとは、これで、同一ネットワーク内にある場合は`http://raspberrypi.local:20772`にアクセスすることでChinachuにアクセスすることができます。(raspberrypi.localは自分のホスト名に適宜変換してください。)