3+Chinachuで地デジ録画サーバー構築sellNode.js,RaspberryPi,raspbian,Chinachu,mirakurunそもそも録画サーバーとはコンピュータと地デジアンテナをチューナーを通して接続し、HDDにテレビ番組を保存することができるサーバーのこと。テレビと同じように番組表を見て録画を予約したり、条件に当てはまる番組を自動録画できたりする。録画したファイルは、複製したりmp4に変換することもできる。ローカルネットワーク経由でMacやiPhone,FireTVからテレビ番組のリアルタイムストリーミング視聴も可能。画質は体感でYoutubeの1080Pと同じくらい、遅延も2秒ほど。珍しいUSB式の地デジチューナー。1台で同時に1チャンネルのみの視聴、録画が可能。買い足して同時受信チャンネルが増やせる。約1770円B-CASカードの読み取り用。500GBのHDD家にあったやつ。B-CASカード使わなくなったDVDプレイヤーから拝借。アンテナ分配器リビングのTVと同じ同軸ケーブルからアンテナに接続するため。※アンテナ分波器と記載していましたが、誤りでした。コメントでご指摘いただいたため、修正しました。以下の手順に進んだ時点で本項に承諾したものとみなします。この記事はエンドユーザー向けではありません。以下の手順は全て自己責任で、何かしらの問題が発生しても自力で対処できる方のみ実行してください。テレビ番組のコピー、配信は違法となる場合があります。使用についても十分注意して下さい。この記事を参考にしたことにより生じたあらゆる損害について、著者は一切の責任を負いません。piのOSは標準のraspbian(Linuxベース,32bit,armhf,armv7)をインストールする。pi@[IPアドレス]で接続。このままではリモートでCUIでしかファイル操作ができず、使いにくい。そこで、sambaとwebminをインストールする。sambaでインストールできるが、webminはサーバーから最新版をwgetして展開、インストールしなければならず多少面倒。webminのインストールが完了すると、ローカルネットワーク経由でブラウザからwebminの画面を開くことができる。URLはhttps://[IPアドレス]:10000/これによって、多くの設定がGUIでできるようになった。ここで、左のメニューからサーバ⇨Samba設定に進むと、Sambaの設定を全てGUIで行うことができるので、ユーザーやパスワード、権限を編集し、Sambaを起動させる。Piのファイルシステムにアクセスできるようになる。SambaはFTPと違い、root権限でファイルを扱えるようにも設定できる。Atomなどのエディタで直接ファイルを開いて編集できるので、殆どローカル感覚で作業を進めることが可能。PiにUSB接続されているHDDの中身も編集することができるので、大容量HDDを繋げばメディアサーバーとしても使えるようになる。Piにディスプレイや、キーボードを繋げる必要がほぼなくなりサーバーとして扱いやすくなった。チューナーの準備チューナーを使うには、ドライバのインストールが必要。/lib/firmware/でインストールできる。カードリーダーとB-CASの準備カードリーダーを使うには、まず関連パッケージのインストールが必要。pcsc-toolsでインストールできる。今回使ったカードリーダーはpcscdのカードリーダー定義ファイルに型番が含まれていないのでこのままでは認識されない。(ここで2週間くらいつまずいた)pcscdのカードリーダー定義ファイルは、一見すると/usr/lib/pcsc/drivers/ifd-ccid.bundle/Contents/Info.plistだが、こちらを編集するとpcscdが起動不可になってしまう。そこで、/etc/libccid_Info.plistを編集する。ここでの作業は今回使ったカードリーダーの型番を定義ファイルに追加することだが、その前に型番を調べる必要がある。Piに接続した状態でコマンドlsusbを使う。Corp.と表示された。これは、このカードリーダーのベンダーIDが0409で製品IDが018bであることを示している。name(表示名)が列挙されている。この規則に従い、3点入力した上で上書き保存、pcscdの再起動を行うとカードリーダーが認識されるようになる。pcsc_scanを使う。うまくいくと、B-CASカードが読み込まれている旨が表示される。B-CASのデコード用ライブラリのインストール日本の地デジ放送は暗号化された状態で配信されているため、そのまま受信して保存すると再生や複製の際に問題が起こる。そこで、B-CASカードの情報を使って受信と同時に復号するのが望ましい。これを実現するライブラリがlibarib25だ。g++でインストールしておく。installでインストールできる。録画用コマンドのインストールGUIの録画ソフトを動かす前に、CUIの録画コマンドが必要なので録画コマンドrecdvbをインストールする。installでインストールできる。--enable-b25オプションをつけないと復号を行ってくれない。この時点で、コマンドでの録画が可能になった。test.m2tsを実行すると物理チャンネル24から10秒間データを受信し、b25ライブラリを使って同時デコードしたものがtest.m2tsというファイルに保存される。いちいち秒数指定が必要で実用的ではない。ここでいう物理チャンネルについては電波塔ごとに異なり、こちらから確認することができる。この時点で可能になるのが、ローカルネットワーク経由でのリアルタイムストリーミング配信だ。PiのローカルIPアドレスのポート8080番でストリーミング配信の待受がされる。Piの/etc/hostsを編集し、視聴デバイスのIPアドレスをホワイトリストとして登録する必要がある。m2tsという特殊な拡張子でストリーミングされるので、ブラウザから見ることはできない。MediaPlayerを視聴デバイスにインストールする。MacやWindowsの場合ここからダウンロード、インストールできる。ストリーミング再生をするには、VLCのメニューからファイル⇨ネットワークを開くを選択し、URL欄にhttp://[IPアドレス]:8080/[物理チャンネル]を入力して開くボタンを押す。Pi側は配信待ち受け状態でないといけない。いちいち物理チャンネルを入力するのが面倒だったらm3u形式のプレイリストを作ることもできるが、のちの工程で別のストリーミング方法を使うことになるのでURLが変わってしまう。Pi側の待ち受け状態を終了するには、Ctrl+Cでプロセスを中止させるか、webminの実行プロセス欄から強制終了させる。チューナーサーバーのインストールチューナーサーバーを使うと、録画コマンドの並列処理や、複数チューナーの管理(今回は必要ない)、優先度処理が可能になる。チューナー自体をローカルネットワークの共有リソースにできるので、SSH無しでも他のPCから録画処理を制御したりできるようになる。今回使うチューナーサーバーMirakurunでは、apiを使って多くの処理を簡略化できる上、拡張性もかなり高い。(GUIは無い)Mirakurunはnode.jsベースのシステムなので、node関連のパッケージを事前にインストールする必要がある。公式ではnodeのメジャーバージョン8でも動作することになっているが、動作しなかったのでnode6の最新版をインストールする。npmで問題なくできる。--productionでMirakurunをインストールできる。Mirakurunがインストールされると、/usr/local/etc/mirakurunに3つの設定ファイルが生成される。設定が必要なのは、tuners.ymlとchannels.ymlの2つ。tuners.ymlでは、チューナーの設定を行う。-なので末尾に追加する。channels.ymlでは、電波塔に応じた物理チャンネル番号を登録する。"http://localhost:40772/api/config/channels/scanを使うと時間がかかるが自動で登録ができる。startでMirakuranを起動する。statusにonlineと表示される。実はこれで、recdvbでいちいちコマンドを打たなくてもローカルネットワーク経由でのリアルタイムストリーミング配信ができるようになる。視聴方法はrecdvbと変わらないが、URLがhttp://[IPアドレス]:40772/api/channels/GR/[物理チャンネル]/streamに変更される。Mirakurunが一枚噛むことになるが、安定性はほぼ変わらない。録画サーバーのインストール録画サーバーを使うと初めてGUIを使った番組表からの録画ができるようになる。そこで地上デジタル波から随時最新の番組表データを取得でき、またタイマー録画にも対応するChinachuをインストールする。事前に、必要なパッケージをインストールする。vainfo完了したら、Chinachuをインストールする。installerインストールオプションが表示されるので、Autoを選択する。config.jsonでconfigファイルを生成しておく。何もいじらなくても問題ないが、録画ファイルの保存先やポートを変更したい場合は編集する。このままでは全く動かなかった。(ここでも1週間くらい..)どうやら内部ビルドされたnodeがarmアーキテクチャに対応していないらしい。executeでChinachuサービスを起動させる。今度は起動するが、ファイルが足りないとのエラーが出るので、エラーを見ながら足りないファイルを手動でGithubから移した。これでようやく問題が解決し、chinachuを使えるようになった。processes.jsonで行った方が簡単に行えるので、こちらを使用している。使ってみるデフォルトの設定だと、Chinachuの録画管理画面はブラウザからhttp://[IPアドレス]:20772/で開ける。ホーム画面では、現在放送中の番組の確認とライブ視聴ができる。Chinachuで内部ビルドされているffmpegというエンコードコマンドがARMだと動かないせいでブラウザからのリアルタイム視聴は実現できていない。番組表画面では、1週間先までの番組表が閲覧できる。番組の詳細画面を開くことで、詳細確認や手動録画も可能。ルール画面では、かなり詳細な条件録画ができる。ここまで詳細な条件録画はテレビでもなかなかない。PiのCPUが貧弱なので、長時間リアルタイム視聴していると稀にストリーミングが止まる・録画ファイルが大きすぎる。m2ts形式だと1分で120MB使うので1時間の録画で7.5GBになる。Sambaで録画ファイルを再生する際も帯域を使いすぎてストリーミングが頻繁に止まる。総額1万円少し(20インチの格安テレビと同額)にしては文句ない性能ではないだろうか。最後にこの記事は実際に完成させてから数ヶ月後に書いているので、説明が抜けている箇所があるかもしれません。気がついたらコメントで教えていただけるとありがたいです。ChinachuやMirakurunは開発が盛んに行われており、頻繁にアップデートされています。公式サイトを参照し、最新版を導入するようにして下さい。