AppleCoreMedia/1.0.0.8H7たん

User-Agent: AppleCoreMedia/1.0.0.8H7 (iPhone; U; CPU OS 4_3_2 like Mac OS X; ja_jp)たんは、いったいどんなプレイリストを期待してるんだ。。。
tcpdumpで追っかけてみた。以下、一部ヘッダは削ってますが

リクエスト-レスポンス:1

time=0.029433

まずiPhoneから、2文字だけよこせ、というリクエストが来る。

GET /foltia/stream.php?fname=/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t HTTP/1.1
Range: bytes=0-1
Accept-Encoding: identity
time=2.045747

リクエストを受けた時点で、TOTの解析が走り出して、2秒後くらいにレスポンスを返している。
この時点で、プレイリストには10秒x3個のURIが書かれているが、先頭2文字だけなので、「#E」が返る。

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1/428
Content-Length: 2
Content-Type: application/x-mpegurl

#E

リクエスト-レスポンス:2

time=2.097050

前のレスポンスでこの時点で428バイトだというのが分かって、そこまでよこせというリクエストが来る。

GET /foltia/stream.php?fname=/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t HTTP/1.1
Range: bytes=0-427
Accept-Encoding: identity
time=2.265876

この時点で出来ているプレイリストを返している。

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-427/428
Content-Length: 428
Content-Type: application/x-mpegurl

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:10,
stream.php/4248988,15038496/0,20,1409,1411,1535,8136/@/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t
#EXTINF:10,
stream.php/15038496,36619768/0,20,1409,1411,1535,8136/@/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t
#EXTINF:10,
stream.php/36619768,58208372/0,20,1409,1411,1535,8136/@/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t

リクエスト-レスポンス:3

time=2.511691

また、先頭2文字よこせ、というリクエスト。

GET /foltia/stream.php?fname=/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t HTTP/1.1
Range: bytes=0-1
Accept-Encoding: identity
time=2.594619

同じくレスポンス。

HTTP/1.1 206 Partial Content
Content-Range: bytes 0-1/428
Content-Length: 2
Content-Type: application/x-mpegurl

#E

リクエスト-レスポンス:4

time=2.710312

また、全部よこせのリクエスト。

GET /foltia/stream.php?fname=/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t HTTP/1.1
Range: bytes=0-427
Accept-Encoding: identity
time=2.770529

プレイリスト返す。

リクエスト-レスポンス:5

time=6.699092

4秒ほど空けてプレイリストを取りにきているが、リクエストが少し変わった。
Range指定が無い・gzip可になってる・X-Playback-Session-Idとやらが付いている。

GET /foltia/stream.php?fname=/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t HTTP/1.1
Accept-Encoding: gzip
X-Playback-Session-Id: 452228E6-4877-43B1-9BFE-188A75322BF4
time=7.040517

プレイリスト返す。この時点では、まだ10秒x3件のままで変わらず。

HTTP/1.1 200 OK
Content-Length: 428
Content-Type: application/x-mpegurl

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:10,
stream.php/4248988,15038496/0,20,1409,1411,1535,8136/@/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t
#EXTINF:10,
stream.php/15038496,36619768/0,20,1409,1411,1535,8136/@/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t
#EXTINF:10,
stream.php/36619768,58208372/0,20,1409,1411,1535,8136/@/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t

リクエスト-レスポンス:6

time=7.115210

ようやく、映像ファイルを拾いに来る。

GET /foltia/stream.php/4248988,15038496/0,20,1409,1411,1535,8136/@/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t HTTP/1.1
Accept-Encoding: identity
X-Playback-Session-Id: 452228E6-4877-43B1-9BFE-188A75322BF4

これに続いて、リクエストされた範囲のワンセグデータが、ずらずらっと返される。

リクエスト-レスポンス:7

time=8.956397

2番目の映像ファイルを拾いに来て、
ずらずらっと返す。

リクエスト-レスポンス:8

time=16.627841

ここでプレイリストを拾いに来た。

GET /foltia/stream.php?fname=/home/foltia/php/media/tv/2099.localized/2099--20110423-2350.m2t HTTP/1.1
Host: 192.168.23.1
Accept-Encoding: gzip
X-Playback-Session-Id: 452228E6-4877-43B1-9BFE-188A75322BF4

この時点でプレイリストには、44件(440秒=7分20秒)分のURIが載っていて、これを返していた。

そしてここまで

このあとずっと、プレイリストに従ってほぼ10秒ごとにリクエストが来るが、結局6分30秒くらい?まで再生して固まった。
tcpdumpによると、44件のうちの38件まで読みこまれたが、最後の6件はリクエストされてない。さらに妙なのは、プレイリストのそれぞれに、2回ずつリクエストが来ているように見える。たまに1回のものもある。
16秒にリクエストされたのを最後に、プレイリストは再読み込みされなかった。もしかして、残り3件を越えるところまで行けば、更新しに来たのかもしれないが、うーん。