В iOS 5 после изменения категории «AudioQueueStart» использовал 3 ~ 5 секунд для начала записи

#iphone #ios #avfoundation #ios5 #avaudiosession

#iPhone #iOS #avfoundation #ios5 #avaudiosession

Вопрос:

После того, как я изменил категорию AudioSession с kAudioSessionCategory_MediaPlayback на kAudioSessionCategory_PlayAndRecord , AudioQueueStart метод зависал примерно на 3 ~ 5 секунд, чтобы начать запись.

Проблема возникает только на устройствах iOS под управлением iOS 5, а не в симуляторе или на устройствах, все еще работающих под управлением iOS 4 или iOS 3.

Вот что я пробовал:

Если я не меняю категорию, но всегда использую kAudioSessionCategory_PlayAndRecord , все работает нормально. AudioQueueStart начните запись примерно через 0,01 секунды. Но поскольку я хочу, чтобы мой звук исходил из динамика устройства, я не могу использовать kAudioSessionCategory_PlayAndRecord все время.

Использование kAudioSessionOverrideAudioRoute_Speaker и kAudioSessionCategory_PlayAndRecord в то же время — хорошая идея, но если я это сделаю, мне также придется справляться со многими kAudioSessionProperty_AudioRouteChange ситуациями, такими как подключение или извлечение наушников пользователем, подключение гарнитуры Bluetooth и т. Д. Это слишком сложно.

Любой совет или решение будут оценены.

Ответ №1:

Наконец, я нашел способ обойти проблему, которая, как я считаю, является ошибкой iOS 5.

Я установил категорию kAudioSessionCategory_PlayAndRecord и использую приведенный ниже код:

 UInt32 defaultToSpeaker = TRUE;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof(defaultToSpeaker), amp;defaultToSpeaker);
  

Обратите внимание, kAudioSessionProperty_OverrideCategoryDefaultToSpeaker идентификатор доступен только в iOS 3.1 или более поздней версии.