Воспроизведение потока аудиофайлов с помощью 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, занимающим экран. . тьфу ...

Я хотел бы знать, есть ли у кого-нибудь предложения, чтобы помочь мне с вышеуказанным. В противном случае мой план Б - отказаться от HTTP Live Streaming и использовать знаменитый Мэтт Галлахер классическая потоковая реализация. Однако меня немного беспокоят рекомендации по Apple., которые явно предполагают, что для приложений, которые, как ожидается, будут отправлять большой объем аудио- или видеоконтента по сотовым сетям (каковым является мое приложение), необходимо использовать потоковую передачу HTTP Live. Означает ли это, что реализация моего плана Б может быть отклонена Apple? Есть ли способы обойти это правило?


person bhavinb    schedule 18.01.2011    source источник


Ответы (2)


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

Так что, на мой взгляд, ваш план Б на самом деле не так уж и рискован. :-)

person Di Wu    schedule 18.01.2011
comment
Спасибо за информацию. Вы отправляли приложение до 5 февраля 2010 г.? Если посмотреть на историю изменений руководящего документа Apple, то можно сказать, что именно тогда они выпустили распоряжение о приложениях, требующих использования HTTP Live Streaming для потоковой передачи мультимедийных файлов с высоким уровнем ч / б. Я предполагаю, что они, возможно, ужесточили свою политику проверки только для приложений, отправленных в магазин после того, как это руководство было публично объявлено. - person bhavinb; 18.01.2011
comment
Хммм .. Я подал примерно в сентябре 2010 года и получил одобрение в октябре следующего года. - person Di Wu; 18.01.2011

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];
person SteveB    schedule 15.03.2011
comment
упомянутый вопрос ... который запускается в моем приложении в полноэкранном режиме для устройств iOS 3.xx. Я знаю о возможности просмотра с изменяемым размером и возможности скрыть его в iPhone 4.0 и более поздних версиях (поскольку iOS 3.2 была только для iPad, после iOS 3.1.x есть iOS 4.0 для iPhone). API player.view.hidden = YES; доступен только в iOS 3.2 и более поздних версиях, что означает для iPhone с iOS 4.0 и более поздних версий. Следовательно, это невыполнимый вариант, так как я хочу поддерживать iPhone на iOS3.x и выше в моем приложении. - person bhavinb; 16.03.2011
comment
Попался. Извините, я пропустил требование iOS в вопросе. Однако вы можете серьезно задуматься о том, сколько усилий вы хотите вложить в устройства, работающие под управлением 3.x. Я помог создать приложение, которое скачали более полумиллиона, и 93% пользователей используют версию 4.0 или выше. См. Также эту ссылку: quora.com/What- доля-всех-владельцев-iPhone-используют-iOS4- * -сегодня - person SteveB; 21.03.2011
comment
Вам придется скопировать и вставить эту ссылку, потому что звездочка ее испортила. Извините, мне не удалось правильно установить ссылку. - person SteveB; 21.03.2011
comment
У меня нет этого ограничения iOS, поэтому я попробовал это решение. Я транслирую контент с помощью icecast, но когда я запускаю пример кода, я получаю этот сбой: «AVPlayerItem не может быть связан с более чем одним экземпляром AVPlayer». Любые идеи, почему? - person gonso; 18.11.2011
comment
@gonso Откройте новый вопрос по вашей проблеме и разместите там код. Добавьте ссылку на новый вопрос в эти комментарии, и я посмотрю на него. - person SteveB; 22.11.2011
comment
@SteveB: симпатичная ссылка на количество пользователей iOS для разных версий. - person viral; 19.05.2012