如何从Aws s3流式传输音频文件(mp3)?

时间:2018-06-09 16:25:47

标签: amazon-s3 audio-streaming

我有一个简单的javascript播放器,我想从aws s3 sdk(Php)流式传输音频文件(mp3)。 这些文件是私有,所以我也应该进行身份验证。

如果我平心地将mp3文件的公共链接插入到html对象的src中,则该流可以正常工作。

TNX

2 个答案:

答案 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,然后将其用作您的来源播放器。