Как вы можете воспроизводить музыку из приложения iPod, все еще получая события пульта дистанционного управления в вашем приложении? - PullRequest
9 голосов
/ 07 июля 2010

Хорошо, я пытаюсь позволить пользователю выбирать песни из своей библиотеки iPod для прослушивания, но я все еще хочу получать уведомления удаленного управления (наушники, экран блокировки OSD и т. Д.) В своем приложении, чтобы я мог сделать некоторыелишние вещи.До сих пор я могу воспроизводить либо музыку с iPod, либо события в наушниках, но не оба одновременно.

Вот что я знаю до сих пор ...

  1. Если вы используетеMPMusicPlayer, вы можете легко иметь программный доступ ко всей музыкальной библиотеке.Однако оно, а не ваше приложение, получает удаленные уведомления независимо от того, используете ли вы applicationMusicPlayer или ipodMusicPlayer.

  2. Если вы используете AVAudioPlayer (проигрыватель, рекомендованный Apple для большинства звуков в вашем приложении), вы можетелегко получать удаленные уведомления, но у него нет собственного доступа к библиотеке iPod.

  3. AVAudioPlayer можно инициализировать с помощью URL-адреса ресурса, а дорожки в библиотеке iPod (типа MPMediaItem) делаютиметь свойство URL, которое возвращает экземпляр NSURL, который явно указан в документации для использования с объектами AVAsset, но при попытке инициализации AVAudioPlayer с этим NSURL происходит сбой.(Я использовал трек «сейчас воспроизводится» в iPod, который был в формате MP3, и он вернул действительный объект NSURL, но инициализация не удалась. Еще хуже, когда это был файл Audible.com, свойство NSURL полностью вернуло ноль.)

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

  5. Если вы попробуете так же, как # 4, но вместо этого установитекатегория аудио-сеанса в смешанном варианте, ваша сессия не деактивируется, но вы все равно теряете возможность дистанционного управления, когда iPod начинает играть.

Короче говоря, всякий раз, когда проигрывается MPMusicPlayer,Кажется, я не могу получать удаленные события, и я не знаю другого способа воспроизведения контента из библиотеки iPod.кроме использования MPMusicPlayer.

ЛЮБЫЕ предложения о том, как обойти это, будут приветствоваться.Творческий или сумасшедший.Не волнует, пока это работает.

Кто-нибудь?Кто-нибудь?Bueller?Буллер?

М

Ответы [ 4 ]

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

ХА!Решено!Я знал, что это возможно!(Спасибо Async-games.com поддержка!)

Вот как можно воспроизводить музыку iPod в вашем приложении, с поддержкой фона и с приложением, получающим уведомления от пульта дистанционного управления.

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

Готово и готово!

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

Черт, хотя ... Я просто хотел, чтобы он работал с Audible.com файлы.(Для интересующихся причина, по которой это не так, заключается в том, что URL ресурса для слышимого файла возвращает ноль. Воняет! Но что вы можете сделать!)

2 голосов
/ 18 января 2012

Возможно, он больше не будет полезен для ОП, но, как и для людей, которые находят эту страницу через поиск в Google, я все равно опубликую ее.

Альтернативный (но довольно уродливый) подход, если вас интересуют только события дистанционного управления музыкой и вы все еще хотите воспроизводить файлы audible.com ...

Просто продолжайте использовать MPMusicPlayer и отслеживайте его уведомления (теперь игра и состояние изменились). Чтобы получать эти уведомления в фоновом режиме, вы можете использовать «магию фонового потока», описанную в разных местах, чтобы предотвратить приостановку работы вашего приложения. Вы не собираетесь получать пульты дистанционного управления напрямую (так как их получает плеер iPod), но, отслеживая изменения в режиме «сейчас воспроизводится», вы можете вывести события ControlPreviousTrack и ControlNextTrack, а, отслеживая воспроизведениеState, вы можете вывести TogglePlayPause команда.

Недостатком является то, что ваше приложение будет работать постоянно без уважительной причины (хотя, если честно, если iOS запрограммирована правильно, фоновый поток, который ничего не делает, почти не потребляет батареи).

Другая альтернатива: использовать MPMoviePlayer? Я проверил, что он хорошо работает в фоновом режиме, и должен получать события удаленного управления, а также. Он может воспроизводить MPMediaItem изначально, так что, надеюсь, файлы Audible.com также ...

0 голосов
/ 15 ноября 2010

Одна вещь, которую я заметил в MPMediaItemPropertyAssetURL, заключается в том, что хотя возвращаемый объект находится в NSURL, но absoluteString выглядит примерно так:

ipod-library: //item/item.mp3? Id = 580807975475997900

Это не то, что хочет AVAudioPlayer.AVAudioPlayer хочет, чтобы объект NSURL создавался из файла с допустимым путем к файлу.

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

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

Обойти это невозможно. Если пользовательское приложение iPod воспроизводит выбор iPod, все удаленные события будут отправляться на iPod, а не на ваше приложение.

...