Поддержка фонового звука и удаленного управления с помощью MPMusicPlayerController на iOS 4. Возможно ли это вообще?

Я потратил на это два дня и ничего не добился. Я пытаюсь использовать [MPMusicPlayerController applicationMusicPlayer] для воспроизведения звука, выбранного из пользовательской библиотеки iPod, и запуска его в фоновом режиме, а также для поддержки удаленных событий. Теперь заставить музыку играть - самая простая часть. Получите экземпляр, выберите песни, назначьте музыкальную очередь и играйте. Готово и сделано. НО ... а) я не могу заставить его играть в фоновом режиме и б) даже когда на переднем плане я не могу заставить события удаленного управления работать вообще!

И прежде чем вы спросите, да, я установил записи plist, категорию аудиосессии, вызов, чтобы сказать, что я заинтересован в получении удаленных событий, и настроил службу быстрого реагирования для их прослушивания, поэтому, пожалуйста, знайте, да, я ' Я прочитал, прочитал каждый документ по теме, который мне удалось найти * (* в этой задаче я виню Apple за то, что она не совсем ясна по этой теме и не имеет для нее НИКАКОГО примера кода!), и я наблюдал за каждым из Видео WWDC, относящиеся к этому (даже замораживание экрана, чтобы скопировать код в точности из их примера ...), поэтому, если я не пропустил что-то не в этом списке, отвечать любым из этих ответов не будет помогать.

Еще одна вещь ... Я прямо говорю об использовании MPMusicPlayerController, который, согласно документации, никогда не использует сеанс приложения. Он всегда использует системный сеанс. (Возможно, это само по себе отвечает на мой вопрос, но в документации это четко не сказано, поэтому я не уверен, отсюда и этот вопрос.)

Тем не менее, через два дня мои мысли таковы:

  1. При использовании MPMusicPlayerController, независимо от того, какие методы вы вызываете или какие записи в списке вы установили, ваше приложение никогда не будет работать в фоновом режиме. Период. Если вы используете экземпляр ipodMusicPlayer, музыка продолжает воспроизводиться, но это потому, что играет iPod, а не ваше приложение. Если вместо этого вы используете экземпляр applicationMusicPlayer, при переходе в фоновый режим ваша музыка останавливается. В обоих случаях ваше приложение приостановлено.

  2. Независимо от того, используете ли вы экземпляры ipodMusicPlayer или applicationMusicPlayer, все удаленные события поступают в само приложение iPod, а не в ваше, даже если вы явно запросили их. Если вы используете экземпляр applicationMusicPlayer и используете пульт дистанционного управления для выбора «Play», приложение iPod получает команду, поэтому звук прерывается, и воспроизведение начинается в приложении iPod. Если вместо этого вы выбрали ipodMusicPlayer, то, конечно, это не имеет значения, поскольку вы явно заявили, что в основном заинтересованы в удаленном управлении приложением iPod, которое, опять же, является тем, что на самом деле получает удаленные события.

  3. Значок в элементах управления с быстрым переключением внизу никогда не меняется на значок вашего приложения, потому что, опять же, ваше приложение никогда не настроено для приема событий. Приложение iPod есть, поэтому его значок там и появляется.

Так что я хочу знать ... я здесь не прав? Кто-нибудь успешно смог использовать MPMusicPlayerController и смог перехватить удаленные события? Хотя я бы предпочел использовать applicationMusicPlayer с поддержкой фоновой музыки, чтобы не гадить с iPod пользователя, важнее всего уведомления удаленного управления, то есть если мне придется использовать ipodMusicControl и держать мое приложение на переднем плане, чтобы перехватывать их. сообщения, пусть будет так. Это некрасиво, но хоть что-то.

Примеры кода или, по крайней мере, явные шаги по отношению к одному из встроенных шаблонов приложений были бы ОЧЕНЬ признательны. (Даже не нужно реализовывать ... только шаги. Надеюсь, это успокоит неизбежную вещь: «Это все еще под NDA», с которой люди продолжают отвечать на вопросы.)

отметка


person Mark A. Donohoe    schedule 04.07.2010    source источник


Ответы (2)


Я решил это. Информация находится в другом моем вопросе здесь ...

Переполнение стека: воспроизведение музыки с iPod при получении событий удаленного управления

... но вкратце - вам нужно использовать AVPlayer (но не AVAudioPlayer. Понятия не имею, почему это так!) с URL-адресом ресурса из MPMediaItem, который вы получили из библиотеки, затем установите категорию аудиосессии на Playable (НЕ включайте mixable!) и добавьте соответствующие ключи в файл info.plist, сообщая, что ОС, в которой ваше приложение хочет поддерживать фоновый звук.

Это позволяет воспроизводить элементы из библиотеки iPod (по какой-то причине, кроме файлов Audible.com!) И при этом получать удаленные события. Конечно, вам нужно проделать больше работы, и поскольку это ваш аудиоплеер, который отделен от приложения iPod, и он будет прерывать работу приложения iPod (что может быть, а может и не быть желательным. И снова, не включайте микширование, иначе приложение iPod захватит события дистанционного управления) но это перерывы!

person Mark A. Donohoe    schedule 09.07.2010
comment
Спасибо вам большое за размещение этого! - person genkilabs; 10.08.2011
comment
Без проблем. Действительно расстраивает то, что Apple не совсем ясно понимала, что там происходит. Еще более неприятным (хотя и понятным по причинам DRM) является то, что вы не можете создавать файлы Audible таким образом, что испортило наше приложение, поскольку это было основным фокусом. Что ты умеешь делать! Тем не менее, я рад, что это помогло. - person Mark A. Donohoe; 15.08.2011

Для всех, кто хочет знать, я узнал, что для воспроизведения звука в фоновом режиме вам нужно установить категорию аудиосессии на Playable, и тогда фоновый звук будет работать нормально. Если вы также хотите одновременно воспроизводить свои собственные звуки, вы должны отметить категорию как смешиваемую. Это решило часть фоновой музыки. Но я обнаружил, что каждый раз, когда iPod играет, вам не представляется возможным получать удаленные уведомления.

Вот обновленная ветка ...

Как можно воспроизводить музыку из приложения iPod, получая при этом события удаленного управления в ваше приложение?

M

person Mark A. Donohoe    schedule 07.07.2010
comment
Как этот парень это делает ??? Фу!!! engadget.com/2010/07/08/ - person Mark A. Donohoe; 09.07.2010
comment
Привет, как записать звук в фоновом режиме? - person Namratha; 17.02.2011