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

bha*_*inb 14 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 Live Streaming 音频流,开发人员被迫放弃用户界面到QuickTime播放器,该播放器播放带有QT徽标的流播放屏幕.ughh ...

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

Ste*_*veB 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];
Run Code Online (Sandbox Code Playgroud)

  • 疑难杂症.对不起,我错过了问题中的iOS要求.但是,您可能需要认真考虑要在运行3.x的设备上投入多少精力.我帮助构建了一个拥有超过50万次下载的应用程序,93%的用户运行4.0或更高版本.另请参阅此链接:http://www.quora.com/What-proportion-of-all-iPhone-owners-use-iOS4-*-today (2认同)

Di *_* Wu 5

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

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