工作1:iPhoneでワンセグのライブストリーミング

iPhoneは新しいバージョンから、m3u8形式のストリーミングに対応しているようですが、実はこのm3u8形式というのは複数のTSへのリンクを集めたプレイリストのようなものらしいです。ということは、iPhoneって生のTSを解釈できるんじゃない!?ということで、cvoc-e121を使ってできたTSをiPhoneにストリーミングで送信して表示できるかどうか実験してみました。

ただし、主に以下の点があるので実験程度と考えてください。実用とはほど遠いです。

  • 最初に立ち上げたチャンネルから変えられない。。。orz
  • 動画を見終わったら、Webサーバーのタイムアウト時間がすぎるまで再接続できない。。。orz

 

流れ

今回の実験は大まかに次のような流れになっています。
 

  1. myzapという自作プログラムでUSBチューナーを起動
  2. /dev/dvb/adapter0/dvr0 からストリームを読み込み、TSとして出力しつづけるCGIを作る
  3. m3u8ファイルを用意し、CGIへのリンクを貼っておく
  4. index.html の中にm3u8ファイルへのリンクを張っておく

 

myzapの用意

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ボタンで終了します。

 

PATを追加するスクリプト

ワンセグの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をはき続けるCGI

これで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/* のパーミッションが開いていないかを疑ってください。パーミッションはオーナー、グループ、その他も読めるように変更してください。

 

test.m3u8ファイル

これはiPhone用のTSファイルのプレイリストです。本来は10秒ほどに細切れになったTSファイルがズラーッと並ぶもののようですが、今回はダマシで、先ほどのストリームをはき続けるCGIへのリンクを入れてあります。このファイルはCGIフォルダでなくhtmlファイルを入れるフォルダと同じところに入れてください。(当然、外部からみれないようにアクセス制限をかけてください。)
 

【test.m3u8ファイルの内容】
GETDURATION:10
#EXTINF:10,
http://example.jp/cgi-bin/stream.cgi
#EXT-X-ENDLIST

 

test.htmlファイル

最後にさっき作ったm3u8ファイルへのリンクです。m3u8ファイルと同じフォルダに入れてください。(当然、外部からみれないようにアクセス制限をかけてください。)

<html>
<head><title>Video Test</title></head>
<body>
<video width='150' height='150' src="test.m3u8" />
</body>
</html>

 

おわり

以上でとりあえず実験環境の構築は終わりです。

iPhoneのSafariからtest.htmlをみればこんな画面がでて、動画ボタンをクリックすればワンセグのストリーミングがみれるはずです。

 

タグ:

+ タグ編集
  • タグ:

このサイトはreCAPTCHAによって保護されており、Googleの プライバシーポリシー利用規約 が適用されます。

最終更新:2011年04月05日 22:45
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。