Подтвердить что ты не робот

MPMoviePlayerController и звуковой смешение звука AVAudioPlayer

Я разрабатываю интерактивное приложение типа storybook для iPhone, и недавно я столкнулся с разочаровывающей ошибкой в ​​отношении микширования звука на устройстве.

Во-первых, я настраиваю сеанс аудио. Я установил категорию в AVAudioSessionCategoryAmbient, а затем запустил и воспроизвел экземпляр AVAudioPlayer. Теперь, когда фоновый звук воспроизводится, я предварительно загружаю видео для воспроизведения с помощью MPMoviePlayerController, за которым следует вызов prepareToPlay. Причина, по которой я предварительно загружаю видео, так это потому, что мне нужно, чтобы он мгновенно воспроизводился с репликой с довольно строгим сроком.

В этой конфигурации звук/фильм отлично работает, и они смешиваются, а не прерывают друг друга. Однако эта конкретная категория аудиосеансов не позволяет звуку продолжать воспроизведение, пока устройство заблокировано, что мне действительно нужно. В результате я вынужден рассмотреть другую категорию: AVAudioSessionCategoryPlayback.

По умолчанию эта категория не позволяет смешивать с другим аудио, в соответствии с документами Apple. Чтобы включить смешивание с другим звуком, я переопределяю соответствующую категорию:

OSStatus propertySetError = 0;
UInt32 setProperty = 1;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(setProperty), &setProperty);
assert(propertySetError == 0);

К сожалению, это решает мою игру в то время как проблема блокировки, но вводит еще одну проблему: звук AVAudioPlayer прерывается ненадолго, поскольку видео загружается с незначительным заиканием. Заикание мало, возможно, менее секунды, но этого достаточно, чтобы нарушить работу пользователя. Я прочитал этот связанный пост, который позволил мне предварительно загрузить видео с помощью AVAudioSessionCategoryAmbient, но, к сожалению, такой же подход не работает с новой категорией.

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

4b9b3361

Ответ 1

Лучший способ найти аналогичную проблему - использовать новый AVPlayer (+1 @adam) и настроить приложение для включения фонового звука и получения уведомлений о дистанционном управлении. Я был связан с этим @MarquelV после Как вы можете воспроизводить музыку из приложения iPod, все еще получая события удаленного управления в своем приложении?

Если вы можете правильно настроить фоновое изображение, это должно позволить вам продолжить воспроизведение, пока устройство заблокировано. О, и не забудьте добавить ключи к info.plist, это легко сделать, а затем не имеет понятия, почему он не работает.