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 设备提供全屏显示。

基本上,在我看来,Apple 似乎没有提供任何客户端 API 来消费 HTTP Live Streaming音频流,并且开发人员被迫将 UI 让给 QuickTime 播放器,该播放器播放带有 QT 徽标篡夺屏幕的流。呃……

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

4

2 回答 2

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];
于 2011-03-15T13:07:28.167 回答
5

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

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

于 2011-01-18T06:44:48.417 回答