【问题标题】:Amazon s3 Loading music files fasterAmazon s3 加载音乐文件更快
【发布时间】: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


    【解决方案1】:

    使用AWS Java SDK,您应该使用AmazonS3Client,并通过GetObjectRequest 的实例调用getObject。创建请求时,使用要获取的字节范围调用setRange。这将使您无需下载整个文件即可获得文件的一部分。 getObject() 返回一个 S3Object,您可以使用它将文件内容流式传输到音乐播放器或本地文件或任何您想要的。

    有两个棘手的部分:

    一个棘手的部分是您可能还需要歌曲的标题字节。例如。如果文件是 MP3 格式,则需要MP3 header。您可以使用与上述相同的方法来获取标头的字节范围。

    另一个棘手的部分是如何确定文件中的字节偏移量,从歌曲的几秒开始。请参阅this question。您可以通过获取以字节为单位的整个文件大小(请参阅getObjectMetadata)、除以歌曲的总长度(以秒为单位)并乘以偏移下载的秒数来轻松估算字节偏移。

    【讨论】:

    • 在我问这个问题之前,我已经完全尝试过并考虑了那些棘手的部分。我不断收到我似乎无法解决的 java io.eofexception。如果错误仍然存​​在,我将尝试重新创建我的代码,然后使用包含的代码编辑我的问题
    • 我得到了它的工作我不知道我做了什么不同的事情谢谢你虽然没有你让我的怀疑放心我不会回到它
    • 实际上,当我将范围设置为(0-whatever)时它起作用了,但是如果我尝试(anythingoverzero-whatever)它不起作用,我得到一个 javax.sound.sampled.UnsupportedAudioFileException
    • 那是因为音频文件格式例如mp3 被批处理成跨越多个字节的帧。当您只选择一个未与其中一个对齐的任意字节偏移量时,它会使文件不可读。如果你能弄清楚一个帧有多大,你可以将你的字节偏移量与之对齐。有关更多信息,请参阅mpgedit.org/mpgedit/mpeg_format/mpeghdr.htm。该网站说,几种形式的 MPEG 音频允许在帧上进行分割。您也可以专门针对这个问题提出关于 SO 的另一个问题。
    猜你喜欢
    • 1970-01-01
    • 2019-06-05
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 2020-05-29
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多