从Raspberry Pi注册voip.ms后,Pjsip / pjsua超时错误并解决了拨打电话号码的错误

问题描述 投票:1回答:1

The Goal

我正打算拨打一个电话号码。我希望能够通过覆盆子pi拨打电话,并拨打我的voip.ms电话号码,并能够回答或自动回答并播放一些通用的.wav文件。

My current understanding of things

这可能应该标题为“我目前对事物的误解”。我是sip和pjsip的新手,我想我必须遗漏一些我不理解的过程。我的印象是,如果我使用voip.ms注册,当我拨打电话时,它会路由到voip.ms,他们会查找号码/地址,然后回复一个我会开始的地址与...沟通。

What I've done so far

Compiled

我已经在Raspberry Pi 3B +上正确编译了Pjsip,这是我能说的。我可以在我的c ++应用程序中包含pjsua2.hpp。我大致跟着this tutorial

Tested compilation with pjsua binary && demo.cpp

我遇到了运行修改后的pjsua2_demo.cpp和pjsip构建中包含的二进制文件的相同问题。为了简单起见,我会问<project-path>/pjproject-2.8/pjsip-apps/bin/pjsua-armv7l-unknown-linux-gnueabihf上的二进制文件(对我而言)。

Successfully registered with voip.ms

我有一个带有Voip.ms的帐号和电话号码,可以通过执行以下脚本在voip.ms中注册:

call_安定_auto_answer.是

./pjsua2-cpp/pjproject-2.8/pjsip-apps/bin/pjsua-armv7l-unknown-linux-gnueabihf \
    --play-file ~/CantinaBand60.wav \
    --local-port=5060 \
    --auto-answer 200 \
    --auto-play \
    --auto-loop \
    --max-calls 5 \
    --config-file ./sip.cfg

配置的位置如下:

sip.cfg

#
# Logging options:
#
--log-level 5
--app-log-level 4

#
# Account 0:
#
--id sip:<my-subaccount-username>@sip.voip.ms
--registrar sip:<server-location>.voip.ms
--reg-timeout 300
--realm *
--username <my-subaccount-username>
--password <my-subaccount-password>
--use-timer 1

#
# Network settings:
#
--local-port 5060

#
# Media settings:
#
--srtp-keying 0
--auto-play
--auto-loop
--play-file /home/pi/CantinaBand60.wav
--snd-auto-close 1
#using default --clock-rate 16000
#using default --quality 8
#using default --ec-tail 200
#using default --ilbc-mode 30
--rtp-port 4000

#
# User agent:
#
--auto-answer 200
--max-calls 5

#
# SIP extensions:
#
--use-timer 1

当我输入cli时,我会看到我的帐户列表:

Account list:
  [ 0] <sip:192.168.1.49:5060>: does not register
       Online status: Online
  [ 1] <sip:192.168.1.49:5060;transport=TCP>: does not register
       Online status: Online
 *[ 2] sip:<my-subaccount-username>@sip.voip.ms: 200/OK (expires=285)
       Online status: Online
Buddy list:
 -none-

Voip.ms显示我已在他们的网站上注册。

The problem

我正试图从我的pi拨打我的个人手机(我假设使用注册的voip.ms电话号码),并从我的个人手机拨打我的pi。在喊出我通常得到408 Request Timeout错误或502 gethostbyname错误。

不同目的地,不同的错误

根据来自pi的呼叫的目的地,我在大多数情况下得到两个不同的错误之一

Timeout Error

我收到一个错误,说

18:19:19.757    pjsua_app.c  ....Call 4 is DISCONNECTED [reason=408 (Request Timeout)]
18:19:19.757 pjsua_app_comm  ....
  [DISCONNCTD] To: <destination-sip-address>

以下任何一种情况:

和电话号码的格式如下:3035551234,虽然我已经尝试在1+1前面进行检查。

Lookup Error

我收到一个错误,说

19:09:45.435  sip_resolve.c  ....Failed to resolve '<destination-sip-address>'. Err=70018 (gethostbyname() has returned error (PJ_ERESOLVE))
19:09:45.435   tsx0x18520dc  ....Failed to send Request msg INVITE/cseq=10722 (tdta0x185012c)! err=70018 (gethostbyname() has returned error (PJ_ERESOLVE))
19:09:45.435    pjsua_app.c  .......Call 4 is DISCONNECTED [reason=502 (gethostbyname() has returned error (PJ_ERESOLVE))]
19:09:45.435 pjsua_app_comm  .......
  [DISCONNCTD] To: sip:<destination-sip-address>

以下任何一种情况:

  • 啜:
  • 啜:
  • SIP:ABCD1234

可能的成功

在调用时我看起来很成功:

它确认了这个电话并有一堆消息,值得注意的包括:

19:16:17.550   pjsua_core.c  ....TX 1300 bytes Request msg INVITE/cseq=13899 (tdta0x15c263c) to UDP 208.97.25.11:5060:
...
19:16:17.551    pjsua_app.c  .......Call 4 state changed to CALLING
...
>>> 19:16:17.606   pjsua_core.c  .RX 575 bytes Response msg 100/INVITE/cseq=13899 (rdata0x6d7008a4) from UDP 208.97.25.11:5060:
...
19:16:17.609   pjsua_core.c  .RX 946 bytes Response msg 200/INVITE/cseq=13899 (rdata0x6d7008a4) from UDP 208.97.25.11:5060:
...
19:16:17.609    pjsua_app.c  .....Call 4 state changed to CONNECTING
...
19:16:17.610    pjsua_app.c  .....Call 4 state changed to CONFIRMED
...
19:16:17.676   pjsua_core.c  .RX 594 bytes Response msg 100/INVITE/cseq=13900 (rdata0x6d7008a4) from UDP 208.97.25.11:5060:
...
19:16:17.678   conference.c  ......Port 5 (sip:**[email protected]) transmitting to port 5 (sip:**[email protected])
...
19:16:17.678   conference.c  ......Port 1 (/home/pi/CantinaBand60.wav) transmitting to port 5 (sip:**[email protected])
...
19:16:36.931    pjsua_app.c  ......Call 4 is DISCONNECTED [reason=200 (Normal call clearing)]

Same Network

此外,如果我在同一网络上设置第二个pjsip客户端,我可以从pi1调用它并在pi2上接听电话。

来电

当我注册voip.ms,然后尝试从我的个人手机拨打我的voip.ms电话号码时,呼叫失败并在我的iPhone上显示一条消息,User Busy。这让我觉得我在注册时搞砸了,或者我错过了一些组件,比如订阅或与voip.ms帐户链接。

最后的想法

我不确定我在这里缺少什么。我已经阅读了大量的pjsip和pjsua文档,我找不到任何我想念的东西。有没有人能够深入了解如何拨打电话号码并接听来电?这已经是相当多的坚实工作。

raspberry-pi sip voip pjsip pjsua2
1个回答
0
投票

所以我想出了我的问题的答案。这是瘦的:

Voip.ms registration

我在voip.ms上的注册配置不正确。我得到了同事的证书,但在进一步检查sip端点后,我发现为该帐户购买的DiD号码与我的同事为我创建的子帐号无关。因此,根据收件人的电话运营商,我遇到了不同的错误。此外,当我测试入站呼叫并收到错误User Busy时,这是因为我注册的帐户与电话号码无关。

为了解决这个问题,在voip.ms上我将DiD号码与我的子帐号相关联,然后转到我的子帐号信息并将callerId号码设置为我的DiD号码,不过我认为你可以通过pjsip覆盖这个值。

Outbound sip calls

其次,要拨打电话号码,外拨电话应遵循以下格式:

sip:<phoneNumber>@<endpoint>

所以对我来说,这看起来非常像:

sip:[email protected]

© www.soinside.com 2019 - 2024. All rights reserved.