10

我正在尝试使用 http 和固定大小的 mp3 文件为 iPhone 实现渐进式下载音频播放器。

我找到了 AudioStreamer 项目,但它看起来非常复杂,并且最适合无休止的流。

我需要能够找出音频文件的总长度,并且我还需要能够在文件中查找。我发现了与 AudioStreamer 的黑客偏差,但它似乎对我来说效果不佳。http://www.saygoodnight.com/?p=14

我想知道是否有更简单的方法来实现我的目标,或者是否有一些更好的工作样本?我找到了低音库,但没有太多关于它的文档。

/Br约翰内斯

4

4 回答 4

8

不幸的是,在 iPhone 上播放音频流并不简单。这是让我开始的文章: 流式传输和播放 MP3 流

这是一个 OSX 项目,但其中大部分也适用于 iPhone。至于获得它的完整播放时间,您可能必须根据 http 标头的 content-length 属性来计算它,前提是它是一个 CBR 文件。否则,我想您必须在确定之前下载整个文件。

于 2010-03-29T21:44:20.443 回答
5

如果您只需要播放 MP3 文件,为什么要编写自己的下载器/播放器?iOS 内置了几个选项,每个选项都支持渐进式下载和 MP3 播放:

  • MPMoviePlayerController
  • AVPlayer
  • 野生动物园<audio>播放器

我个人对 and 的渐进式下载功能有MPMoviePlayerController疑问AVPlayer,所以也许这也是您的问题。我发现这些播放器通过多次请求 mp3 来尝试变得聪明,检查服务器是否支持通过 http 范围偏移进行渐进式下载。但是当服务器不支持范围偏移时,文件会被多次下载,占用带宽(!)。

在我最新的项目中,我嵌入了一个嵌入了 html<audio>标签的 UIWebView。Safari 播放器似乎比 AVPlayer 和 MPMoviePlayerController 表现得更好,但它也有自己的警告。一方面,让自动播放工作是一个 PITA。

于 2011-02-25T18:42:43.447 回答
4

iPhone Cool Projects 中有一个关于流式音频的非常好的章节。 http://apress.com/book/view/9781430223573 它展示了一种比 AudioStreamer 更简单的方法(使用 NSURLConnection 而不是 CFNetwork),更适合渐进式下载,并且没有多线程代码。

并找出您可以使用的音频文件的[response expectedContentLength]大小

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 
于 2011-02-16T13:33:06.037 回答
1

我知道这是一篇相当老的帖子,但想推荐一个开源的可靠库。它基于上面 @pzearfoss 推荐的 Matt Gallagher 的原始帖子。当前版本现在使用 AudioUnits,而不是 AudioQueue 类,因此它使您可以访问原始 PCM 样本,以便在播放之前进行任何操作(过滤等)。它还为您提供了免费的渐进式下载功能,而且工作量很小。图书馆似乎正在积极更新,这是一个巨大的优势!

@tumtumtum 的 StreamingKit

于 2014-06-04T13:33:51.680 回答