无法在 Android 上注册 SIP

Cannot register SIP on Android

我在服务器上安装了 Asterisk 14.4。我可以从 Zoiper (PC) 注册到它。我也在尝试在 android 上注册:

String SERVER_DOMAIN = "ec2-XX-XXX-XXX-XX.us-west-1.compute.amazonaws.com";
builder = new SipProfile.Builder(sipNumber, SERVER_DOMAIN);
        builder.setPassword("unsecurepassword");
        builder.setProtocol("UDP");
        builder.setOutboundProxy(SERVER_DOMAIN);
        builder.setPort(5060);
        builder.setAuthUserName(sipNumber);
        builder.setAutoRegistration(true);

mSipProfile = builder.build();
mSipManager.open(mSipProfile, pendingIntent, listener);

然后我试图用

调用 Zoiper (PC)
 mSipManager.makeAudioCall(mSipProfile.getUriString(),
                    toUriString,
                    listener,
                    0);

我的问题是我无法注册 android(尽管我可以注册 Zoiper 并因此调用它)但我可以拨打电话。 以下是我收到的 SIP 错误:

registration not running -4
no data connection -10

没有触发任何异常。 我错过了什么?

UPD

可能这会有所帮助:

    <--- SIP read from UDP:93.123.41.227:48234 --->
    REGISTER sip:ec2-XX-XXX-XXX-XX.us-west-2.compute.amazonaws.com SIP/2.0
    Call-ID: 65f42070f602eae50ac0ce5b64fe8fcb@192.168.1.102
    CSeq: 2170 REGISTER
    From: <sip:6002@ec2-XX-XXX-XXX-XX.us-west-2.compute.amazonaws.com>;tag=22509741
    To: <sip:6002@ec2-XX-XXX-XXX-XX.us-west-2.compute.amazonaws.com>
    Via: SIP/2.0/UDP 192.168.1.102:48234;branch=z9hG4bKe10ab1bfd8e1c98e91a14ba0d3b07d55383131;rport
    Max-Forwards: 70
    User-Agent: SIPAUA/0.1.001
    Contact: *
    Expires: 0
    Content-Length: 0

            <------------->
    --- (11 headers 0 lines) ---
            Sending to 93.123.41.227:48234 (NAT)
            Sending to 93.123.41.227:48234 (NAT)

            <--- Transmitting (NAT) to 93.123.41.227:48234 --->
    SIP/2.0 401 Unauthorized
    Via: SIP/2.0/UDP 192.168.1.102:48234;branch=z9hG4bKe10ab1bfd8e1c98e91a14ba0d3b07d55383131;received=93.123.41.227;rport=48234
    From: <sip:6002@ec2-XX-XXX-XXX-XX.us-west-2.compute.amazonaws.com>;tag=22509741
    To: <sip:6002@ec2-XX-XXX-XXX-XX.us-west-2.compute.amazonaws.com>;tag=as56c127e1
    Call-ID: 65f42070f602eae50ac0ce5b64fe8fcb@192.168.1.102
    CSeq: 2170 REGISTER
    Server: Asterisk PBX 14.4.0
    Allow: INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH, MESSAGE
    Supported: replaces, timer
    WWW-Authenticate: Digest algorithm=MD5, realm="asterisk", nonce="607265aa"
    Content-Length: 0


            <------------>

不知何故我设法让它工作了。令人惊讶的是,如果我将侦听器传递给 SipManager#open(SipProfile, PendingIntent, SipRegistrationListener),那么它不会注册,但如果我将 null 作为侦听器传递并使用 SipManager#setRegistrationListener(String, SipRegistrationListener),它就会注册。

此外,您可以使用 SipManager#register(SipProfile, int, SipRegistrationListener) 强制注册,但同样,如果我传递非空侦听器,它对我不起作用。希望对您有所帮助

您的服务器在 Amazon EC2 上设置(来自日志)。

Amazon EC2 是 NAT 环境。您在 sip.conf

中使用 externip= 提示有关外部 ip 的星号