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

Я потратил на это два дня и никуда не попал.Я пытаюсь использовать [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», с которой люди продолжают отвечать на вопросы.)

Mark

Ответы [ 2 ]

8 голосов
/ 09 июля 2010

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

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

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

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

2 голосов
/ 07 июля 2010

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

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

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

M

...