Ошибка микширования звука MPMoviePlayerController и AVAudioPlayer

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

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

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

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

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

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

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

22
задан Community 23 May 2017 в 12:10
поделиться