无法在 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 的星号
我在服务器上安装了 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 的星号