Я использую Linphone SDK для приложения VoIP для iOS. И я обнаружил, что датчик приближения (тот, который затемняет ваш экран, когда вы подносите телефон близко к уху) плохо влияет на входящий голос.
Я обнаружил, что inBusNumber для обратного вызова ввода будет увеличен до 1024 при закрытии близости, обычно это 256. Когда это происходит, это также вызывает промежуток времени около 180 мс, что Audio Unit не вызывает этот обратный вызов, что разрушает стратегию буфера Linphone ,
настройка обратного вызова рендеринга:
AURenderCallbackStruct renderCallbackStruct;
renderCallbackStruct.inputProc = au_write_cb;
renderCallbackStruct.inputProcRefCon = card;
auresult=AudioUnitSetProperty (
card->io_unit,
kAudioUnitProperty_SetRenderCallback,
kAudioUnitScope_Input,
outputBus,
&renderCallbackStruct,
sizeof (renderCallbackStruct)
);
В обратном вызове рендеринга:
static OSStatus au_write_cb (
void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
//it changes to 1024 when proximity sensor is triggered
UInt32 inNumberFrames,
AudioBufferList *ioData
) {}
В моем понимании, inNumberFrames будет меняться только при переключении воспроизводящих устройств (например, при переключении наушников на Bluetooth). Можно ли как-нибудь исправить эту цифру при срабатывании датчика приближения?
Я также пытаюсь установить для kAudioUnitProperty_MaximumFramesPerSlice значение 256 и setPreferredIOBufferDuration аудиосеанса, но оба не работают.
Я загружаю официальную демонстрацию Apple под названием Speakerbox, и я обнаружил, что их обратный вызов рендеринга inNumberFrames сохраняется до 256 независимо от того, как я запускаю датчик приближения. Я сравнил код Apple и мой, но не могу найти никакой разницы, которая может вызвать это. Спасибо за любую помощь, спасибо.