【问题标题】:How to hear audio in Android using SIP?如何使用 SIP 在 Android 中收听音频?
【发布时间】:2016-02-12 05:51:04
【问题描述】:

我正在尝试使用 sip 和 freeswitch 开发具有呼叫功能的 Android 应用。我能够成功注册配置文件,并且能够调用 freeswitch 的测试 IVR 配置文件。但是,我听不到任何声音。

以下是我的清单的 sn-p,其中包含所有权限和功能

<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 的 sn-p

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);

【问题讨论】:

  • 大多数 android 和 iOS 用户使用 pjsip 作为 SIP 库通过 VOIP 服务器进行通信。我想你应该使用相同的。请从 zoiper、xlite、jitis 等桌面 sip 客户端注册用户。拨打电话并确保您的服务器没有任何 NAT 问题,然后开始在您的 android 设备上进行跟踪。也看看stackoverflow.com/questions/17436703/… 看起来很相似

标签: android audio sip android-music-player


【解决方案1】:

试试这个方法

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

}

【讨论】:

  • 不走运!据我所知,SIP 标准没有解决通过网络传递音频和视频数据的问题。需要实现一个编解码器来接收音频。但是,我不知道该怎么做。
【解决方案2】:

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

  • 首先检查您的网络是否在 NAT 之后,然后使用外部 SIP IP 和 RTP IP 作为您的实时 IP
  • 检查是否已成功安装编解码器(gsm、g729、pcma、pcmu)
  • 检查网关功能

所以首先在 sip softphone 上检查,然后转到 Android。

【讨论】:

    猜你喜欢
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-04
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多