#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 или более поздней версии.