8

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

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

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

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

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

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

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

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

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

Марк

ответ

8

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

Stack Overflow: Play iPod music while receiving remote control events

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

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

+0

Огромное спасибо за публикацию этого! – genkilabs

+0

Нет проблем. Действительно разочаровывает то, что Apple не была более ясна в том, что там происходит. Еще более неприятным (хотя и понятным по причинам DRM) является то, что вы не можете делать звуковые файлы таким образом, что разрушило наше приложение, поскольку это было основным направлением. Что я могу сделать! Тем не менее, рад, что это помогло. – MarqueIV

2

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

Вот обновленный нить ...

How can you play music from the iPod app while still receiving remote control events in your app?

M

+0

Как этот парень это делает ??? Тьфу !!! http://www.engadget.com/2010/07/08/ios-4-adds-direct-access-to-itunes-library-iphone-dj-apps-about/ – MarqueIV

+0

Привет, как вы записываете аудио в задний план? – Namratha