3

GridFSに保存されたオーディオファイルを含むMongoDBデータベースがあります。HTML5オーディオタグは、MongoDBからオーディオを取得するメソッドへのリンクで機能します。

$file = $grid->findOne(array('_id' => new MongoId($id)));
header('Content-Length: ' . $file->file['length']);
header('Content-Type: ' . $file->file['file_type']);
header("Content-Disposition: filename=" . $file->file['filename']);
echo $file->getBytes();

すべてが良いのですが、1つだけです。スライドバーを使用してオーディオをスキップすることはできず、最初から最後までしか再生されません。

4

2 に答える 2

1

スクロールを行うには、スクリプトが範囲も処理する必要があると思います。(サンプルの)HTMLページも提供できますか?次に、少し実験して、より良い答えを思い付くことができるかどうかを確認できます。

于 2012-11-12T15:04:40.723 に答える
1

Accept-Ranges = bytesヘッダーを追加してみてください。http://html5doctor.com/html5-audio-the-state-of-play/から:

ほとんどのオーディオ対応ブラウザでは、ダウンロード中に新しいファイル位置をシークできます。これを許可するには、サーバーで範囲リクエストを有効にする必要があります。Apache などの Web サーバーではデフォルトで有効になっていますが、サーバーが Accept-Ranges ヘッダーで応答することを確認することで確認できます。

また、X-Content-Duration = length_in_secondsファイルが ogg 形式の場合、ヘッダーが役立つ場合があります。https://developer.mozilla.org/en-US/docs/Configuring_servers_for_Ogg_mediaから:

Ogg 形式はメディアの長さをカプセル化しないため、ビデオ コントロールのプログレス バーにビデオの長さを表示するには、Gecko が他の手段を使用してメディアの長さを決定する必要があります。

Gecko がこれを行う方法は 2 つあります。最善の方法は、Ogg メディア ファイルを提供するときに X-Content-Duration ヘッダーを提供することです。このヘッダーは、ビデオの長さを秒単位で (HH:MM:SS 形式ではなく) 浮動小数点値として提供します。

これらのヘッダーはどちらも、ファイルが完全にダウンロードされる前にブラウザーがオーディオの長さを判断するのに役立ちます。これにより、シークが可能になり、再生ヘッドが適切に配置されます。

于 2012-11-12T15:09:47.013 に答える