ワンセグTS 続々
できたー(一応)
コメントもらって、やっぱりm3u8が違うんだろうなあと、親子のplaylist作ってみたけど、結果は変わらず。
いや、そもそもまっとうなやり方でやってみようとffmpeg+segmenterを試してみたけど、理由は良く分からないけどsegmenterがうまく読んでくれない。
さて詰んでしまい、どっかにm3u8のサンプルがないかと探したところ、どうやらこうなるのが正しいっぽい。
#EXTM3U #EXT-X-TARGETDURATION:5 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:5, stream.php/out/173900/384460.ts #EXTINF:5, stream.php/out/384460/596900.ts #EXTINF:5, stream.php/out/596900/808964.ts #EXTINF:5, stream.php/out/808964/1021780.ts #EXT-X-ENDLIST
- EXT-X-MEDIA-SEQUENCEを追加(良く分からん)
- ブツ切れのそれぞれに、EXTINFを追加
- ブツ切れのそれぞれを、URLじゃなくて、相対パスのファイル名っぽく記述
というわけで、これで無事に(?)再生できるようになった。。。が。
5秒ごとの切れ目は感じなかった。結構先読みしてくれてる感じ。音声はわりとまとも。だがしかーし、映像が崩れまくり。
根拠なしの直感的には、ファイルの切れ目がTOTなので、chunkの頭からPAT-PMTが現れるまでのvideo streamを捨ててるんじゃないかしら。もしかしたらそれに加えて、ちゃんとGOPなところで切らないとダメなのかしら。
【追加】
継ぎ目で捨てられるところが多いんだったら、TOTを1個ずつ間引いて、10秒ごとにすればどうだ、と思って、
#EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:10, stream.php/out/173900/596900.ts #EXTINF:10, stream.php/out/596900/1021780.ts #EXT-X-ENDLIST
としてみた。(上は例で、実際に使っているファイルは2分くらいのもの、chunkは12個ある)
結果。。。おぉ、結構ごまかせるぞ。
家の中でWiFiだとこれで十分かも。。3G経由はさすがにつらいなあ。でも想定される状況は、暇な電車の中で観る(しかも事前にdownloadしておくのが面倒)ということなので、3Gなのだけど。
ワンセグTS 続
VLCで観れるワンセグのみTSができたところで、次。
このout.tsから、TOTのfposをダンプ。先頭がfpos、後ろはTOTの内容。
173900 Wed Oct 6 02:59:33 2010 384460 Wed Oct 6 02:59:38 2010 596900 Wed Oct 6 02:59:43 2010 808964 Wed Oct 6 02:59:48 2010 1021780 Wed Oct 6 02:59:53 2010
これを加工して、こんな感じのout.m3u8を作成。
#EXTM3U #EXT-X-TARGETDURATION:5 #EXTINF:5, http://foobar/live/stream.php/out/173900/384460.ts http://foobar/live/stream.php/out/384460/596900.ts http://foobar/live/stream.php/out/596900/808964.ts http://foobar/live/stream.php/out/808964/1021780.ts #EXT-X-ENDLIST
AddType application/x-mpegURL .m3u8
続いて、stream.phpを作成する。PATH_INFOで「ワンセグTSのbasename」「開始fpos」「終了fpos」を拾って、指定ファイルの指定範囲を返すもの。
<?php $param = split("[/\.]", $_SERVER["PATH_INFO"]); $f = $param[1] . ".ts"; $s = $param[2]; $n = $param[3]; $len = $n - $s; header('Content-Type: video/MP2T'); $v = file_get_contents($f, NULL, NULL, $s, $len); print $v; ?>
最後に、こんなtest.htmlを作成。
<html> <body> <video width='320' height='180' src="out.m3u8" /> </body> </html>
これら、out.ts、out.m3u8、stream.php、test.htmlを、http://foobar/live で見えるところに置いて、準備完了。
さて、iPhoneでtest.htmlを開いてみる。。。ぐはぁ。ダメだ。
- test.htmlを読み込むと同時に、out.m3u8を何度もリクエストしてくる
192.168.0.1 - - [16/Apr/2011:13:27:39 +0900] "GET /live/test.html HTTP/1.1" 200 156 "-" "Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_2_1 like Mac OS X; ja-jp) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8C148 Safari/6533.18.5" 192.168.0.1 - - [16/Apr/2011:13:27:39 +0900] "GET /live/out.m3u8 HTTP/1.1" 304 - "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:27:40 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 1395 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:27:40 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 2 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:27:40 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 1395 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:27:40 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 2 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:27:40 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 1395 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:27:40 +0900] "GET /live/out.m3u8 HTTP/1.1" 304 - "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:27:40 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 1395 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:27:40 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 2 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:27:40 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 1395 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:27:40 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 2 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:27:40 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 1395 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)"
- video画面をタップすると、さらに何度もリクエストしてきた
192.168.0.1 - - [16/Apr/2011:13:28:15 +0900] "GET /live/out.m3u8 HTTP/1.1" 200 1395 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:28:15 +0900] "GET /live/out.m3u8 HTTP/1.1" 304 - "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:28:15 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 1395 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:28:15 +0900] "GET /live/out.m3u8 HTTP/1.1" 200 1395 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:28:16 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 2 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:28:16 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 1395 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:28:16 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 2 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)" 192.168.0.1 - - [16/Apr/2011:13:28:16 +0900] "GET /live/out.m3u8 HTTP/1.1" 206 1395 "-" "AppleCoreMedia/1.0.0.8C148 (iPhone; U; CPU OS 4_2_1 like Mac OS X; ja_jp)"
- ところがvideo本体が1度もリクエストされない
- そのうち、「このムービーは再生できません。」のダイアログが。。。
out.tsを読んで怒られるならともかく、そこまで行ってない。m3u8のファイルの書き方がおかしい?