iPhoneは新しいバージョンから、m3u8形式のストリーミングに対応しているようですが、実はこのm3u8形式というのは複数のTSへのリンクを集めたプレイリストのようなものらしいです。ということは、iPhoneって生のTSを解釈できるんじゃない!?ということで、cvoc-e121を使ってできたTSをiPhoneにストリーミングで送信して表示できるかどうか実験してみました。
ただし、主に以下の点があるので実験程度と考えてください。実用とはほど遠いです。
今回の実験は大まかに次のような流れになっています。
USBチューナーをチューニングするために、myzapというプログラムを書きました。dvb
toolsに付属のzapがあるじゃんという向きもありますが、チューナーから出力されるストリームの中にPAT情報がないとうまく動作しないらしいです。
myzapはとりあえず、デバイスファイルを開く=>周波数をあわせる=>デバイスファイルから常時データを取り出せるようにフィルタを設定する=>HUPシグナルを受け取るまで待機する という至ってシンプルな動作をします。ソースはこちら。
$ wgethttp://www47.atwiki.jp/cvoc-e121/pub/myzap.c $ gcc -o myzap myzap.c $ ./myzap 1
myzapの引き数は番組番号です。(ダサイですが)myzap.cの中に関東用の番組番号と周波数の対応表が書き込んであります。地域にあわせてこの表を書き換えて使ってください。myzapはcontrol+cボタンで終了します。
ワンセグのTSにはPAT情報が含まれていないのでPATを追加する必要があります。ワンセグのPMTのPIDは固定なので、無理矢理だけど、TSの中にPATを挿入するスクリプトを書いてみました。(無理矢理というのはHDは無視しワンセグ1プログラムのみのPATという意味。)
ソースはこちら。
(スクリプトをダウンロード) $ wgethttp://www47.atwiki.jp/cvoc-e121/pub/generatePAT.pl (実行権限を与える) # chmod 755 generatePAT.pl (binフォルダに移動) # cp generatePAT.pl /usr/local/bin/ (テスト) $ cat /dev/dvb/adapter0/dvr0 | /usr/local/bin/generatePAT.pl > test.ts (1〜2分でctrl+cボタンを押して終わらせる)
前述のmyzapを起動したまま、最後のテストのコマンドでTSファイルができればOKです。このTSファイルはVLCプレイヤーで再生できるはずです。
これでTSを作る用意ができたので、これをネットワーク越しに流すようにします。
このTSデータを一般向けに送信してしまうと法律に違反します。必ずアクセス制限を行って本人のみが使えるようにするか、家庭外からデータが出ないように制限をかけてください。webサーバーのアクセス制限の方法は、多くのサイトで説明されていますので検索で簡単に出ると思いますので探してみてください。
「私的使用のための複製」は著作権法第30条で認められています。ただし、あくまで「個人的にまたは家庭内」で行う場合に限られますので合法的に行ってください。ちなみに、データは元々暗号化されていないのと、(制限をかけた場合)公衆からの求めに応じておこなうものでないので、第30条第2項、第3項は適用できませんね。
で、スクリプトのソースはこちら。設定は以下のコマンドで行えます。
(スクリプトのソースをダウンロード) $ wgethttp://www47.atwiki.jp/cvoc-e121/pub/stream.cgi (ダウンロードしたスクリプトに実行権限を与える) # chmod +x stream.cgi (CGI用フォルダに移動) # mv stream.cgi /usr/local/apache2/cgi-bin/
myzapは動いたままの状態で行ってください。
もし、ブラウザでcgiファイルのURLを入れてみて、みれないようであれば、myzapが動いていないか、/dev/dvb/adapter0/* のパーミッションが開いていないかを疑ってください。パーミッションはオーナー、グループ、その他も読めるように変更してください。
これはiPhone用のTSファイルのプレイリストです。本来は10秒ほどに細切れになったTSファイルがズラーッと並ぶもののようですが、今回はダマシで、先ほどのストリームをはき続けるCGIへのリンクを入れてあります。このファイルはCGIフォルダでなくhtmlファイルを入れるフォルダと同じところに入れてください。(当然、外部からみれないようにアクセス制限をかけてください。)
【test.m3u8ファイルの内容】 GETDURATION:10 #EXTINF:10, http://example.jp/cgi-bin/stream.cgi #EXT-X-ENDLIST
最後にさっき作ったm3u8ファイルへのリンクです。m3u8ファイルと同じフォルダに入れてください。(当然、外部からみれないようにアクセス制限をかけてください。)
<html> <head><title>Video Test</title></head> <body> <video width='150' height='150' src="test.m3u8" /> </body> </html>
以上でとりあえず実験環境の構築は終わりです。
iPhoneのSafariからtest.htmlをみればこんな画面がでて、動画ボタンをクリックすればワンセグのストリーミングがみれるはずです。