(転載)携帯での動画・着うた配信 ~ストリーミング or ダウンロード~

動画の再生方式には, ストリーミングとダウンロード の 2種類あります。

・ストリーミング
動画を受信しながら再生する
端末に保存不可能

・ダウンロード
動画を完全に受信した後, 再生
端末に保存可能

キャリア毎のファイル容量は以下の範囲です(機種ごとに違います)。

・DoCoMo
ストリーミング 2MB ~ 10MB
ダウンロード 300KB ~ 10MB

・au
ショートストリーミング 140KB
ダウンロード 512KB ~ 1.5MB
ストリーミング 1.5MB

・SoftBank
ストリーミング -
ダウロード 200KB ~ 300KB

1つのファイルをどのキャリアにも対応させようとすると, ダウンロード方式で 200KB以下で作らないといけないことになりますね。

DoCoMo にはプログレッシブダウンロードというストリーミングとダウンロードのいいとこ取りをした方式があり, 受信しながら再生し端末に保存できます。

au のショートストリーミングは名前はストリーミングですが, 再生されるのは動画を完全に受信した後。
単純に端末に保存できないだけ。

au のストリーミングは QVGAサイズには対応していないようです。
W44S では Q-CIFサイズでストリーミング再生できることを確認しました。
でもなぜか au 技術情報: EZムービーページにはストリーミング再生については触れられてないんですよね…。

SoftBank は基本的にはストリーミング再生できません。ダウンロードのみ。
SD(Separated Delivery)方式を使えば擬似ストリーミング再生可能(※1)ですが, かなりややこしい方式且つ公式サイトにしか対応してません。

MIMEタイプは以下。

・動画
video/3gpp (DoCoMo, SoftBank)
video/3gpp2 (au)

・着うた
audio/3gpp (DoCoMo, SoftBank)
audio/3gpp2 (au)

動画/着うたを配信するタグですが, DoCoMo/au は objectタグで, SoftBank は単に aタグでリンクします。
著作権保護(転送禁止)設定は, DoCoMo/au はツールを使って設定, SoftBank は相変わらずお馴染みの x-jphone-copyrightヘッダで。

また, DoCoMo/au に関しては, 動画/着うたファイルへのリクエストに Rangeヘッダが付加されます。

——————————————————————
Range: bytes=1-1023
——————————————————————

このヘッダを受けた場合は, 206 Partial Content のステータスを返さなければなりません。
通常は Apache が勝手に処理してくれるので意識する必要はないのですが, 自前のスクリプトでメディアファイルのデータを出力する場合は Rangeヘッダを適切に処理する必要があります。
具体的には以下の様に Content-Rangeヘッダをつけて要求された範囲のデータのみ出力すれば OK です。

===============================================
header(‘HTTP/1.1 206 Partial Content’);
header(‘Content-Range: bytes ‘ . $from . ‘-’ . $to . ‘/’ . filesize($file));
header(‘Content-Type: ‘ . $mime);
header(‘Content-Length: ‘ . ($to – $from + 1));
header(‘Accept-Ranges: bytes’);
===============================================

…しかし, 動画/着うたの仕様は画像に輪をかけて複雑ですな(´∀`;)
相変わらずキャリア毎に仕様違うし, 携帯の世界の仕様はカオス過ぎ。
それが携帯サイト構築ノウハウになって強みになるんでしょうが, いい加減統一して欲しい。

※1 再生回数を1回に制限をかけてダウンロードさせることでストリーミングっぽいことを実現する

参考
・NTTドコモ – MP4対応iモーション
・KDDI au:技術情報 – EZムービー