前几天写了教程在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系统
发布评论