iPhoneで再生できるm4r(AAC)のファイルヘッダーをPHPで付加したいです。

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);

何かヘッダー情報が足りないのでは?(もしくは間違っているのでは?)とは思うのですがお分かりの方いましたら教えていただきく思います。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/10/23 23:40:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答2件)

id:oil999 No.1

回答回数1728ベストアンサー獲得回数320

ポイント50pt

Content-Length には、header で出力している文字列のバイト数も加えます。
Content-Range は不要です。

id:mihon6633

回答ありがとうございます。
Content-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);

なにか不足な部分はありますでしょうか。。。

2012/10/17 14:37:31
id:sanada33 No.2

回答回数293ベストアンサー獲得回数3

id:mihon6633

回答ありがとうございます。
MP4のwikiを見ただけではちょっとわからない感じです。

また、試しにMP3のオーディオファイルを上記コードで読み込んでみたのですが、同じように再生は可能なのですが、やはり再生時間の表示が--:--になります。
MP4(m4r)形式に限った話ではないのかと思います。

2012/10/17 19:39:38

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません