Я разрабатываю интерактивное приложение типа сборника рассказов для iPhone, и недавно я столкнулся с неприятной ошибкой, связанной с микшированием звука на устройстве.
Во-первых, я настраиваю аудио сеанс. Я устанавливаю категорию на AVAudioSessionCategoryAmbient , а затем запускаю и запускаю мой AVAudioPlayer экземпляр. Теперь в фоновом режиме во время воспроизведения звука я предварительно загружаю видео для воспроизведения, используя MPMoviePlayerController с последующим вызовом prepareToPlay . Причина, по которой я предварительно загружаю видео таким образом, заключается в том, что мне нужно, чтобы оно воспроизводилось сразу после вызова с довольно строгим временем.
В этой конфигурации аудио / видео работает нормально, они смешиваются, и не не прерывают друг друга. Однако эта конкретная категория аудиосеансов не позволяет продолжать воспроизведение звука, пока устройство заблокировано, и эта функция мне действительно нужна. В результате я вынужден рассмотреть другую категорию: AVAudioSessionCategoryPlayback .
По умолчанию эта категория не разрешает микширование с другим аудио, в соответствии с Apple docs . Чтобы включить микширование с другим аудио, я переопределяю соответствующую категорию:
OSStatus propertySetError = 0;
UInt32 setProperty = 1;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(setProperty), &setProperty);
assert(propertySetError == 0);
К сожалению, это решает мою игру во время заблокированной проблемы, но приводит к другой проблеме: AVAudioPlayer звук прерывается на короткое время, когда видео загружается с небольшим заиканием. Заикание небольшое, возможно, меньше секунды, но этого достаточно, чтобы нарушить работу пользователя. Я прочитал этот связанный пост , который позволил мне предварительно загрузить видео с AVAudioSessionCategoryAmbient , но, к сожалению, такой же подход не работает с новой категорией.
Категория аудио сеанса успешно применяется в соответствии с кодом возврата. Кто-нибудь знает, почему включение микширования звука с этой категорией отличается от функции микширования, предоставляемой категорией окружения?