3

我有一个 MongoDB 数据库,其中的音频文件存储在 GridFS 中。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();

一切都很好,但有一件事:我不能使用滑动条来跳过音频,它只能从头到尾播放。

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 有两种方法可以做到这一点。最好的方法是在提供 Ogg 媒体文件时提供 X-Content-Duration 标头。此标头以浮点值的形式提供以秒为单位的视频持续时间(不是 HH:MM:SS 格式)。

这两个标头都可以帮助浏览器在文件完全下载之前确定音频的持续时间,以便可以进行搜索,并且可以正确定位播放头。

于 2012-11-12T15:09:47.013 回答