屏蔽 Amazon S3 mp3 文件 url 和 html5 移动音频问题

Posted

技术标签:

【中文标题】屏蔽 Amazon S3 mp3 文件 url 和 html5 移动音频问题【英文标题】:Masking Amazon S3 mp3 file url and html5 mobile audio issues 【发布时间】:2013-12-04 09:13:59 【问题描述】:

我正在使用amazon s3 服务器为用户提供 mp3 文件。但是,为了控制这些 mp3 文件的使用并保护真实的s3 url,我使用 php 文件来屏蔽 url。以下是我使用的代码:

$audioName = $_GET['p'];
require_once 'class/S3.php';

$expires = 60*60*24*30;

header("Cache-Control: public, max-age=".$expires.", pre-check=".$expires);
header("Expires: " . gmdate('D, d M Y H:i:s', time()+$expires) . ' GMT');

$getPhoto = new S3(access key, secret access key);
$response = S3::getObject('bucketname', $audioName);

header('Content-Type: ' . $response->headers['type']);
header('Content-Length: ' . $response->headers['size']);
echo $response->body;

然后在我的 html 端我使用一个简单的音频标签来播放这个文件:

<audio controls preload="none">
<source src="audiofile.php?id=1" type="audio/mpeg">
</audio>

Preload 设置为 none,因为我只想在用户按下播放后才开始下载 mp3 文件。

现在的问题是(尤其是移动浏览器,主要是 chrome 移动浏览器),当用户按下播放键时,mp3 真正开始播放需要相当长的时间(大约 8-10 秒)。每次都会发生这种情况,无论我设置了什么缓存控制。

P.S.:我使用来自 undesign 的这个 amazon s3 类:https://github.com/tpyo/amazon-s3-php-class

【问题讨论】:

【参考方案1】:

认为您正在将整个文件下载到您的服务器,然后再转身并提供文件。您的用户必须等待整个文件下载到您的服务器,然后将足够多的文件下载到他们的机器上,然后才能开始播放,而直接链接到 S3 将允许用户进行编程

【讨论】:

以上是关于屏蔽 Amazon S3 mp3 文件 url 和 html5 移动音频问题的主要内容,如果未能解决你的问题,请参考以下文章

上传amazon s3后获取文件url

Amazon S3 上传文件并获取 URL

使用签名的 url 将文件从 angularjs 直接上传到 amazon s3

如何保护 Amazon S3 URL

限制对 Amazon S3 URL 的全球访问

Apache zeppelin 无法从 Amazon S3 笔记本 json 文件中获取 URL