【发布时间】:2016-04-13 03:19:02
【问题描述】:
我需要从 Amazon s3 存储桶下载(或可能流式传输)一首歌曲。问题是,如果歌曲长度为 270 秒,我想在歌曲的 150 秒处开始下载/流式传输,然后从那里播放。
我如何使用 Amazon s3 Web 服务和 Java EE servlet 技术来完成这项工作?
【问题讨论】:
标签: java amazon-web-services jakarta-ee amazon-s3 streaming
我需要从 Amazon s3 存储桶下载(或可能流式传输)一首歌曲。问题是,如果歌曲长度为 270 秒,我想在歌曲的 150 秒处开始下载/流式传输,然后从那里播放。
我如何使用 Amazon s3 Web 服务和 Java EE servlet 技术来完成这项工作?
【问题讨论】:
标签: java amazon-web-services jakarta-ee amazon-s3 streaming
使用AWS Java SDK,您应该使用AmazonS3Client,并通过GetObjectRequest 的实例调用getObject。创建请求时,使用要获取的字节范围调用setRange。这将使您无需下载整个文件即可获得文件的一部分。 getObject() 返回一个 S3Object,您可以使用它将文件内容流式传输到音乐播放器或本地文件或任何您想要的。
有两个棘手的部分:
一个棘手的部分是您可能还需要歌曲的标题字节。例如。如果文件是 MP3 格式,则需要MP3 header。您可以使用与上述相同的方法来获取标头的字节范围。
另一个棘手的部分是如何确定文件中的字节偏移量,从歌曲的几秒开始。请参阅this question。您可以通过获取以字节为单位的整个文件大小(请参阅getObjectMetadata)、除以歌曲的总长度(以秒为单位)并乘以偏移下载的秒数来轻松估算字节偏移。
【讨论】: