【问题标题】:HTML5 audio from mongodb GridFS来自 mongodb GridFS 的 HTML5 音频
【发布时间】:2012-11-01 00:20:17
【问题描述】:

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

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

【问题讨论】:

    标签: html mongodb audio gridfs


    【解决方案1】:

    尝试添加 Accept-Ranges = bytes 标头。来自http://html5doctor.com/html5-audio-the-state-of-play/

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

    如果文件是 ogg 格式,X-Content-Duration = length_in_seconds 标头也可能会有所帮助。来自https://developer.mozilla.org/en-US/docs/Configuring_servers_for_Ogg_media

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

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

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

    【讨论】:

    • 谢谢,“Accept-Ranges: bytes”解决了这个问题。
    • 我仍然建议改进您的 PHP 脚本以支持范围。此外,我建议您使用 getResource 并使用 PHP 的流功能,而不是 getBytes。它将为您节省大量内存。
    • 好的提示,最近没有关注 mongo 开发,但更新了我的 mongo 实例,现在我使用 $stream = $file->getResource(); while (!feof($stream)) { echo fread($stream, 8192); } 我不知道我得到了多少性能提升,但总是好的学习新事物。
    【解决方案2】:

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

    【讨论】:

    • 我在本地网络中执行此操作,所以我无法链接到它,但我的 html 输出看起来像:<audio id="audio" controls="controls" preload="auto"> <source src="<?php echo site_url() . "records/getAudio/" . $i->file['_id']; ?>" type="<?php echo $i->file['file_type']; ?>" /> Use Google Chrome. </audio> 除了将音量设置为 0.1,我不使用任何脚本:@987654322 @
    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 2015-12-17
    • 1970-01-01
    • 2016-04-27
    • 2012-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多