C# 智能手机上使用RIL音频的音频反馈

C# 智能手机上使用RIL音频的音频反馈,c#,audio,sip,feedback,ril,C#,Audio,Sip,Feedback,Ril,我们正在使用SIP软电话,当我们从一部电话呼叫另一部电话时,我们会收到音频反馈。然而,当我们从一个普通的SIP电话(软件或硬件)呼叫我们的应用程序时,一切正常——只有在从一个使用该应用程序的电话呼叫另一个电话时。下面是我们用来初始化RIL音频的代码: public static void InitRILAudio() { IntPtr res; RILRESULTCALLBACK result = new RILRESULTCALLBACK(f_r

我们正在使用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()用于SIP堆栈。基本上,我们只是使用SDK中的回调委托来处理音频内容。还有其他人遇到过这样的音频反馈环路问题吗?使用RIL音频或SipEk?有什么建议吗


提前谢谢

反馈意味着您没有使用回声消除(线路和/或声学,取决于它是否作为扬声器工作),或者如果您使用,系统中的延迟(抖动缓冲区、网络、编码/解码等)大于回声消除器可以处理的延迟。错误位置的过度增益/限幅也会破坏任何回波抵消器(它们不喜欢非线性效果)


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

反馈意味着你没有使用回波消除(线路和/或声学,取决于它是否作为扬声器工作),或者如果是,系统中的延迟(抖动缓冲区、网络、编码/解码等)大于回声消除器可以处理的范围。错误位置的过度增益/削波也会使任何回声消除器失效(它们不喜欢非线性效应)

听起来你只是在将音频转储到其他层。SipEk只是pjsip的包装器,但我认为你是通过Microsoft RIL/etc来制作音频的,而不是通过pjmedia。你需要很好地了解你的音频路径-从哪里采样,如果/如何取消声学/线回波,回波尾是什么,如何消除ets编码和打包、接收方式、抖动缓冲、隐藏丢失、解码和回放