HTML5 オーディオ要素を使用して基本的なオーディオ プレーヤーを開発しています。提供されるすべてのファイルは、別のシステムから API を介してバイナリ文字列として取得された .ogg であり、単純な PHP ハンドラ (基本的なセキュリティ チェックを含む) によって出力されます。
ただし、すべてが Firefox では問題なく動作しますが、Chrome では、シーク、スキップ、または再生に関していくつかの問題があります (簡単に言えば、実行できません)。audio 要素からオーディオの長さを取得すると Infinity が返されます。currentTime は正しい値を返しますが、操作することはできません。
ヘッダーと応答コードをいじり始めましたが、何も正しく機能していないようです。部分的なコンテンツに応答コード 206 を使用するか、ヘッダーで Accept-Ranges を宣言すると、ソース ファイルが存在しない場合と同様に、オーディオ要素が無効になります。
適切なヘッダーを検索しても、あまり結果が得られませんでした。これは、常に部分的なコンテンツと X-Content-Duration (VBR のために計算する PITA) に関するものであり、Chrome ではまったく何もしませんでした。
FFで問題なく機能する関連ヘッダーを次に示します。何か大きな間違いを犯したのでしょうか、それとも Chrome に何か問題があるのでしょうか?
HTTP/1.1 200 OK (changing this to 206 makes the file unplayable in Chrome)
Cache-Control: public, no-store
Content-Disposition: attachment; filename="redacted.ogg"
Content-Length: 123456
X-Content-Duration: 12 (this does nothing on Chrome, works on FF)
Content-Range: bytes 0-123455/123456
Accept-Ranges: bytes (...as does including this)
Content-Transfer-Encoding: binary
Content-Type: audio/ogg
Expires: 0
Pragma: public
編集: Opera での何らかの動作、おそらくすべての Webkit ブラウザーでの動作。fread
/file_get_contents
のような状況でも機能しません。