我有一个简单的javascript播放器,我想从aws s3 sdk(Php)流式传输音频文件(mp3)。 这些文件是私有,所以我也应该进行身份验证。
如果我平心地将mp3文件的公共链接插入到html对象的src中,则该流可以正常工作。
TNX
答案 0 :(得分:2)
您不需要通过php后端进行流式传输。您可以使用php代码生成Presigned url并将其发送到前端。它将在有限的时间内访问。
示例PHP代码:
//Creating a presigned request
$s3Client = new Aws\S3\S3Client([
'profile' => 'default',
'region' => 'us-east-1',
'version' => '2006-03-01',
]);
$cmd = $s3Client->getCommand('GetObject', [
'Bucket' => 'my-bucket',
'Key' => 'testKey'
]);
$request = $s3Client->createPresignedRequest($cmd, '+20 minutes');
$presignedUrl = (string) $request->getUri();
<强>参考:强>
https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/s3-presigned-url.html
希望它有所帮助。
答案 1 :(得分:0)
如果您指的是“真正的流式传输”(不是渐进式下载),那么仅使用S3就无法做到这一点。
您需要将文件存储在S3上,使用MediaConvert将mp3转换为HLS流(与其他相比,我建议使用HLS),这会将mp3分解为.m3u8和.ts文件,然后使用播放器例如VideoJS,然后您可以将音频作为真正的流播放。
或者您也可以使用https://s3mediavault.com/demo/s3-streaming-audio-player/之类的音频流播放器,也可以进行定期的渐进式下载。
如果您说“流式传输”是指“只播放音频文件”,那么您需要使用AWS PHP SDK连接到文件并获取签名的URL,然后将其用作您的来源播放器。