【发布时间】:2018-05-10 06:31:37
【问题描述】:
我正在将 Linphone SDK 用于 VoIP iOS 应用程序。而且我发现接近传感器(当您将手机靠近耳朵时会使屏幕变暗的传感器)会严重影响传入的声音。
我发现输入渲染回调的inBusNumber在覆盖接近时会增加到1024,通常是256。发生这种情况时还会导致Audio Unit不触发此回调的大约180ms时间间隙,这破坏了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 只会在切换播放设备(例如将耳机切换到蓝牙)的情况下发生变化。当接近传感器被触发时,有什么办法可以修复这个数字?
我也尝试将 kAudioUnitProperty_MaximumFramesPerSlice 设置为 256 并设置音频会话的 PreferredIOBufferDuration,但两者都不起作用。
我下载了名为 Speakerbox 的 Apple 官方演示,发现无论我如何触发接近传感器,他们的渲染回调的 inNumberFrames 都会持续到 256。我比较了苹果的代码和我的代码,但我找不到任何可能导致这种情况的差异。感谢任何帮助,谢谢。
【问题讨论】: