我使用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>预加载设置为none,因为我只想在用户按play之后才开始下载mp3文件。
现在的问题是(特别是移动浏览器,主要是铬移动浏览器),当用户按下play时,需要相当长的时间(大约8-10秒) mp3才能真正开始播放。不管我设置了哪个缓存控件,每次都会发生这种情况。
P.S.:我从未设计的:https://github.com/tpyo/amazon-s3-php-class中使用这个amazon类。
发布于 2013-12-17 19:13:50
我认为您正在下载整个文件到您的服务器之前,转身和服务的文件。您的用户将不得不等待整个文件被下载到您的服务器,然后等待足够多的文件下载到他们的机器上,然后才能开始播放,而指向S3的直接链接将允许用户进行编程。
https://stackoverflow.com/questions/20371216
复制相似问题