Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/dart/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
来自mongodb GridFS的HTML5音频_Html_Mongodb_Audio_Gridfs - Fatal编程技术网

来自mongodb GridFS的HTML5音频

来自mongodb GridFS的HTML5音频,html,mongodb,audio,gridfs,Html,Mongodb,Audio,Gridfs,我有一个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("C

我有一个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();

一切都很好,但有一件事:我不能使用slidebar跳过音频,它只从开始播放到结束。

为了进行滚动,我希望您的脚本也需要处理范围。还可以提供您的(示例)HTML页面吗?然后我可以尝试一下,看看是否能找到更好的答案。

尝试添加一个
Accept Ranges=bytes
标题。发件人:

大多数支持音频的浏览器都支持查找新文件位置 在下载过程中。要允许此操作,必须在上启用范围请求 你的服务器。虽然默认情况下在web服务器上启用,例如 在Apache中,您可以通过检查服务器是否响应 接受范围标题

如果文件为ogg格式,则标题也会有所帮助。发件人:

Ogg格式不封装媒体的持续时间,因此对于 视频控件上的进度条,用于显示播放的持续时间 在视频中,Gecko需要使用其他方法确定媒体的长度 意味着

壁虎有两种方法可以做到这一点。最好的方法是提供一个 提供Ogg媒体文件时的X-Content-Duration标头。此标题 以秒为单位提供视频的持续时间(不是HH:MM:SS格式) 作为浮点值


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

我在本地网络中执行此操作,因此无法链接到它,但我的html输出如下所示:
谢谢,“接受范围:字节”修复了这个问题。我仍然建议改进PHP脚本以支持范围。另外,我建议您使用getResource和PHP的流功能来代替getBytes。这将为您节省大量内存。很好的提示,最近我没有关注mongo的开发,但更新了我的mongo实例,现在我使用
$stream=$file->getResource();虽然(!feof($stream)){echo fread($stream,8192);}
我不知道我的性能提升了多少,但学习新东西总是很好的。