亚马逊 s3 更快地加载音乐文件
Amazon s3 Loading music files faster
我需要从 Amazon s3 存储桶下载(或可能流式传输)一首歌曲。问题是,如果歌曲长度为 270 秒,我想在歌曲的 150 秒处开始播放 download/stream,然后从那里开始播放。
我如何使用 Amazon s3 网络服务和 Java EE servlet 技术完成此操作?
使用带字节范围的AWS Java SDK, you should use AmazonS3Client, and call getObject on it with an instance of GetObjectRequest. When creating your request, call setRange得到。这将使您无需下载整个文件即可获得文件的一部分。 getObject()
returns 一个 S3Object,可用于将文件内容流式传输到音乐播放器或本地文件或任何您想要的内容。
有两个棘手的部分:
一个棘手的部分是您可能还需要歌曲的 header 字节。例如。如果文件是 MP3 格式,则需要 MP3 header。您可以使用上面相同的方法来获取 header.
的字节范围
另一个棘手的部分是如何根据歌曲中的秒数确定文件中的字节偏移量。参见 this question regarding that. You could easily estimate byte offset by getting the entire file size in bytes (see getObjectMetadata),除以歌曲总长度(以秒为单位),然后乘以秒数以抵消下载量。
我需要从 Amazon s3 存储桶下载(或可能流式传输)一首歌曲。问题是,如果歌曲长度为 270 秒,我想在歌曲的 150 秒处开始播放 download/stream,然后从那里开始播放。
我如何使用 Amazon s3 网络服务和 Java EE servlet 技术完成此操作?
使用带字节范围的AWS Java SDK, you should use AmazonS3Client, and call getObject on it with an instance of GetObjectRequest. When creating your request, call setRange得到。这将使您无需下载整个文件即可获得文件的一部分。 getObject()
returns 一个 S3Object,可用于将文件内容流式传输到音乐播放器或本地文件或任何您想要的内容。
有两个棘手的部分:
一个棘手的部分是您可能还需要歌曲的 header 字节。例如。如果文件是 MP3 格式,则需要 MP3 header。您可以使用上面相同的方法来获取 header.
的字节范围另一个棘手的部分是如何根据歌曲中的秒数确定文件中的字节偏移量。参见 this question regarding that. You could easily estimate byte offset by getting the entire file size in bytes (see getObjectMetadata),除以歌曲总长度(以秒为单位),然后乘以秒数以抵消下载量。