Как слушать звук на Android с помощью SIP?

Я пытаюсь разработать приложение для Android с возможностью вызова с использованием sip и freeswitch. Я могу успешно зарегистрировать профиль, а также могу позвонить в тестовый профиль IVR Freeswitch. Однако я не могу слышать звук.

Ниже приведен фрагмент моего манифеста, содержащий все разрешения и функции.

<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:[email protected]", listener, 30);

person Prasad Sawant    schedule 12.02.2016    source источник
comment
Большинство пользователей Android и iOS используют pjsip в качестве библиотеки SIP для связи через серверы VOIP. Я думаю, вы должны использовать то же самое. Зарегистрируйте пользователя с настольного sip-клиента, такого как zoiper, xlite, jitis и т. д. Позвоните и убедитесь, что на вашем сервере нет проблем с NAT, а затем начните отслеживать на своем устройстве Android. Также взгляните на stackoverflow.com/questions/17436703/ выглядит похоже   -  person Sasi Varunan    schedule 13.02.2016


Ответы (2)


Попробуйте этот метод

@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();
   }

}
person Rajesh    schedule 12.02.2016
comment
Неудачно! Насколько я знаю, стандарт SIP не касается передачи аудио- и видеоданных по сети. Для получения звука необходимо реализовать кодек. Однако я точно не знаю, как поступить. - person Prasad Sawant; 12.02.2016

Проверьте следующие пункты, чтобы решить эту проблему:

  • Сначала проверьте, находится ли ваша сеть за NAT или нет, затем используйте внешний IP-адрес SIP и IP-адрес RTP в качестве вашего живого IP-адреса.
  • проверьте, успешно ли вы установили кодек (gsm, g729, pcma, pcmu)
  • проверить работоспособность шлюза

Так что сначала проверьте это на sip-софтфоне, а потом переходите на Android.

person suren    schedule 16.02.2016