在iOS客户端使用HTTP Live Streaming播放音频文件流而无需将UI转换为Quick Time

14
我有一个HTTP Live流媒体服务器设置,提供分段的mp3音频内容(URL指向playlist.m3u8索引文件)。 我需要构建一款iOS客户端应用程序来使用这个音频流,不使用任何标准的Apple控件/ UI。 它应该在后台播放音频流,我想使用自己定制的UI来提供控件。
由于内容纯粹是音频,我不想使用MPMoviePlayerController类,因为它会接管UI。 尽管AVAudioPlayer不适用于网络流,但我已经尝试使用它,结果意料之中地出现错误代码“-43”:NSOSStatusErrorDomain无法播放。
我还尝试创建一个高度和宽度均为1像素的UIWebView,并将其指向服务器上的playlist.m3u8文件。 这可以工作,但不幸的是,我仍然失去了UI,因为UIWebView只是将回放任务委托给QuickTime播放器,它会在iOS 3.xx设备上全屏启动。
基本上,对我来说,苹果没有为消费HTTP Live Streaming 音频流提供任何客户端API,开发人员被迫放弃UI并使用QuickTime播放器播放流并占据屏幕。 哎...
我想知道是否有人有建议帮助我解决以上问题。否则,我的备选方案是放弃HTTP Live流媒体并使用著名的Matt Gallagher经典流媒体实现。 但是,我有点担心苹果的指南 明确建议,对于预计发送大量音频或视频内容的应用程序(如我的应用程序),必须使用HTTP Live流媒体。 这是否意味着我的备选方案实现容易被苹果拒绝? 是否有方法规避此指南?
2个回答

13

http://developer.apple.com/library/ios/#documentation/MediaPlayer/Reference/MPMoviePlayerController_Class/Reference/Reference.html

文档中说:

播放在电影播放器所拥有的视图中进行,可以全屏或行内进行。

在iOS 3.1及更早版本中,这个类只实现了全屏电影播放器。

使用苹果提供的示例流进行快速测试可以证明您想要做的是可能的。

MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:[NSURL URLWithString:@"http://devimages.apple.com/iphone/samples/bipbop/gear4/prog_index.m3u8"]];
player.movieSourceType = MPMovieSourceTypeStreaming;
player.view.hidden = YES;
[self.view addSubview:player.view];
[player play];

1
问题提到了“在我的应用程序中启动全屏的iOS 3.xx设备”。我知道可调整大小的视图可能性以及在iPhone 4.0及更高版本中隐藏它的能力(因为iOS 3.2仅适用于iPad,因此在iOS 3.1.x之后,直接是iPhone的iOS 4.0)。API player.view.hidden = YES; 仅适用于iOS 3.2及更高版本,这意味着仅适用于安装有iOS 4.0及以上版本的iPhone。因此,在我的应用程序中,我希望支持iOS 3.x及以上版本的iPhone,这不是可行的选项。 - bhavinb
2
明白了,很抱歉我在问题中漏掉了iOS的要求。然而,您可能需要认真考虑一下要花多少精力来支持运行3.x版本的设备。我曾经参与开发过一个应用程序,拥有超过50万次下载量,93%的用户正在运行4.0或更高版本。此外,请参阅以下链接:http://www.quora.com/What-proportion-of-all-iPhone-owners-use-iOS4-*-today - SteveB
你需要复制并粘贴该链接,因为星号会导致链接出错。很抱歉我无法正确地链接它。 - SteveB
我没有这个iOS限制,所以我尝试了这个解决方案。我正在使用Icecast流式传输内容,但是当我运行示例代码时,我遇到了这个崩溃:“AVPlayerItem不能与AVPlayer的多个实例相关联”。有任何想法吗? - gonso
@gonso 请开一个新的问题,将代码发布在那里。在这些评论中添加新问题的链接,我会查看它。 - SteveB
@SteveB:不错的链接,可以了解不同版本iOS用户数量。 - viral

5
我在我的应用程序中使用了Matt Gallagher的音频流传输器。它是一个类似于Pandora和LastFM的互联网电台应用程序。是的,它已经被Apple接受并自发布以来一直在App Store上架。

因此在我看来,你的计划B实际上并不那么冒险。:-)


谢谢提供信息。您在2010年2月5日之前提交了应用程序吗?根据苹果的指南文档修订历史记录,这是他们发布有关应用程序需要使用HTTP Live Streaming进行高带宽媒体流传输的规定的时间。我猜想他们可能会对在该指南公开宣布后提交到商店的应用程序的审核政策更加严格。 - bhavinb
嗯...我大约在2010年9月提交的申请,然后在随后的10月得到了批准。 - Di Wu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接