N1(Armbian)编译安装Asterisk(包含chan_mobile)搭建内网voip系统

编程知识 更新时间:2023-04-27 05:21:54

前几天写了教程在ubuntu上搭建Asterisk,成功在内网打通了SIP通话。

ubuntu是18.04,安装的虚拟机系统;最近手头剩了个斐讯的N1,Armbian系统,这个就是ubuntu内核,所以理论上应该也可以安装Asterisk;在这之前在openwrt上研究了一周多,Asterisk是跑起来了,但插件不全,尤其不能安装chan_mobile,放弃了。以下是在Armbian系统中搭建过程,纪录下来

1. 准备工作;支持蓝牙的手机一部;N1一个(安装好Armbian)

2. N1安装Asterisk

先安装依赖:

apt-get install build-essential git autoconf wget subversion pkg-config libjansson-dev libxml2-dev uuid-dev libsqlite3-dev libtool bluetooth libbluetooth-dev -y

bluetooth libbluetooth-dev是安装chan_mobile必须的

apt-get install libedit*   ;这个是后续编译过程发现缺失的,建议也安装上

下载代码,解压

wget http://downloads.asterisk/pub/telephony/asterisk/asterisk-18-current.tar.gz

tar xvf asterisk-18-current.tar.gz

这个是18版本的,实际测试18.5.1版本也可以,官网最新是19,没有尝试

cd asterisk-18*/

contrib/scripts/get_mp3_source.sh

//上面两行是其他教程中找到的,功能未知

sudo contrib/scripts/install_prereq install   //检查编译依赖,上面的都安了,这一步很顺利

./configure   //进一步检查编译依赖,这一步时间较长,等着,不能有任何错误

make menuselect  //选择模块,这一步很关键,在Addon里把chan_mobile选上,如果出现“xxx”不能选,就是蓝牙依赖安装有问题

make -j4

make install  //没什么可说的,编译过程很快,几分钟

make samples

make config

ldconfig //生成配置文件

sudo ufw allow proto tcp from any to any port 5060,5061  //添加防火墙例外

sudo systemctl enable asterisk

sudo systemctl start asterisk

sudo asterisk -rvv    //开机启动&运行asterisk

至此安装过程结束!!!

3. 配置Asterisk

1)配置SIP用户,示例如下:1002,1003照着在下面加即可

sudo vim /etc/asterisk/sip.conf  //添加分机号
[general]
context = public
bindport = 5060
tcpbindaddr = 0.0.0.0
tcpenable = yes
videosupport=always
 
[1001]
type = friend
callerid =1001
secret = 1001
host = dynamic
canreinvite = no
dtmfmode = rfc2833
mailbox = 1001
transport = udp
nat = yes
disallow = all
allow = ulaw

2)添加拨号计划,示例如下:1002,1003,仿照着加在后面就行

sudo vim /etc/asterisk/extensions.conf  //添加拨号规则
[general]
static=yes
writeprotect=no
 
[public]
exten => 1001,1,Answer()
exten => 1001,n,Dial(SIP/1001,20,tr)
exten => 1001,n,Hangup

3)配置蓝牙

我是直接用的N1的蓝牙,当然普通的USB蓝牙适配器也是可以用的,但我的死活报错,报错在chan_mobile.c 4075行

ast_verb(3, "Error initializing Bluetooth device %s.\n", pvt->id);

从代码上看是蓝牙设备的voice setting不等于0x0060;我的蓝牙适配器用hciconfig修改也不成功,遂放弃,用自带的蓝牙也能工作。

root@aml:~# bluetoothctl   //敲这个命令
[NEW] Controller AA:AA:AA:AA:AA:AA aml [default]  //枚举所有的蓝牙适配器

开始扫描周围的蓝牙设备:


[bluetooth]# scan on
Discovery started
[CHG] Controller AA:AA:AA:AA:AA:AA Discovering: yes
[NEW] Device C8:28:32:A2:D3:5B C8-28-32-A2-D3-5B
[NEW] Device 7F:BF:4B:C7:55:27 7F-BF-4B-C7-55-27
[NEW] Device 88:0F:10:96:08:F5 MI_SCALE

如果找到了目标设备(在我的示例里,是一部Iphone,假设蓝牙地址是C8:28:32:A2:D3:5B),就敲命令停止扫描

scan off

纪录下蓝牙地址:C8:28:32:A2:D3:5B

配对蓝牙设备:pair C8:28:32:A2:D3:5B ;

正常情况,手机上会弹出提示,必须点确认

这一步必须成功,手机上蓝牙界面可以看到已经与N1配对成功,N1的名称是am3,当然,用别的设备就不一定是这个名字,但必须配对成功

下面这步非必须,主要目的是看下蓝牙适配器的voice config是不是0x0060

root@aml:~# hciconfig hci0 voice
hci0:   Type: Primary  Bus: UART
        BD Address: AA:AA:AA:AA:AA:AA  ACL MTU: 1021:8  SCO MTU: 64:1
        Voice setting: 0x0060 (Default Condition)
        Input Coding: Linear
        Input Data Format: 2's complement
        Input Sample Size: 16 bit
        # of bits padding at MSB: 0
        Air Coding Format: CVSD

 此步必须:在asterisk中扫描上述蓝牙设备:

*CLI> mobile search
Address           Name                           Usable Type    Port
C8:28:32:A2:D3:5B Iphone                  Yes    Phone   3
*CLI>

纪录下Port:3

配置chan_mobile

vim /etc/asterisk/chan_mobile.conf

[general]
interval=30             ;默认,不用改

[adapter]
id=hci0   ;蓝牙适配器的id,一个蓝牙适配器就是hci0,也可以用hcitool dev命令查看
address=AA:AA:AA:AA:AA:AA  ;蓝牙适配器的MAC

[iphone]   ;名字随意起,后面会用
address=C8:28:32:A2:D3:5B   ;Iphone手机的MAC
adapter=hci0  ;蓝牙适配器的id
port=3   ;刚刚扫描出来的port,不能错
context=incoming-mobile ;名字随意起,后面会用
group=1 ;默认,不用改

 配置好后,重启asterisk,在CLI命令行界面ctrl+c,asterisk -vvvc重启

*CLI>     -- Bluetooth Device iphone has connected, initializing...
    -- Bluetooth Device iphone initialized and ready.

CLI命令行中如果显示上述提示,说明连接成功,手机界面如下:

 至此,手机与Asterisk建立蓝牙连接成功,下一步就是把SIP和Iphone连接起来,达成互通

4. 手机Asterisk互通

手机插入SIM卡后,就可以正常拨打、接听电话;这是前提

这一步要达成的目标:

1)手机来电,局域网内的SIP用户同震或者顺震

2)局域网内的SIP用户拨打“真实”运营商号码,桥接到Iphone上,用Iphone的SIM卡实现呼出

配置拨号计划:

vim /etc/asterisk/extensions.conf

[incoming-mobile]  ;名字不能错,同上面的配置
exten => s,1,Dial(SIP/1002);windows  ;表示iphone来电后,转接到SIP用户1002上面
exten => s,n,Dial(SIP/1001);pixel    ;表示iphone来电后,如果1002没接,继续转接到SIP用户1001上面,实现顺震
exten => s,n,Hangup

至此,Iphone来电后,可以可以实现转接

去电,有空慢慢写

更多推荐

N1(Armbian)编译安装Asterisk(包含chan_mobile)搭建内网voip系统

本文发布于:2023-04-20 13:29:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/ea5c27da8c9f9cad2b4c2d5ecc0dbfbd.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:内网   系统   Armbian   Asterisk   voip

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!

  • 90136文章数
  • 23301阅读数
  • 0评论数