Воспроизведение аудиофайлов с помощью HTTP Live Streaming на iOS-клиенте без потери пользовательского интерфейса до Quick Time

У меня есть сервер потоковой передачи HTTP Live, который обслуживает сегментированный аудиофайл в формате mp3 (URL указывает на индексный файл playlist.m3u8). Мне нужно создать клиентское приложение для iOS, чтобы использовать этот аудиопоток без использования каких-либо стандартных элементов управления/интерфейса Apple. Он должен воспроизводить поток в фоновом режиме, и я хочу использовать свой собственный пользовательский интерфейс для предоставления элементов управления.

Поскольку контент является исключительно аудио, я не хочу использовать класс MPMoviePlayerController, поскольку он принимает на себя пользовательский интерфейс. Я попытался использовать AVAudioPlayer, хотя он не предназначен для сетевых потоков, что неудивительно, что не удается воспроизвести с кодом ошибки "-43": NSOSStatusErrorDomain.

Я также попытался создать UIWebView с высотой и шириной в 1 пиксель и указать его на файл playlist.m3u8 на сервере. Это работает, но, к сожалению, я все еще теряю пользовательский интерфейс, поскольку UIWebView просто делегирует задачу воспроизведения проигрывателю QuickTime, который запускается в моем приложении с полноэкранным режимом для устройств iOS 3.xx.

По сути, мне кажется, что Apple не предоставила никаких клиентских API для использования аудиопотоков HTTP Live Streaming, и разработчики вынуждены отказаться от пользовательского интерфейса для проигрывателя QuickTime, который воспроизводит поток с логотипом QT, узурпирующим экран. Ughh...

Я хотел бы знать, если у кого-нибудь есть предложения, чтобы помочь мне с вышеупомянутым. В противном случае я планирую отказаться от HTTP Live Streaming и использовать знаменитую классическую реализацию потокового вещания Matt Gallagher. Тем не менее, я немного обеспокоен рекомендациями Apple, в которых четко указывается, что для приложений, от которых ожидается отправка большого количества аудио или видео контента по сотовым сетям (как и мое приложение), требуется использовать потоковую передачу HTTP Live. Означает ли это, что реализация моего плана B может быть отклонена Apple? Любые способы обойти это руководство?

Ответы

Ответ 1

Я использовал аудио стример Мэтта Галлахера в одном из моих приложений. Это приложение для интернет-радио, похожее на Pandora и LastFM. И да, это было принято Apple и находится в App Store с тех пор.

Итак, на мой взгляд, ваш план B на самом деле не такой рискованный.:-)

Ответ 2

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];