我们正在使用SIP软电话,当我们从一部电话呼叫到另一部电话时,我们会得到音频反馈。然而,当我们从普通的SIP电话(软件或硬件)呼叫到我们的应用程序时,一切都很好-只有当使用应用程序从一部手机呼叫到另一部手机时。下面是我们用来初始化RIL音频的代码:
public static void InitRILAudio()
{
IntPtr res;
RILRESULTCALLBACK result = new RILRESULTCALLBACK(f_result);
RILNOTIFYCALLBACK notify = new RILNOTIFYCALLBACK(f_notify);
res = RIL_Initialize(1, result, notify, (0x00010000 | 0x00020000 | 0x00080000), 0, out hRil);
if (res != IntPtr.Zero)
return;
RILAUDIODEVICEINFO audioDeviceInfo = new RILAUDIODEVICEINFO();
audioDeviceInfo.cbSize = 16;
audioDeviceInfo.dwParams = 0x00000003; //RIL_PARAM_ADI_ALL;
audioDeviceInfo.dwRxDevice = 0x00000001; //RIL_AUDIO_HANDSET;
audioDeviceInfo.dwTxDevice = 0x00000001; //RIL_AUDIO_HANDSET;
res = RIL_SetAudioDevices(hRil, audioDeviceInfo);
}我们使用SipEk (http://voipengine.googlepages.com/sipeksdk)作为SIP堆栈。基本上,我们只是使用来自SDK的回调委托来处理音频内容。有没有其他人遇到过这样的音频反馈循环问题?使用RIL Audio或SipEk?有什么建议吗?
提前感谢!
发布于 2009-05-13 14:29:10
反馈意味着您没有使用回声消除(线路和/或声学,取决于它是否作为免持话筒工作),或者如果您使用了,则系统中的延迟(抖动缓冲器、网络、编码/解码等)超出了回声消除器所能处理的范围。在错误的地方过度增益/限幅也会破坏任何回声抵消器(他们不喜欢非线性效果)。
听起来你只是想把音频转储到其他层。SipEk只是一个pjsip的包装器,但我假设你是通过Microsoft RIL/etc的东西来做音频的,而不是通过pjmedia。你需要对你的音频路径有一个很好的理解-在哪里采样,如果/如何回声/回声消除,回声尾部是什么,它是如何编码和打包的,如何接收,抖动缓冲,丢失隐藏,以及解码和回放。
https://stackoverflow.com/questions/824416
复制相似问题