Разница между AVAudioPlayer AVPlayer AVQueuePlayer MPMusicPlayerController MPRemoteCommandCenter MPNowPlayingInfoCenter для приложения iOS 13+ - PullRequest
1 голос
/ 10 апреля 2020

Все темы в этой теме c действительно старые (5+ лет), и я не могу сформулировать четкий СОВРЕМЕННЫЙ подход, так что, надеюсь, это можно будет обобщить к 2020 году (Swift 5, Xcode 11).

Если бы вы собирали приложение для игрока AUDIO (не просто musi c) для iPhone с iOS 13 таким образом, чтобы Перспективное мышление (не волнует ничего, что не поддерживает iOS 14 - поэтому ничего не ниже 8), какие наборы / классы вы бы использовали, если бы требования были ...

  • Приложение может сохранять и воспроизводить загруженные файлы MP3 ЛОКАЛЬНО (необязательно в потоковом или встроенном виде). ​​
  • Пользователь имеет базовый c проигрыватель для управления звуком (воспроизведение / пауза / очистка / громкость).
  • Приложение имеет аудио-очередь (порядок воспроизведения трека), которая может быть в любое время изменена приложением.
  • Пользователь может перемещаться (поиск назад / вперед) через очередь.
  • Пользователь может выбрать воспроизведение на аудиоустройствах Bluetooth, к которым подключен телефон.
  • Звук может воспроизводиться в фоновом режиме (при выключенном экране или в другом приложении).
  • Приложение может запускать отслеживание и настраивать очередь в фоновом режиме (без взаимодействия с пользователем) .
  • Аудио интегрируется с собственными iOS элементами управления (RemoteControlEvents).
  • Приложение является «Воспроизводимым приложением» в соответствии с рекомендациями Apple. БОНУС (если возможно, пока):
  • Звук приложения может перекрывать воспроизведение музыки c, как это делает приложение с указаниями (я понимаю, что это может свести на нет фоновые и «теперь воспроизводимые» функции, но, возможно, это поможет обсуждению для большей ясности) обоснование выбора метода для разработчиков приложений).

Так вы бы использовали AVAudioPlayer или AVPlayer или MPMusicPlayerController? MPRemoteCommandCenter или MPNowPlayingInfoCenter?

Возможно, некоторые требования являются взаимоисключающими или даже невозможными, но я не могу понять, почему существует так много методов для управления воспроизведением аудио без четкого разграничения между их вариантами использования или почему это важно, если аудио - * * * * * или речь, скачано или передано в потоковом режиме. Аудио, очевидно, относится ко второму классу пользователей видео в Apple, особенно в области речи, но я думаю, что к определенным типам базовых c приложений, таких как списки воспроизведения, подкасты и другие типы аудиоприложений, должно быть какое-то направление.

1 Ответ

0 голосов
/ 11 апреля 2020

Я постараюсь ответить на ваш вопрос, насколько мне известно:

Приложение может хранить и воспроизводить загруженные файлы MP3 ЛОКАЛЬНО (необязательно в потоковом или встроенном виде). ​​

  • Вы можете использовать либо AVPlayer, либо AVAudioPlayer. AVPlayer имеет больше возможностей. Проверьте документацию Apple здесь для AVPlayer. И здесь для AVAudioPlayer.

Пользователь имеет базовый c контроль проигрывателя звука (воспроизведение / пауза / очистка / громкость).

  • AVAudioPlayer имеет все необходимые элементы управления для воспроизводимого звукового файла.

Приложение имеет аудио-очередь (порядок воспроизведения трека), которую можно настроить в в любое время с помощью приложения.

  • Вам нужно будет использовать AVQueuePlayer, который наследуется от AVPlayer. Проверьте документы Apple здесь .

Пользователь может выбрать воспроизведение на аудиоустройствах Bluetooth, к которым подключен телефон.

  • Это не имеет значения, какой вы выбираете из вышеперечисленного. Это AVAudioSession вариантов. Проверьте документы здесь .

Звук может воспроизводиться в фоновом режиме (при выключенном экране или в другом приложении).

  • Вам необходимо добавить в приложение возможность BackgroundMode и проверить аудио, параметры трансляции.

Звук может запускать трек и настраивать очередь в фоновом режиме (без взаимодействия с пользователем) .

  • Вам потребуется добавить расширение приложения для управления вашим queuePlayer.

Аудио интегрируется с собственными iOS элементами управления (RemoteControlEvents) .

  • Используйте MPNowPlayingInfoCenter и обновите его информацию, чтобы иметь возможность обновлять название песни, исполнителя, обложку и т. Д. c ... Документы Apple здесь .

В дополнение к MPRemoteCommandCenter для прослушивания событий и соответствующего обновления вашего проигрывателя Документы .

Воспроизведение аудио может перекрывать воспроизведение musi c как приложение для указаний (я понимаю, что это сводит на нет фоновые и «играющие» функции, но, возможно, это помогает обсуждению для более ясного обоснования выбора метода для разработчиков приложений.

  • Также в параметрах категории AVAudioSession's добавьте параметр .mixWithOthers.

Так вы бы использовали AVAudioPlayer или AVPlayer или MPMusicPlayerController? MPRemoteCommandCenter или MPNowPlayingInfoCenter?

Используйте MPMusicPlayerController, если вы играете из библиотеки устройств.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...