PX-S1UDとRaspberryPiを用いて、家中どこでもテレビ(ワンセグ)を実現する。
【追記(2016/03/27)】
recdvb作者HPSat's spaceが復活したのでオリジナルはこちらからどうぞ。
【追記(2016/02/14)】
Androidスマホ等からアクセスする場合、後述のnginxを使わなくともIntentが働くContent-Typeを吐くrecdvbを作成したので、手前味噌だがこちらを利用した方が負荷が少なく良いと思う。
また、オリジナルのrecdvbの公開元が閉鎖しているようなので、オリジナルのrecdvbが欲しい場合も以下の記事を参照して欲しい。
recdvbをいじってみた+いじったやつを公開してみた - k_piの雑記帳
【追記(2015/11/23)】
現在、PX-S1UDは初期型の生産が終了し、V2.0型のものが流通しているらしい。
この記事は、初期型のものを使用したものであるため、微妙な違いが出てくるかもしれない。
【動機】
本来なら家中どこでもスマホでワンセグを見たいのだが、なんだか受信状況が良くない。
ということで、せっかく来ているアンテナからの電波を用いて、家中ワンセグ配信を可能にし、スマホだけでなくノートPC・タブレットでも見れるようにしてしまおうと考えた。
しかし、市販の機器では汎用性が無いので、自作することにした。
【概要】
PX-S1UDとRaspberryPiを用いて、家庭内ネットワークでワンセグ配信する。
ここで、重要なことは、インターネットといった不特定多数に配信しないように注意しなければならないということである。
【下準備】
- PX-S1UDとRaspberryPi(電力供給が不足する場合は、セルフパワー式のUSBハブも)を用意する。
- RaspberryPiにRaspbianを導入する。
isdbt_rio.inpを導入していない場合は、dmesgでfailed to open firmware file "isdbt_rio.inp"と出る場合は、http://www.plex-net.co.jp/product/pxs1ud_download.htmlからドライバをダウンロードし、isdbt_rio.inpを/lib/firmware/に突っ込む。*1 - apt-getでautoconf・automakeをインストール
- recdvb(PX-S1UD用recpt1)を以下のサイトを参考にインストールする。
recdvb(PX-S1UD用recpt1)の公開・インストール « » Sat's space
(リンク切れ。【追記(2016/02/14)】を参照すること。)
recdvb(PX-BCUD対応版)のインストール « » Sat's space(【追記(2016/03/27)】) - recdvbは、httpからの配信リクエストを受けたとき、アクセス元IPアドレスからホスト名の逆引きができない場合、自動終了するような仕様になっている。
ゆえに、/etc/hostsにワンセグを見たい機器のIPアドレスとホスト名を登録しておく必要がある。*2 - iptablesやルーターの設定などで、recdvbの配信がインターネットを通らないように(家庭内ネットワークに留まるように)する・無線LANには暗号化をきちんとかけるなど、不特定多数に配信しないように設定する。
- /etc/crontabに以下のような行を追加すれば、RaspberryPi起動時にワンセグ配信が可能になる。
@reboot pi recdvb --http (適当なポート)
- 後は、http://(RaspberryPiのIPアドレス):(recdvbの受付ポート)/(物理チャンネル番号)/1segにアクセスすれば見れる。
後は、使いやすいようにhtmlを書いておいて、デスクトップやスマホのSDに突っ込んでおけばいいんじゃない(´・ω・`)
【スマホから見るときの問題】
(【追記(2016/02/14)】も参照すること)
androidのブラウザからhttp://(RaspberryPiのIPアドレス):(recdvbの受付ポート)/(物理チャンネル番号)/1segにアクセスすると、httpヘッダーのContent-Typeがapplication/octet-streamになっているため、上手くIntentが働かない。
そこで、nginxを用いてリバースプロキシを用意し、Content-Typeを書き換えてやる。(recdvbのソースコードを書き換えればいいのかもしれないが、技量不足で無理(´・ω・`))
- apt-getでnginx-extrasをインストールする
(nginxパッケージをインストールすると、more_set_headersが使えない) - /etc/nginx/conf.d/tv.confを作成する。
server { listen (RaspberryPiのIPアドレス):(nginxの受付ポート); server_name ""; server_name_in_redirect off; allow (ワンセグを配信したいネットワークのIPアドレス)/(サブネットマスク); deny all; proxy_buffering off; proxy_cache off; proxy_store off; location ~* 1seg$ { proxy_pass http://localhost:(recdvbの受付ポート); more_set_headers 'Content-Type: video/mp4'; } location ~ /\.ht { deny all; } }
- iptablesやルーターの設定などで、nginxを通したrecdvbの配信がインターネットを通らないように(家庭内ネットワークに留まるように)する・無線LANには暗号化をきちんとかけるなど、不特定多数に配信しないように設定する。
特に、nginxを通すとrecdvbのhosts制限が効かないため十分注意する。 - nginxが起動時に動くようにする。
/etc/rc.localに以下の行を追加すれば良いだろう。*3
/etc/init.d/nginx start
- 後は、スマホからアクセスして、Intentがうまく働くことを確認する。
製品紹介(Amazon.co.jpアソシエイト)-----------------
PLEX USB接続ドングル型地上デジタルTVチューナー PX-S1UD V2.0
- 出版社/メーカー: PLEX
- 発売日: 2015/09/10
- メディア: エレクトロニクス
- この商品を含むブログを見る
Raspberry Pi 3 MODEL B 【RS正規流通品】
- 出版社/メーカー: Raspberry Pi
- 発売日: 2016/04/28
- メディア: Tools & Hardware
- この商品を含むブログを見る
*1:最近(2015年2月現在)のカーネルでは、PX-S1UD用のドライバが取り込まれてるっぽいが、dmesgを見てうまくいかない場合は以下のサイトを参考にカーネルをコンパイル。
deepにtechnicalな日記: Raspberry Piカーネルクロスコンパイル環境を整える・deepにtechnicalな日記: Raspberry PiでPX-S1UD
*2:恐らく、不特定多数への配信をしないための仕様かと思われる。