iPhoneで聴けるm4r形式のオーディオファイルをサイトへ置きたいのですが
その際に、直リンクではアクセスさせないように、phpファイルを通して提供したい(パスワード設定やアクセス条件をPHP分岐したい)と考えています。
コードとしてはヘッダー情報を付加してm4rファイルを読んで出力しています。
実機(iPhone5)で試してみたところ、再生はされるのですが、シークバー操作ができなく、再生時間のところが--:--と表示されてしまいます。
$file = './test.m4r';
$mime = 'audio/aac';
header("Pragma: public"); // required
header("Expires: 0");
header('Content-Description: File Transfer');
header("Content-Type: $mime");
header('Content-Disposition: attachment; filename=' . basename($file));
header('Content-Length: ' . filesize($file));
header('Content-Range: bytes 0-'.filesize($file).'/'.filesize($file));
readfile($file);
何かヘッダー情報が足りないのでは?(もしくは間違っているのでは?)とは思うのですがお分かりの方いましたら教えていただきく思います。
回答ありがとうございます。
MP4のwikiを見ただけではちょっとわからない感じです。
また、試しにMP3のオーディオファイルを上記コードで読み込んでみたのですが、同じように再生は可能なのですが、やはり再生時間の表示が--:--になります。
MP4(m4r)形式に限った話ではないのかと思います。
回答ありがとうございます。
2012/10/17 14:37:31Content-Rangeを外して付加しているheaderの文字数をContent-Lengthへ追加してみましたが、表示は変わりませんでした…。(再生時間:--:--のまま)
$file = './test.m4r';
$mime = 'audio/aac';
$header_size = 0;
$header = "Pragma: public";
$header_size += strlen($header);
header($header);
$header = "Expires: 0";
$header_size += strlen($header);
header($header);
$header = "Content-Description: File Transfer";
$header_size += strlen($header);
header($header);
$header = "Content-Type: ".$mime;
$header_size += strlen($header);
header($header);
$header = "Content-Disposition: attachment; filename=".basename($file);
$header_size += strlen($header);
header($header);
$header = "Content-Length: ";
$header_size += strlen($header);
$header .= $header_size+filesize($file)+strlen($header_size+filesize($file));
header($header);
readfile($file);
なにか不足な部分はありますでしょうか。。。