Linuxの自宅サーバをテレビ化して家中どこでもテレビが見れる環境を作ろう(2)

やわなべです。

前回のエントリーで自宅のLinuxサーバーで地デジの録画ができるところまでセットアップしました。今回はここから自宅内ネットワークにテレビの映像をストリーミング配信し、家中のパソコンやスマホ、タブレットでリアルタイム視聴する環境を作っていきます。

一連の記事一覧はこちら。

そこで示した今回やりたいこと最終ゴールの概念図も再掲しときますね。

ss54157.png

【処理の流れ】
① 同軸ケーブルからの映像データを受信
② B-CASを読み取り、B25のライブラリを使って暗号化データを復号
③ ストレージ内に映像データを保存、もしくはHTTPでストリーミング配信
④ 配信されるテレビ映像を、自宅ネットワーク内の各デバイスで視聴

スポンサーリンク

recdvbでHTTPストリーミング配信する

前回地デジの手動録画機能ができることを確認したrecdvbですが、実は保存するかわりにHTTPでストリーミング配信する機能もあります。コマンドも単純。

recdvb –b25 –strip –http 8080

今度のコマンドの意味は「PX-S1UDから受信したデータを8080ポートからHTTP配信せよ」というもの。前回とチャンネル番号がありません。受信する側でチャンネルを指定します。

このコマンドを叩くと、

> recdvb –b25 –strip –http 8080

using B25…
enable B25 strip
creating a http daemon
run as a daemon..
pid = 21599
listening at port 8080

8080ポートでストリーミングサーバーとしての待受け状態になります。

ストリーミング視聴側として利用するのは、前回MacインストールしたVLC MediaPlayer。このソフト、動画ファイルの再生だけでなく、Youtubeなどのストリーミング配信の再生もできるんですよね。

ss44953.png

VLCのメニューから「ファイル」「ネットワークを開く」で、ストリーミングURLを指定する画面になるので、「http://192.168.1.100:8080/24」
と入れます。

「192.168.1.100」はDS57Uの自宅ネットワーク内のIPアドレス、8080がHTTPポート番号、24がチャンネル番号(NHK総合)です。

recdvbは不明ホストからのストリーミング要求を拒否する

うまくいけばリアルタイムでNHK総合の映像が見れるはず、なんですが、

ss45342.png

エラーになります。

サーバー側を見ると「gethostbyname failed」というメッセージでrecdvbが異常終了しています。

どうも、recdvbはストリーミング要求を受けた相手側のIPアドレスからホスト名が逆引きできないと異常終了する仕組みのようです。素性の知れない相手にはサービスしない、という「いちげんさんお断りシステム」です。違法な不特定配信をさせないための配慮なんでしょうかね。

これを回避するには、サーバー側の/etc/hostsに、受信側のIPアドレスと適当なホスト名を書いて「このIPはいちげんさんじゃありませんよ」と教えてあげればいいんですが、無線LAN内のIPアドレスはころころ変わるし、他の端末のIPをいちいち登録するのも面倒です。

参考 recdvbのhttpストリーミングでgethostbyname failedが出て視聴できない件 – にゃののん日記

こちらのサイトによると、接続元ホストのチェックはなくても視聴そのものに影響ないようだったので、ホストチェック部分をコメントアウトして、recdvbを再度コンパイルし直しました。公開するつもりはないんで「うっかり違法配信してましたー」ってなことにもならないですしね。

リコンパイルしたrecdvbをストリーミングモードで再起動し、MacからVLCでストリーミングURLを指定すると、

ss47186.png

こんどは視聴に成功しました。同じWiFiでAppleMusicをストリーミングで聴いてるとかでなければ映像が止まったりカクカクすることもありません。

チャンネルリストはM3U形式のプレイリストで

チャンネルごとのURLは、いちいち入力するのが面倒なんで、前回紹介したマスプロアンテナのチャンネル番号表をチェックしながら、テキストエディタで下のようなテキストファイルを作成します。

#EXTM3U
#EXTINF:0,01.NHK総合
http://192.168.1.100:8080/24
#EXTINF:0,02.NHK Eテレ
http://192.168.1.100:8080/13
#EXTINF:0,03.サンテレビ
http://192.168.1.100:8080/26
#EXTINF:0,04.毎日放送
http://192.168.1.100:8080/16
#EXTINF:0,05.KBS京都
http://192.168.1.100:8080/23
#EXTINF:0,06.朝日放送
http://192.168.1.100:8080/15
#EXTINF:0,07.テレビ大阪
http://192.168.1.100:8080/18
#EXTINF:0,08.関西テレビ
http://192.168.1.100:8080/17
#EXTINF:0,10.よみうりテレビ
http://192.168.1.100:8080/14

これを「playlist.m3u」などの名前で保存。そのファイルをVLCの「ファイルを開く」から読み込ませると、プレイリストとして取り込んでくれます。

ss63160.png

これがテレビのリモコン代わりになります。

とりあえずのゴール達成と今後の課題

VLC MediaPlayerは、Mac以外にWindows/iOS/Androidと各プラットフォーム向けのバージョンがあるのでMac以外に、

P1040839.JPG

iPadでも、

Screenmemo_2016-12-30-15-00-55.png

Androidでも、

自宅内なら、どこでもテレビが見れるようになりました。ロケーションフリーってやつです。防水型のタブレットとか持ってればお風呂に入りながら見ることもできますね。

以上、とりあえず当面の目的は達成、壊れたテレビは捨てても大丈夫かな、というところまでは来ました。

受信データをリアルタイムでデコードしながらストリーミングとか、CeleronベースのDS57Uには荷が重いかなーと思ってたんですが、心配してたCPU使用率の上昇や発熱も全くありません。

ただ課題もあって、冒頭の概念図を再度見ていただくと、

ss54157.png

HTTPストリーミングのラインがひとつだけ実線であとは点線ですよね。視聴中はそのデバイスがチューナーを専有するんで、複数デバイスで同時に視聴ができません。まあ、それはいいとしても録画する場合に、recdvbのHTTPストリーミングを一旦切って、保存用のコマンドを叩きなおさないといけません。で、また終わったらHTTPストリーミングサーバーを起動とか、ちょっとダサいです。

それに録画サーバとして使うのであれば、やっぱりEPGから取得した番組表から録りたい番組をチョイスしてタイマーで自動録画したいですよね。そのあたりが次の課題かと。