1

我们正在开发 SIP 软电话,当我们从一部电话呼叫另一部电话时,我们会收到音频反馈。但是,当我们从普通的 SIP 电话(软件或硬件)呼叫我们的应用程序时,一切正常 - 只有当使用该应用程序从一部电话呼叫另一部电话时。下面是我们用来初始化 RIL Audio 的代码:

    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?有什么建议么?

提前致谢!

4

1 回答 1

1

反馈意味着您没有使用回声消除(线路和/或声学,取决于它是否用作免提电话),或者如果您使用了,则表示您的系统延迟(抖动缓冲区、网络、编码/解码等) ) 大于回声消除器的处理能力。错误位置的过度增益/削波也会破坏任何回声消除器(它们不喜欢非线性效果)。

听起来您只是将音频转储到其他层。SipEk 只是 pjsip 的包装器,但我假设您是通过 Microsoft RIL/etc 而不是通过 pjmedia 来做音频的。你需要对你的音频路径有一个很好的理解——东西在哪里被采样,是否/如何消除声学/线路回声,回声尾是什么,如何编码和打包,如何接收,抖动缓冲,丢失- 隐藏、解码和回放。

于 2009-05-13T14:29:10.197 回答