SIP on Mobile Device (运行在移动设备上的SIP协议终端)
SIP on Mobile Device (运行在移动设备上的SIP协议终端) 目录
第一章 序论……………………………………………………………4
1- 1 研究动机…………………………………………………………..4
1- 2 专题目标…………………………………………………………..5
1- 3 开发环境与设备…………………………………………………..6
第二章 SIP 与 VOCAL System……………….……………………….7
2- 1 SIP…………..……………………………………………………..7
2-1.1 SIP 是什么?……………………………………………..7
2-1.2 SIP 的架构………………………………………………..7
2-1.3 SIP 的优点………………………………………………..8
2-1.4 SIP 发展现况……………………………………………..9
2- 2 VOCAL System…..………………………………………………10
2-2.1 VOCAL是什么?…………………………………………10
2-2.2 VOCAL 软件架构…………………………………………10
第三章 硬件环境……………………………………………………..12
3- 1 PC…………………………………………………………………12
3- 2 PDA………………………………………………….…………….13
第四章 软件环境……………………………………………….…….14
4- 1 系统………………………………….…………………………...14
4.1-1 PC Windows…………………………….………………...14
4.1-2 PC Linux………………………….………………………14
4.1-3 PDA Linux……………………………….……………….15
4- 2 开发工具………………………………….……………………..17
4.2-1 Cross Compiler……………………………………….…..17
4.2-2 QT / Embedded…………………………………….…….18
4.2-3 TCL / TK / Expect……………………………….……….19
第五章 实作部分………………………………………………...…...21
5-1 架设 SIP server………………………………………………...….21
5-2 编译 UA…………..……………………………………………….23
5.2-1 PC Windows UA…………………………..………….…..23
5.2-2 PC Linux UA………………………….…………………..23
5.2-3 PDA Linux UA……………………………………………23
5-3 操作 VOCAL Server 与 UA ……………………………...……..25
5-4 为 UA 加上图形接口与照片显示功能……………………….…27
第六章 心得…………………………………………………………..29
参考数据………………………………………………………………..31
第一章 序论
1- 1 研究动机
在现代的社会中,人们对通讯的需求永无止境,许多人手机账单动辄上万,实在是一笔不小的负担,而长途电话的高费率,更是令人烦恼。另一方面,计算机网络迅速普及,加上 IPv6 的发展,未来 All IP 的世界已经可以预见。也因为如此,结合计算机网络与语音通讯的 VoIP 是目前大家相当有兴趣的一个研究领域,而 SIP (Session initiation protocol)正是这个领域中很有潜力的一个通讯协议。而这个专题,正是希望藉由亲手安装一套 SIP 语音通讯软件,阅读相关文件,并尝试为它增加新的功能,来了解 SIP。
1- 2 专题目标
我将架设一套 VOCAL 系统的 SIP server,并且分别在 PC Windows、PC Linux、PDA Linux 三种不同的平台下 compile 并安装它的 Client。另外为这个 Client 建立 GUI 接口,并且加上照片显示的功能。
1- 3 开发环境与设备
PC x 2
iPAQ 3630 PDA
iPAQ 传输底座(Serial x 1,USB x 1)
iPAQ CF 背夹
Symbol Spectrum24 CF wireless card
第二章SIP 与 VOCAL System
2- 1 SIP
2-1.1 SIP 是什么?
SIP 为 Session Initiation Protocol 的缩写。它是一种“应用层”的通讯协议,用于“建立”“变更”“结束”多媒体通讯交谈与对话,并不负责实际上的语音传输。由于它是以类似 HTTP 的纯文字沟通,所以架构比较简单,是目前较流行的 VoIP 通讯协议。
2-1.2 SIP 的架构
SIP 主要由三个元建构成:
1. User Agent:也就是 Client 端,负责发出 SIP 要求,并且拥有唯一的 SIP 号码。
2. Registry Server:负责纪录各个 SIP 号码及其对应的 IP 位置。
3. Proxy Server:负责接受 UA 的要求,并向 Registry Server索取所需要的数据,在回传给 UA。
当一个 UA 起始时,它必须先向 Registry Server 注册它的 IP 与 SIP number,这个 SIP number 使用 URI 的形式方便记忆,如此一来打电话的人只需要知道对方的 URI 号码即可,而不需要知道对方的 IP,因为 IP 可能会变动,但是 SIP number 则不会变。
当要进行对话时,呼叫端 UA 向 Proxy Server 发出 INVITE 的要求,Proxy Server 向 Register Server 查询得知对方的 IP 后,便将此要求 forward 给对方,对方收到后,便响应一个 OK 给 Proxy Server,Proxy Server 在将这个 OK forward 给呼叫端,呼叫端再响应一个 ACK 给对方,此时两边的联机就已经建立起来了,media stream 可以直接以 IP 作传输。
2-1.3 SIP 的优点
SIP 主要有三个优点:
1. 创新
SIP 不同于 H.323,它使用了 text-base 的沟通方式,使开发只更容易了解,并且可以在同一个联机中传递多样化的信息。另外它建立于应用层中,使得许多现有的应用软件可以在不作太大修改的状况下套用 SIP。
2. 可延展性
SIP 只有在起始通讯连结时需要呼叫 Server 端,在连结建立以后,则是 peer-to-peer 的传输,如此一来大大的减低中央主机的负荷,达到降低成本的目的。另外 SIP 也是一个简单与高效率的通讯协议,它总共只有 5 个呼叫和 8 个响应,在建立连结方面,SIP 更比 H.323 少掉了 50% 的讯息传递。
3. 容易开发
SIP 使用标准 URI 做位置,采用 text-base 的讯息传输,建立与 application level,以及简单的错误讯息,都显示出其易于开发的特性,使得许多的厂商与学术单位投入研发,数据取得也相当容易。
2-1.4 SIP 的发展
SIP 简单极容易开发的特性,使得众多厂商投入研发,包括微软、CISCO 等,都有软硬件产品问世,将来除了语音的通话外,更可以结合影像、图形、数据的传递。再配合计算机无线网络与 All IP 的发展,人们将可以以一个 SIP 号码走遍天下,完全达到通讯行动化的目的。
2- 2 VOCAL System
2-2.1 VOCAL 是什么?
VOCAL 是 Vovida Open Communication Application Library 的缩写,它是由 Vovida.ORG 组织所开发的一套 open source 软件,主要着力于使 VoIP 的产品更容易市场化。VOCAL 提供社群软件何工具来建立已经存在的或是新的 VoIP 应用软件及服务。VOCAL System 包括 SIP based Redirect Server、Feature Server、Provisioning Server 、Marshal Proxy 等部分。
2-2.2 VOCAL 软件架构
VOCAL 包含了 SIP 部分以及语音通讯的部分,还有一个用来管理系统的 Provisioning Server,下页的图就是整个 VOCAL System 的架构:
VOCAL System:VOCAL 是一个 IP base 的 call phone system,使用了多种痛训协议,包括现在热门的 SIP。
GUI:VOCAL 包含了一个 Web base 接口的管理系统,以及一个 JAVA 的 client 接口。
IP Phone:VOCAL system 中最重要的就是一个语音通讯软件,它跟 SIP 的 User Agent 结合在一起,User 透过 UA 就可以透过 IP 网络拨接电话。
Marshal Server:对应到 SIP 的 Register Server。
Feature Server:对应到 SIP 的 Proxy Server。
Provisioning Server:用来管理整个 VOCAL System 的 Service 以及使用者的注册事宜。
第三章硬件环境
3- 1 PC
这个专题是要尝试在各个不同平台上建构 VOCAL 通讯系统,所以我准备了三台一般的 PC 来安装不同的操作系统:
PC 1:
这台计算机主要用来编译测试 Windows 版的 VOCAL UA,并且以远程登入操作另外两台(Linux)与 PDA(Linux)。另外要将 Linux 系统安装于 PDA 上也要靠这台计算机。
接上 iPAQ serial 底座与 iPAQ USB 底座。
PC 2:
这台计算机主要拿来编译测试 Linux 版的 VOCAL UA,另外撰写与编译 Linux 版软件与 PDA 版软件也使用这台。
PC 3:
这台计算机拿来安装 VOCAL Server。
3- 2 PDA
为了展示 SIP 于行动设备上的通化能力,我准备了一台 iPAQ 3630 PDA,并将 VOCAL UA 移植到上面。
IPAQ 3630 PDA 的规格如下:
Intel Strong ARM CPU ( 206Mhz )
4096 色反射式液晶屏幕
分辨率 240 x 320
32 MB RAM16 MB ROM触控式屏幕
喇叭
麦克风
另外为了使用无线网络,所以还必须添加两样设备:
iPAQ CF 背夹
Symbol Spectrum24 CF wireless card
在无线网络还没有设定完成前,PDA 必须用底座来与 PC 连接,两个底座都接在 PC 1 上。
第四章软件环境
4- 1 系统
4-1.1 PC Windows
PC 1 安装的是 Microsoft 的 Windows 2000 操作系统,另外还必须安装一些程序:1. 超级终端机:此为 Windows 内建的软件,主要用来在 PDA 网络还没有设定完成前操控 PDA。
2. Microsoft ActiveSync:PDA 一开始是 Windows CE 操作系统,要转换成 Linux 系统要先在 PDA上安装一个烧录程序,就要使用微软这个同步软件。
3. Microsoft Visual C++ 6.0:用来 compile windows 版的 VOCAL UA。
4. Putty:这是一个 SSH 联机软件,在 PDA 网络设定完成后用这个操控 PDA。
5. TCL / TK / Expect:在 4.2.3 会做说明。
4-1.2 PC Linux
Linux 是这个专题的重点环境,因为它取得容易,资源丰富,而且 VOCAL System 主要应用与开发的环境就是 Linux。我们在 Linux 上必须安装一些软件:
1. X Window:用来显示 VOCAL UA 的图形接口。
2. Cross Compiler:在 4.2.1 做介绍。
3. QTE:在 4.2.2 做介绍。
4. TCL / TK / Expect:在 4.2.3 做介绍。
4-1.3 PDA Linux
iPAQ 3630 原本搭载的是 Microsoft Windows CE 3.0 操作系统。为了方便将 VOCAL UA 移植到 PDA 上,必须将其换成 Linux 系统。Familiar project 就是这样的一个计划,它是 Handhelds 组织的一个计划,将 Linux port 到各种 PDA 上面,官方网页是 www.handhelds.org。
简述一下如何将 Familiar Linux 安装到 iPAQ 3630 上:
1. 到 www.handhelds.org
2. 选择 Familiar Linux Distribution
3. 选择一个最新的 release 进入
4. See the installation guide
5. download , 可以选无图形接口, GPE 图形接口 or OPIE 图形接口
6. Install new bootldr / using ActiveSync
7. Install via serial port
以上会建立好一个在 iPAQ 上建立好一个 Linux 环境,并且让我们以终端机仿真程序操控它,但是它并没有网络的功能,要让它有网络功能,可以有以下两种方法:
1. 使用 USB 底座 ( 连接线 ) 仿真网络
在 PDA 端用一般 Linux 设定网络的方法启动并设定 usbf 这个网络接口,在 windows 端安装这个 usb 仿真网络卡的驱动程序 : http://www.bahia21.com/download.htm并且设定网络资源共享。
2. 使用 CF/PCMCIA 有线/无线 网络卡
如果运气好,网络卡可以直接找到,那么可以使用 serial 用一般 Linux 指令将网络环境设好,就可以使用网络卡。如果网络卡需要安装其它驱动程序,那么必须先装驱动程序传到 PDA 上进行安装
但是要传档案到 PDA 上必须要有网络,所以到头来还是要用 USB 网络。
4- 2 开发工具
4-2.1 Cross Compiler
一般 x86 PC上的 compiler 编译出来的执行档只能在 x86 系列的 CPU 上 RUN。为了能在 x86 PC 上编译出 ARM CPU 的执行档,我们必须使用 cross compiler。从头开始自行架设一套 cross compiler 是一件非常复杂且花时间的事,幸好 Handhelds.org 提供了一套现成的 cross compiler 供我们使用。我在 PC 2上安装了这套 cross compiler,安装步骤如下:
1. 下载 arm-linux-toolchain-currtne.tar.gz 以及 arm-linux-libz.tar.gz。
2. 将 arm-linux-toolchain-current.tar.gz 在根目录下解开。如此在根录下会产生一个 skiff 的目录。
3. 在 /skiff/local 下将 arm-linux-libz.tar.gz 解开。
4. 最后再将 PATH 设定一下,如此就安装完成。
Cross compiler 的使用方法与 GCC 相同,只有名称不同而已,名称对应如下:
gcc : arm-linux-gcc
g++ : arm-linux-g++
ar : arm-linux-ar
strip : arm-linux-strip
4-2.2 QTE
QT 是由 Trolltech 这家公司所开发的一套 open source 的函式库,主要用来开发图形接口。在 X Window上大名鼎鼎的 KDE 桌面环境就是用这套 lib 所建立的。它采用 C++ 的语法,有各式的图形对象可供使用,还有 slot 导向的事件呼叫,是在 X 底下开发软件的利器。
QTE 则是 QT Embedded 的缩写,顾名思义,就是在嵌入式环境下所使用的 QT。目前市面上所有上市的 Linux PDA 都是采用 QTE 作为图形接口的函式库。QTE 的特性是不需要 X 也可以直接在 framebuffer 上显示图形接口,这对硬件与容量都很限制的嵌入式环境来说是非常重要的一点,而且由于少了 X 这一层,所以反应的速度也更快了。Familiar 中有两套图形环境使用 QTE,一个是 OPIE,另一个则是 Trolltech 官方的 Qtopia。
虽然 Familiar 提供了 QTE 的环境,但是在一般的 PC 上要开发 PDA 的程序,仍然必须安装 PC 版的 QTE。Trolltech 只有提供 source code,所以我们必须自己编译 x86 PC 版的 QTE,供我们在 PC 上撰写程序测试用,完成后再用 cross compiler 编译成 ARM 版传至 PDA。若程序要在 windows 上跑,则必须再拿到 windows 用 visual C++ 编译一次,过程相当麻烦。
专题一开始我是采用 QTE 作为开发工具,但是后来遇到许多问题,包括行程间通讯,太多不同平台的编译问题等无法解决,最后只好放弃,改采用 TCL / TK / Expect。
4-2.3 TCL / TK / Expect
TCL 是 Tool Command Language 的缩写,是在 Unix 世界里广泛运用的一种直译式语言,它与 shell script 一样,程序撰写好后不需要经过编译,只要透过直译器就可以直接执行,相当容易移植。
TK 则是 TCL 的图形延伸工具,加上 TK 后,可以使用 TCL 在 X Window 下撰写图形接口程序。Expect 则是 TCL 用来完成自动化作业的延伸工具。
TCL、TK、Expect 三者各有自己的直译器,其中 TK 与 Expect 的直译器都可以执行 TCL 的程序,但却不能执行对方的程序。为了方便,有人便将 TK 与 Expect 的直译器合在一起,称为 expectk,目前有 PC Linux 版还有 PC windows 版的 binary,但却没有适用于 PDA 的版本。
第五章实作部分
5- 1 架设 VOCAL server
VOCAL 在我做这份专题的时候只有提供 source 下载,所以要架设 VOCAL server 必须自行编译。
到 vovida.org 网站 download 整个 tar ball,在 Linux 环境下解开后约有一百多 MB,在 source 最顶层的目录下标准三步骤:
./configure
make
make install
接下来去 VOCAL 安装到的目录(假设是 /usr/local/vocal)进行设定:
cd ./bin/allinoneconfigure/
allinoneconfugure
感谢 VOCAL 提供了这个方便的 configure 工具,问题是它会自动对安装环境做猜测,而且常常是错的,所以有时需要更动这个 script 里的一些东西,我每次安装时都不一样,不过后来发现安装旧的版本
比较没有问题(1.3版)。
接下来去 bin 里面启动 VOCAL server:
./vocalctl
如果没什么问题的话,VOCAL server 就安装完成了。
5- 2 编译 UA
5-2.1 PC Windows UA
在整个 VOCAL 的 source tree 中,UA 的部分是放在 ./sip/ua 底下,不过单将这个部分取出在 Windows 下编译是无法成功的,所以最好是将整个 source tree 拿到 Windows 底下,但是在 ./sip/ua 里面做编译,编译成功后可以得到 Windows 版的 UA。
要注意的是,除了 ua.exe 以外,pthread.dll 还有 Tone 这个目录必须跟 ua.exe 放在同一个目录下,ua.exe 才能执行。另外还有通话设定档,在 5- 3 说明。
5-2.2 PC Linux UA
当之前 VOCAL server 编译完成后 ua 应该已经编译好了,就在 ./sip/ua 之下。如果没有的话,在这个目录下直接打 make,应该可以编译出来。
5-2.3 PDA Linux UA
这个是最麻烦的部分。若用 1.4 或以前的版本,那么 cross compile时错误会多到无法想象的地步,所以必须使用它的最新版本 1.5 beta,里面支持compile 成 ARM iPAQ 的版本。不过这个设定档必须自己找出来并将它设为默认值,之后再将修改 Makefile 将 gcc 换成之前安装的 cross compiler,才可以开始编译。
编译的过程会有个问题,就是它需要 libssl 与 libcropty,而且必须是 ARM 的版本,所以建议在编译 UA 之前,先取得 openssl 的 source 并将其 cross compile成 ARM 版本,才能让 UA 的编译过程顺利进行。
编译完成后,将执行档 ua 与 Tone 这个目录连同拨号设定档一起传到 PDA 上,就大工告成了。
5- 3 操作 VOCAL server 与 UA
VOCAL server 中的 Provisioning server 其中一个功能就是管理实用者的账号,每个使用者的 SIP 号码必须要先在 Provisioning 登记注册后才能使用。VOCAL server 刚完成时会自动登记注册两个号码:1000、1001。若要再增加,只要在 VOCAL server 的 web 管理系统新增就可以了。
UA 要拨号还必须要有拨号设定档,VOCAL 事先提供了 1000 与 1001 的拨号设定档,放在 /usr/local/vocal/etc 下面,ua1000.cfg 与 ua1001.cfg 就是了。打开这两个档,发现只有 User_Name 的直不一样,一个是 1000,另一个是 1001,以后要再给新的使用者制造设定文件,只要复制一份,再把 User_Name 改掉就行了。
将拨号设定档放在 UA 执行文件同个目录下,就可以开始拨号了。启动方式是(在 Windows 环境下):
ua –s –f uaxxxx.cfg
uaxxxx.cfg 自然就是拨号设定档的名称。
当两端都启动了以后,就可以开始拨号。假设我要从 1000 打给 1001:
1. 在 1000 这端按下 a
2. 按对方的号码,就是 1001
3. 拨号声响起,1001 这边会看到 incoming call…
4. 1001 按下 a 后接起来,双方即开始通话
5. 通话完毕后,双方各按 z 来挂断
注:PC Linux 环境下加 –s 参数会无法执行,推测是因为声卡驱动不正确所致,所以 Linux 下无法听到声音。
5- 4 为 UA 加上图形接口与照片显示
VOCAL 原本为一个 command line application, 使用不便,另外VOCAL 仅有通话的功能。为了改善以上两点,我为 VOCAL 写了一个前端的 GUI,并加上照片显示的功能。使用的程序语言是 TCL / TK / Expect。
第六章心得
这次的专题由于大部分是在 Linux 下实作,再加上 PDA 的跨平台,所以碰到了许多问题:
1. Linux 下硬件驱动不易:Linux UA 在语音的部分一直没办法突破,因为 UA 会自动去寻找它要的音效装置,和原本 Linux 安装时的音效装置不合,所以在 Linix 下无法使用 –s 参数。
2. PDA ARM 版 UA 原本一直无法顺利编译,停顿了好一阵子之后才发现要用最新版的 VOCAL 才可以解决,之前的版本都不支持。
3. Linux 下的 cross compiler 不像 Windows 的 Visual Studio Embedded 有高度整合的接口,编译、测试、上传可以一次完成,甚至还可以在 PC 上模拟。在 Linux 下用 GCC port 程序辛苦多了,还要注意各个函式库是否齐全,若有错误发生必须自己猜测问题所在,以文字接口修改程序代码,往往越改错误讯息越多,是这次专题碰到问题最大的部分。
4. 在撰写 GUI 方面,由于我并不打算修改 UA 的原始码,所以是另外包一层 GUI 在外面。一开始我选择 QTE 做开发工具,结果碰到严重的行程间通讯问题,最后只好放弃。后来改用 TCL / TK / Expect 才可以顺利完成。不过直译器 expectk 只有 x86 Linux 版与 Windows 版,PDA ARM 版一直无法编译出来,所以 PDA 上目前没办法使用图形接口。
在这次专题中,碰到了上述的问题,所以除了 SIP 与 VOCAL以外,我也因而接触到了 cross compiler、Linux PDA、QT / Embedded、TCL \ TK \ Expect 等,结果虽然不尽理想,但是得到了许多宝贵的经验,也算是一种收获。