iPhone渐进式下载音频播放器[关闭]

问题描述 投票:10回答:4

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

我找到了AudioStreamer项目,但它似乎非常复杂,并且在无尽的流中效果最佳。

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

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

/ Br John

iphone audio-player progressive-download
4个回答
8
投票

遗憾的是,在iPhone上播放音频流并不简单。这篇文章让我开始:Streaming and playing an MP3 stream

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


5
投票

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

  • MPMoviePlayerController
  • AVPlayer
  • Safari <audio>播放器

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

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


4
投票

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

要查找音频文件的大小,您可以使用[response expectedContentLength]

- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response 

1
投票

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

StreamingKit by @tumtumtum

© www.soinside.com 2019 - 2024. All rights reserved.