如何使用SIP在安卓中收听音频



我正在尝试开发一个具有使用sip和freeswitch呼叫功能的Android应用程序。我能够成功注册配置文件,还可以调用freeswitch的测试IVR配置文件。但是,我听不到任何音频。

下面是我的清单片段,其中包含所有权限和功能

<uses-permission android:name="android.permission.USE_SIP" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-feature android:name="android.hardware.sip.voip" android:required="true" />
<uses-feature android:name="android.hardware.wifi" android:required="true" />
<uses-feature android:name="android.hardware.microphone" android:required="true" />

以下是我的SipAudioCall.Listener的片段

listener = new SipAudioCall.Listener() {
                    @Override
                    public void onCalling(SipAudioCall call) {
                        //super.onCalling(call);
                        Log.d(TAG, "Initiating session!");
                    }
                    @Override
                    public void onCallEstablished(SipAudioCall call) {
                        //super.onCallEstablished(call);
                        Log.d(TAG, "Call started!");
                        call.startAudio();
                        call.setSpeakerMode(true);
                        if (call.isMuted()) {
                            Log.d(TAG, "Muted");
                            call.toggleMute();
                        }
                    }
                    @Override
                    public void onRinging(SipAudioCall call, SipProfile caller) {
                        //super.onRinging(call, caller);
                        Log.d(TAG, "Ringing!");
                    }
                    @Override
                    public void onRingingBack(SipAudioCall call) {
                        //super.onRingingBack(call);
                        Log.d(TAG, "Ringing back");
                    }
                    @Override
                    public void onCallEnded(SipAudioCall call) {
                        //super.onCallEnded(call);
                        Log.d(TAG, "Call ended");
                    }
                    @Override
                    public void onError(SipAudioCall call, int errorCode, String errorMessage) {
                        //super.onError(call, errorCode, errorMessage);
                        Log.d(TAG, "Error! " + errorMessage);
                    }
                };

                call = sipManager.makeAudioCall(sipProfile.getUriString(), "sip:5000@192.168.0.6", listener, 30);

试试这个方法

@Override
public void onCallEstablished(SipAudioCall call) {
   //super.onCallEstablished(call);
   Log.d(TAG, "Call started!");
   call.setSpeakerMode(true);
   call.startAudio();
}

而不是

@Override
public void onCallEstablished(SipAudioCall call) {
   //super.onCallEstablished(call);
   Log.d(TAG, "Call started!");
   call.startAudio();
   call.setSpeakerMode(true);
   if (call.isMuted()) {
       Log.d(TAG, "Muted");
       call.toggleMute();
   }
}

检查以下几点来解决这个问题:

  • 首先检查您的网络是否落后于NAT,然后使用外部SIP IP和RTP IP作为您的实时IP
  • 检查您是否已成功安装编解码器(GSM,G729,PCMA,PCMU)
  • 检查网关功能

因此,首先在sip软件电话上检查,然后转到Android。

最新更新