Linuxの自宅サーバをテレビ化して家中どこでもテレビが見れるようにしよう(3)Mirakurunの導入

やわなべです。

前回までで地デジを、自宅内のPCやスマホ、タブレットから、リアルタイム視聴できる環境をつくりました。一連のいきさつはこちら。

今回はMirakurunというTVチューナーサーバーソフトを入れて、リアルタイム/録画という要求の違いを管理できていなかったところを整理したいと思います。

スポンサーリンク

前回までの課題

今できている環境の概念図はこうでした。

ss54157.png

recdvbのHTTPストリーミングオプションを使って、各端末をテレビにして、リアルタイム視聴ができるようになりました。recdvbの呼び出しオプションを変えれば録画もできるんですが、同時に動くチューナー(recdvb)はひとつだけなんで一旦、recdvbを落として、オプションを変えて再起動しないといけません。当然その間はリアルタイム視聴もできない。

で、このあたりの多重化と交通整理をお願いするべく、チューナーサーバーソフトであるMirakurunを導入することにしました。そうすることで上の概念図がどうかわるかというとこんなイメージ。

ss67312.png

現状recdvbがシングルタスクで処理している録画/リアルタイム視聴の要求管理をMirakurunに一任します。実際に地デジデータの受信・デコードをrecdvdが担当する点は変わりませんが、間に管理者としてMirakurunサーバーが介在することで、同時要求を可能にし、かつ録画/リアルタイム視聴という異なる要求も並列に処理できるようになります。要求の受け口もTCPとHTTPベースのAPIで整理されているので、多様なクライアントからの要求も難なくこなします。

今回そこまでいきませんが、次の段階として録画ソフトを入れた場合にも、リアルタイム視聴の環境を何も変更する必要がなくなるわけです。

また、私の環境ではチューナーがひとつだけですが、本格的な録画サーバーに使う、チューナーが複数ついてる場合の管理もMirakurunに一任できます。

例えるなら、勢いだけでやってきた零細ベンチャーがプロのCEOをお迎えするようなイメージ、でしょうか。

Mirakurunのインストール・セットアップ

Mirakurunも個人の方が開発・配布されています。

参考 Mirakurun をリリースしました。

Mirakurunはnode.jsベースのシステムで、同環境があればインストールは簡単です。ただ、apt-get(UbuntuのOS付随のパッケージ管理ツール)から入れたnodejsはバージョンが古くて動きません。そこで、

参考 Ubuntuに最新のNode.jsを難なくインストールする – Qiita

こちらの記事を参考に、最新のnode.js環境をサーバーに構築しました。

Mirakurunのインストール

最新のnode.js環境があれば、MirakurunのインストールはRootユーザで、pm2とmirakurunの2つのnpmをグローバルインストールするだけで完了します。対話型のインストーラが起動するんで「一式まるごと」でおまかせすればOKです。詳細は公式サイトを参照ください。(手抜き!)

参考 Chinachu/Mirakurun: A Modern DTV Tuner Server Service.

Mirakurunの初期設定

Mirakurunがインストールされると、「/usr/local/etc/mirakurun」以下に3つの設定ファイルが作成されます。

・server.yml
・tuners.yml
・channels.yml

tuners.yml

tuners.ymlでは、利用したい環境の物理的なチューナー環境を設定します。上の図で録画や視聴要求が来た場合にどこから取ってくるかということですね。

– name: PX-S1UD
types:
– GR
command: recdvb –b25 –strip –dev 0 – –
isDisabled: false

私の場合、チューナー環境はひとつしかありませんのでPX-S1UDを呼び出すrecdvdコマンドを登録します。チューナーが複数ある場合は下に並列でチューナー定義を書いていくことになります。B25のデコードは、arib-b1-stream-testというモジュールを入れることでMirakurun側ですることもできます。

channels.yml

channels.ymlでは、住んでる地域やBS/CS環境に応じたチャンネル番号を登録するところです。ウチは地デジしか入んないんで、こんな感じで。

– name: 関西テレビ
type: GR
channel: ’17’
– name: 朝日放送
type: GR
channel: ’15’
– name: 毎日放送
type: GR
channel: ’16’

設定が終われば、RootユーザーでMirakurunサーバを起動します。mirakurunの起動/停止/再起動はいずれも、コマンドmirakurunで行います。オプションを知りたければ「mirakurun –help」で。あ、その前に前回構築したrecdvbのプロセスは終了させときましょう。

mirakurun start

サーバーの稼働状況は「mirakurun status」で随時確認できます。

root@ds57u /usr/local/etc/mirakurun # mirakurun status
┌──────────────────┬────┬──────┬───────┬────────┬─────────┬────────┬─────┬────────────┬──────────┐
│ App name │ id │ mode │ pid │ status │ restart │ uptime │ cpu │ mem │ watching │
├──────────────────┼────┼──────┼───────┼────────┼─────────┼────────┼─────┼────────────┼──────────┤
│ mirakurun-server │ 0 │ fork │ 27882 │ online │ 16 │ 75m │ 0% │ 144.8 MB │ disabled │
└──────────────────┴────┴──────┴───────┴────────┴─────────┴────────┴─────┴────────────┴──────────┘

webにはっつけたら表示がずれてますが、statusが「online」になっていれば正常に稼働しています。サーバーの負荷状況もここで見れますね。もし起動しないとかあれば、「mirakurun log server」でリアルタイムのログを確認することができます。

VLCからMirakurunのAPIにストリーミング配信を要求する

さて、前回ではhttpサーバーと化したrecdvdに対してストリーミング要求を投げてたわけですが、今回はMirakurunのストリーミングAPIを呼び出します。APIの書式がどこにまとまってるのかちょっとわからなかったんですが、チャンネル指定でストリーミングを呼び出すAPIのURLはこうなるようです。

ss70743.png

http://192.168.1.100:40772/api/channels/GR/24/stream

192.168.1.100」がサーバーのIP、「40772」はMirakurunのポート番号です。デフォルトの40772から変えたい場合は、さっきのserver.ymlを書き換えましょう。

GR/24」という部分がチャンネルで、「(type)/(number)」という書式。typeは地デジの場合GRで、BSの場合はBS,CSの場合はCSと書けばいいです。もしMirakurunにb25のデコード処理をさせたい場合は、URLの末尾に「?decode=1」をつけるといいようです。(その場合「arib-b25-stream-test」というnpmが必要 )

ss69619.png

見れました。ただ、recdvbと直でやりとりしてたときと比べて、Mirakurunが一枚かんでることで、若干安定性は劣るようです。といっても「mirakurun status」で見ると、サーバーの負荷は全然かかってないんで、悪いのはMirakurunではなく、ウチのWifiの遅さなんでしょう。

このへんも課題にしつつ、次はMirakurunベースの録画環境を整備していきます。ちなみに今回の突貫工事で年末のテレビなんて全く見てません。はたして私はこの仕事を帰省前に終えることができるんでしょうか。