在iOS客户端上使用HTTP Live Streaming播放音频文件流,而不会将UI丢失到Quick Time

时间:2011-01-18 06:38:18

标签: iphone audio-streaming http-live-streaming

我有一个HTTP Live流媒体服务器设置,提供分段的mp3音频内容(URL指向playlist.m3u8索引文件)。我需要构建一个iOS客户端应用程序来使用任何标准的Apple控件/ UI来使用而不是的音频流。它应该在后台播放流,我想使用我自己的自定义UI来提供控件。

由于内容纯粹是音频,我不想在接管UI时使用MPMoviePlayerController类。我尝试过使用AVAudioPlayer,虽然它不适用于网络流,但不出所料地无法播放错误代码“-43”:NSOSStatusErrorDomain。

我还尝试创建一个高度和宽度为1像素的UIWebView,并将其指向服务器上的playlist.m3u8文件。这很有用,但不幸的是我仍然失去了UI,因为UIWebView只是将播放的任务委托给QuickTime播放器,该播放器在我的应用程序中以iOS 3.xx设备的全屏显示。

基本上,在我看来,Apple没有提供任何客户端API来使用HTTP直播音频流,开发人员不得不将UI放弃到使用QT徽标播放流的QuickTime播放器篡夺屏幕。 ughh ...

我很想知道是否有人有建议帮我解决上述问题。否则,我的计划B是放弃HTTP Live Streaming并使用着名的Matt Gallagher经典流媒体实现。但是,我有点担心Apples guidelines明确暗示对于预计会通过蜂窝网络(我的应用程序)发送大量音频或视频内容的应用程序需要使用HTTP Live流媒体。这是否意味着我的计划B实施容易被Apple拒绝?有没有办法绕过这条准则?

2 个答案:

答案 0 :(得分:13)

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

文档说:

  

播放发生在由...拥有的视图中   电影播放器​​也发生了   全屏或内联。

     

在iOS 3.1及更早版本中,此类   实现了全屏电影播放器   仅

使用Apple的样本流进行的快速测试证明了您想要做的事情。

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 :(得分:5)

我在我的一个应用中使用了Matt Gallagher的音频流媒体。这是一个互联网广播应用程序,非常像Pandora和LastFM。是的,它被Apple接受,从那时起一直在App Store中。

所以在我看来,你的计划B实际上并没有那么大的风险。 :-)