用 Nokia 手机连接 Asterisk 打 SIP 电话
2009年08月13日 | 标签: asterisk, sip, VoIP, wifi | 作者:vpsee
这是一篇很老的笔记了,好像是06年的,今天有时间整理出来。当时正在做一个 VoIP 项目,开发一个支持视频、语音的 SIP softphone,并且还要支持文字聊天、presence 等功能。开发完后测了几个其他的 SIP phone,语音都没有问题。那时候手机 WiFi 很火,VPSee 很想看看自己的 SIP phone 能不能连得上手机。
每个 SIP 厂商对 SIP 标准的支持都不一样,大部分时候任意两个 SIP 电话都可以通话,但有时候某个 SIP phone 因为 SIP 兼容性问题不能连到另一个 SIP phone,或者有时候信号很差。Microsoft 的 MSN 其实是基于 SIP 协议的,不过 Microsoft 在 SIP 上加了很多自己的东西,改进过多又封闭代码,导致 MSN 基本和 SIP 没有什么关系了。Nokia 手机上的内置 SIP 看上去很简单,只提供最基本的功能使用,而且是系统一部分,封闭。Symbian 的 SDK 不包括 SIP/RTP 库,如果要在 Symbian 上开发自己的 SIP 电话的话还需要开发自己的 SIP/RTP 库,很麻烦,目前有个叫 pjsip 的 open source SIP 库已经被移植到了 Symbian 上。
Nokia 手机没有网络插口,不能用网线上网,只能通过 WiFi 连网。打造一个测试环境需要几个部件:同时支持 WiFi 和 SIP 的手机、WiFi 网络和 VoIP 服务器。支持 WiFi 和 SIP 的 Nokia 手机主要型号集中在 E 系列和 N 系列,VPSee 用 Nokia E70、E61、N66、E71 测试过都没有问题。首先用手机登录 WiFi,设置 SIP 配置文件(服务器地址、用户名、密码)后注册到局域网的一台 Asterisk VoIP 服务器上。然后用我们开发的 SIP softphone 或者注册到 VoIP 服务器后拨号给手机。连接如下:
手机 —- WiFi —- VoIP 服务器 —- SIP softphone
安装 Asterisk
wget --passive-ftp ftp.digium.com/pub/asterisk/asterisk-1.4.4.tar.gz tar zxvf asterisk-1.4.4.tar.gz mv asterisk-1.4.4 /usr/src cd /usr/src/asterisk-1.4.4 make clean ./configure make make install make samples
如果想启动系统时自动启动 Asterisk,执行下面命令会把启动脚本安装到 /etc/rc.d/init.d/ 或 /etc/init.d/
make config
启动 Asterisk
手动启动:
/usr/sbin/asterisk -vvvc
如果刚才执行了 make config 命令的话,可以这样操作 Asterisk:
/etc/init.d/asterisk start|stop|restart /etc/rc.d/init.d/asterisk start|stop|restart
配置 Asterisk
配置 Asterisk 文件,给用户增加 SIP 帐号,并且配置2个普通号码 9250,9251 和1个手机号码 9252:
vi /etc/asterisk/sip.conf [9250] type=friend context=internal username=9250 host=dynamic ; This device needs to register canreinvite=no ; Typically set to NO if behind NAT dtfmode=rfc2833 nat=no ; X-Lite is behind a NAT router disallow=all allow=ulaw subscribecontext=internal mailbox=9250@internal ; Subscribe to status of multiple mailboxes [9251] type=friend context=internal username=9251 host=dynamic ; This device needs to register canreinvite=no ; Typically set to NO if behind NAT dtfmode=rfc2833 nat=no ; X-Lite is behind a NAT router disallow=all allow=ulaw subscribecontext=internal mailbox=9251@internal ; Subscribe to status of multiple mailboxes ;Nokia Cellphone [9252] type=friend context=internal username=9252 host=dynamic ; This device needs to register qualify=no port=5060 notransfer=yes disallow=all allow=alaw
增加规则:
vi /etc/asterisk/extensions.conf [internal] exten => 9250,1,Dial(SIP/9250,20) exten => 9250,2,Hangup exten => 9251,1,Dial(SIP/9251,20) exten => 9251,2,Hangup exten => 9252,1,Dial(SIP/9252,20) exten => 9252,2,Hangup
刷新配置:
switch1*CLI> reload
配置 Nokia 手机
打开手机界面,按照下面路径找到 SIP 设置后修改:
Menu/Tools/Settings/Connection/SIP settings Profile name: Test Service profile: IETF Default access point: staff_room Public user name: sip:[email protected] Use compression: No Registration: Always on Use security: No Proxy server Registrar server Menu/Tools/Settings/Connection/SIP settings/Proxy server Proxy server address: sip:172.16.39.1 Realm: asterisk User name: 9252 Password: None Allow loosing routing: Yes Transport type: UDP Port: 5060 Menu/Tools/Settings/Connection/SIP settings/Registrar server Registrar serv. addr.: sip:172.16.39.1 Realm: None User name: None Password: None Transport type: UDP Port: 5060 Menu/Tools/Settings/Connection/Call Default call type: Internet
现在校园全部覆盖 WiFi,任何 WiFi 手机、笔记本进来用校内帐号登录就可以进入学校网络,很方便。如果在实验室放个 VoIP 服务器把 IP 网络和学校的电话网络连起来,这样就可以用自己的 softphone 打给校内的其他座机,比如我就经常打电话给学校的餐厅询问当日菜谱、订餐什么的。更棒的是,如果有个支持 SIP 和 WiFi 的手机,就可以拿着手机在校园任何地方连上 WiFi 后登录到 VoIP 服务器上给校内座机打电话了,走的是校园局域网,速度快不用电话费,语音清楚。我们实验室做 VoIP 的比较多,有几个支持 Asterisk 的 Digium 卡放在那里没人用,等有时间可以拿来玩玩。
内网玩玩尚可,公网上小心中国电信。