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

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

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

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

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

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

  2. Независимо от того, используете ли вы экземпляры ipodMusicPlayer или applicationMusicPlayer, все удаленные события поступают в само приложение iPod, а не в ваше, даже если вы их явно просили. Если вы используете экземпляр applicationMusicPlayer и используете пульт ДУ для выбора "Воспроизвести", приложение iPod получает команду, поэтому звук отключается и прерывается, и начинается воспроизведение в приложении iPod. Если вы выбрали вместо этого ipodMusicPlayer, то, конечно, это не имеет значения, поскольку вы прямо сказали, что в основном просто заинтересованы в удаленном управлении приложением iPod, которое, опять же, является тем, что фактически принимает удаленные события.

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

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

Примеры кода или, по крайней мере, явные шаги по отношению к одному из встроенных шаблонов приложения, будут С благодарностью. (Реализация даже не нужна... только шаги. Надеюсь, это успокоит неизбежную вещь "Все еще под NDA", с которой люди продолжают отвечать на вопросы.)

отметка

2 ответа

Решение

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

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

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

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

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

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

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

M

Другие вопросы по тегам