Chinachuで録画サーバーを作った

https://chinachu.moe/

今まではメインで使っているデスクトップPCでアニメを録画していた。 特に土日の夜にアニメが集中していてPCを再起動することができずに不便。 録画専用のサーバーを作ることにした。

DockerやAnsibleでのコード化はしていてないので、自分のためにも過程をメモしておく。

ハードウェア

今ではプレミア価格になっているPT3が2枚付き。 ベースはProLiant MicroServer。 音はとても静か。 CPUが非力なので、ブラウザの視聴はカクカクで使い物にならなかった。

ICカードリーダーは、SCR3310-NTTCom。 確定申告の電子申請にも使える。

録画用に4 TBのHDDを増設した。 「Linux HDD増設」とかでググって使えるように。

概要

そもそも、ChinachuとMirakurunの関係が分かっていなかった。 ChinachuはMirakurunに放送の録画を投げる。 Mirakurunは複数のソフトから依頼を受け付けて、録画デバイスを上手いこと使い分ける。 EPG番組表の取得もMirakurunの仕事。 Mirakurunはさらに録画コマンドに処理を投げる。 下のレイヤーから作業を進めると動作確認ができて良い。

OS

ネットの記事を見るとUbuntuの例が多い。 Ubuntuを適当にインストールしてSSHで繋げられるようにする。

ドライバ

カードリーダーは標準ドライバで動く。 aptで何をインストールしたか忘れたけど、pcsc_scanJapanese Chijou Digital B-CAS Card (pay TV)と出てくれば良い。

PT3も標準ドライバで動く。 /dev/dvb/adapter?がPT3の枚数×4個見えれば良い。 偶数が衛星波、奇数が地上波。 使うドライバによって、使う録画コマンドが異なる。 標準ドライバのほうが安心だと思ったけど、PT3専用のドライバのほうが使っている人が多くて楽だったかもしれない。

録画コマンド

recdvb(PX-BCUD対応版)のインストール « » Sat's space

recdvbをインストール。 この記事に載っているコマンドで視聴可能な.tsファイルが生成されれば良い。 ただ、このままだとちょっと問題がある。

recdvbrecdvbchksigSNRが取得できない。

USB接続で地デジ4チャンネル録画できるチューナーPX-Q1UDを買ったそして試した - Write and Run

この記事のパッチを当てる。

BSプレミアムなどの番組情報が取得できない(録画もできない?)。PT3にTSIDを渡さないといけないチャンネルがあるらしい。TSIDが何で、どこのレイヤーで効いているのか、分からん。

PT3 + recdvb + MirakurunでNHK BSプレミアムのEGPが取得できない問題に対応 - I am a wannabe.

PT3環境でmirakurun と http://www13.plala.or.jp/sat/recdvb/recdvb-1.3.1.tgz の組み合わせでEPGが取得できない問題に対する修正

このパッチを当てて、さらにコメント欄の修正を加える。 この辺りは4月以降のBSチャンネル再編で修正が必要になりそう。

Mirakurun

https://github.com/Chinachu/Mirakurun

npmに登録されている。 が、一部のチャンネルで録画したファイルがTVTestで視聴できなかった。

PATの書き換えでTSパケットの空きを0xffで埋めるようにした by kusano · Pull Request #34 · Chinachu/Mirakurun

この修正を加えたら、TVTestでも見られるようになった。 手元でビルドしてインストール。 手順は、

https://github.com/Chinachu/Mirakurun/blob/master/.github/CONTRIBUTING.md

に載っている。

mirakurun config [server|tuners|channels]でそれぞれ設定。

serverは初期設定のまま。

tuner。

- name: PT3-S1
  types:
    - BS
    - CS
  command: recdvb --dev 0 <channel> - -
  decoder: arib-b25-stream-test

- name: PT3-S2
  types:
    - BS
    - CS
  command: recdvb --dev 2 <channel> - -
  decoder: arib-b25-stream-test

- name: PT3-S3
  types:
    - BS
    - CS
  command: recdvb --dev 4 <channel> - -
  decoder: arib-b25-stream-test

- name: PT3-S4
  types:
    - BS
    - CS
  command: recdvb --dev 6 <channel> - -
  decoder: arib-b25-stream-test

- name: PT3-T1
  types:
    - GR
  command: recdvb --dev 1 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PT3-T2
  types:
    - GR
  command: recdvb --dev 3 <channel> - -
  decoder: arib-b25-stream-test

- name: PT3-T3
  types:
"/usr/local/etc/mirakurun/tuners.yml" 60L, 1127C
- name: PT3-S1
  types:
    - BS
    - CS
  command: recdvb --dev 0 <channel> - -
  decoder: arib-b25-stream-test

- name: PT3-S2
  types:
    - BS
    - CS
  command: recdvb --dev 2 <channel> - -
  decoder: arib-b25-stream-test

- name: PT3-S3
  types:
    - BS
    - CS
  command: recdvb --dev 4 <channel> - -
  decoder: arib-b25-stream-test

- name: PT3-S4
  types:
    - BS
    - CS
  command: recdvb --dev 6 <channel> - -
  decoder: arib-b25-stream-test

- name: PT3-T1
  types:
    - GR
  command: recdvb --dev 1 <channel> - -
  decoder: arib-b25-stream-test
  isDisabled: false

- name: PT3-T2
  types:
    - GR
  command: recdvb --dev 3 <channel> - -
  decoder: arib-b25-stream-test

- name: PT3-T3
  types:
    - GR
  command: recdvb --dev 5 <channel> - -
  decoder: arib-b25-stream-test

- name: PT3-T4
  types:
    - GR
  command: recdvb --dev 7 <channel> - -
  decoder: arib-b25-stream-test

- name: TBS6922
  types:
    - SKY
  command: szap-s2j -c /usr/local/etc/szap-s2j.conf -l <satelite> -S 1 -p -r -M 5 -C 35 <channel>
  dvbDevicePath: /dev/dvb/adapter0/dvr0
  decoder: arib-b1-stream-test
  isDisabled: true

recpt1の代わりにrecdvbを使うように変更。

channels。

うちのマンションはケーブルテレビでテレ玉チバテレビも入るので、チャンネルスキャンをする。

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

このコマンドを実行するとchannelsの設定が上書きされて空行などが消えるので注意。

Chinachu

Wikiのインストール手順の通り。

https://github.com/Chinachu/Chinachu/wiki/Gamma-Installation-V2

録画先を増設したHDDにして、ファイル名を<title> [<channel-name>][<date:yyyymmdd-HHMM>].tsにした。

http://サーバーのIPアドレス:20223を開いて、番組表が見られて、録画ができれば良い。 同じLAN内からは繋がる。

nginx

外からも操作できるようにしたい。 DDNSで自宅に繋がるようにはしている。

一応Chinachu単体でも、wuiUserswuiOpenServerwuiOpenPortを設定すれば外からアクセスできるのだが、廃止予定らしい。 nginxでリバースプロキシを立てる。

aptでインストールして、 /etc/nginx/sites-enabled/default を削除。 /etc/nginx/conf.d/に適当なファイル名で、

server {
  listen 80 default_server;
  location / {
    auth_basic "secret";
    auth_basic_user_file /etc/nginx/.htpasswd;
    proxy_pass http://サーバーのIPアドレス:20772;
  }
}

を書き込む。 htpasswd -c /etc/nginx/.htpasswd ログインIDでパスワードファイルを作成。

HTTPS

録画サーバーに平文で繋ぐのが憚られるような信用できないネットワークを使う機会があるか……?とは思うが、このご時世、webサーバーを立てたらHTTPSにもしておこう。

https://certbot.eff.org/

で、nginxとOSを選択。 出てきたコマンドを入力すると、証明書の取得、nginxの設定の変更、証明書の更新をcronに登録までやってくれる。 すごい。

Samba

メインのWindows PCから録画したファイルを見られるようにする。 sudo apt install sambaでsambaをインストールして、/etc/samba/smb.confに次の設定を追加。

[video]
  path = 録画ディレクトリ
  browsable = yes
  guest ok = no
  read only = no
  writable = yes

sudo smbpasswd -a ユーザー名

録画予約

この時期にいちいちアニメのタイトルを登録して、表記揺れに悩まされたりするのが面倒。 ジャンルアニメを全部録画したらどうなるのだろうと試してみたところ、1週間で1 TBくらいだった。 4 TBのHDDではちょっと足りない。 また、地上波と衛星波がそれぞれ4 chずつだと、数番組は予約が被って録画ができなかった。 ちまちまと登録するしかない。