用 Nokia 手机连接 Asterisk 打 SIP 电话

这是一篇很老的笔记了,好像是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:9252@172.16.39.1
	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 卡放在那里没人用,等有时间可以拿来玩玩。

评论 (1 Comment)

  1. 内网玩玩尚可,公网上小心中国电信。

发表评论