admin管理员组

文章数量:1539779

2024年6月20日发(作者:)

基于SkypeKit开发具备音频和 

视频功能的即时通讯系统 

周 颖 

(湖南化工职业技术学院信息工程系 株洲

摘要

412004) 

本文旨在探讨如何使用Skype公司提供的二次软件开发包SkypeKit来开发具备音频和视频功能的即时通讯系统。介绍 

Skype的工作原理及使用SkypeKit开发的主要步骤和典型功能。操作系统平台为Windows,开发环境为Visual Studi0 2008,开发语 

言为C++。 

关键词 即时通讯系统 SkypeKit C++ 

中图分类号TP31 1 文献标识码 B 文章编号11 1 118—5966 

I nstant Messaging System with Audio and Video 

Features Based on SkypeKit 

Zhou ring 

(Department of Information Engineering of Hunan 

Chemical Vocational Technology College Zhuzhou 41 2004) 

Abstract This text focuses on discussing how to employ the second software developing package,SkypeKit,provided 

by Skype company,to develop the IM(Instant Messaging)system based on SkypeKit with audio and video features.It 

introduces the work principles of Skype,and the developing mainly steps and typical functions by using SkypeKit.It uses 

Windows as the platform of the operating system.The developing workplace is the Visual Studio 2008.And the program— 

ming language is the C++. 

Keywords IM(Instant Messaging) SkypeKit C++ 

包可以实现全功能即时通讯系统的定制。 

引言 

即时通讯IM(Instant Messaging)系统是一种网络沟通工具, 

二、Skype通信原理 

1、Skype网络结构 

使用者可以通过安装了即时通讯工具的网络终端进行两人或多 

人之间的实时沟通。交流内容包括文字、界面、语音、视频及文件 

互发等。目前,常用的即时通讯工具主要有QQ、MSN、Skype等。 

与常规的电信业务网络不同,Skype的网络中除了注册服 

这些即时通讯工具给生活和工作带来了很大的便利。那么,能不 

能自己定制即时通讯工具,只提供小范围的服务呢?例如集成到 

公司的OA中,形成自己公司专用的通讯系统,减少上班时问内 

被外来网络人员信息干扰、降低办公效率的问题发生的概率。企 

业人员可以快速和跨部门人员形成协同办公、开始群组会议、开 

启讨论,大大节省人员之间的沟通时间成本。可以利用开源软件 

包来制作定制的即时通讯工具,但绝大多数开源软件只有文字 

沟通的功能,少数具有音频与视频功能的则需要自己架设专门 

的服务器并安装、开发复杂的软件,还需进行日常管理,大大增 

加了成本。Skype公司发布的可以进行二次开发的软件工具包 

SkypeKit,具备了除收费以外的Skype所有功能,利用这个开发 

图1 Skype网络结构图 

42。 办公自动化杂志 

ime实现所需要的即时通讯功能。在用户实现的UI界面与 

务器,没有其他任何集中的服务器,只是将用户节点分为普通节 

t提供Language Wrapper中间需要使用key pair来认证 

点和超级节点。Skype的系统连接结构如图1所示。注册服务器 

SkypeKi

是skype惟一需要维护的设备,它负责完成客户端的注册,存储 和加密数据。 

并管理用户名和密码信息,当用户登录系统时,对用户进行身份 

认证。注册服务器还需要检验并保证用户名的全球惟一性。普通 

三、进行SkypeKit开发的准备 

SkypeKit为开发者提供了简单便利且开放程度非常高的二 

节点即普通主机终端,只需要下载了Skype的应用,就具有提供 

次开发方式。在进行开发之前,需要做一些必要的准备工作:1) 

语音呼叫和文本消息传送的能力。超级节点实际上是满足某些 

到Skype开发者网站(https://developer.Skype.corn/)进行注册成 

要求的普通节点,这些要求包括:具有公网地址、具有足够的 

为SkypeKit的开发者;2)登录Skype开发者网站下载一个适合 

CPU处理能力、存储空间足够大、具有足够的网络带宽等。也就 

自己使用的操作系统(目前支持Linux、Windows、Mac OS X等 

是说,任何符合条件的主机终端都可以成为超级节点,前提是加 

3种)的Runtime运行程序;3)登录Skype开发者网站下载准备 

载了Skype应用。 

采用的开发语言所对应的封装包(目前支持c++、Java、Pytl1on 

Skype之所以成功是因为它的互联网特性,即免费、开放 

等3种);4)登录Skype开发者网站向Skype公司提交一个自 

性,以及其较好的通话质量。事实上,技术方面Skype最大的意 

己公司(或组织)的开发申请表并支付一定费用(目前为10美 

_I■一 ~

义在于,它开创了将P2P技术引入到话音通信的先河。也就是 

元每年,无终端和帐号个数限制);5)在开发申请表获得通过及 

说,采用了网络中的所有节点都动态参与到路由、信息处理和带 

付费完成后,登录Skype开发者网站下载一个与申请用户名对 

宽增强等工作中的机制,而不是单纯依靠服务器来完成这些工 

应的key pair密钥文件,用于在应用SkypeKit开发包的基础上 

作,因此其管理成本大大降低,同时又较好地保证了语音质量。 

完成的应用程序能够在实际使用Skype网络的过程中进行安 

2、SI(ype通信流程 

全认证和数据加密。需要注意的是Runtime运行程序和key pair 

Skype的通信流程分为:启动、注册(认证)、查找用户、呼叫 

密钥要使用同一个用户名下载,编译完成的应用程序才能正式 

和释放的过程。其中注册流程只是在用户初次安装了Skype的 

使用。 

客户端软件后进行注册,后期使用的过程中该步骤就变成认证 

过程。注册(认证)流程可能是Skype所有流程中最复杂的一 

四、使用VS2008 C++进行SkypeKit开发 

个,用户启动Skype后,首先需要连接到超级节点,通过超级 

目前Skype支持使用C++、Java、Python等3种语言进行开 

节点向注册服务器发送身份认证信息,注册服务器验证用户名 

发,其中在Windows系列平台下可以使用VS2005、VS2008、 

和密码的合法性,然后向其他对等节点及其好友发送在线信息, 

VS2010中的c++开发。本文以VS2008为例,使用Skype提供 

同时还需要判断该终端所在私网的NAT和防火墙类型。如果该 

的examples来讲述。 

解压下载的skypekit—sdk后,首先需要编译生成2个lib 

终端先前默认的超级节点已不可用,则还要查找具有公网地址 

的Skype节点来作为该终端的超级节点,从而维持该终端与 

库,可以使用VS2008打开子目录下interfaceskskype\cpp embed— 

Skype网络的连接。一旦超级节点都不可用, 

dedkbuild\vs2008\的解决方案文件skypekit—cppwrapper_2.sln并 

Skype的客户端采用了尽力而为的方式进行 

●姨h ・聃 

注册,即先用UDP包试注册,不成功超时则 

诵 黼 

用TCP80端口,再不成功则用TCP443端口。 

通常为防止其超级节点不可用,客户端必须 

建立一个可选连接节点列表,并定期维护该 

列表。 

3、SkypeKit工作原理 

SkypeKit工作原理如图2所示。SkypeKit 

提供了核心库、音频库和视频库构成了一个 

实时运行系统(SkypeKit Runtime),这实际相 

当于一个没有界面Skype即时通讯软件,负 

责完成即时通讯的所有用户功能。开发者不 

需要了解Runtime的细节,只要启动它就可 

以了。Skype还提供了音频和视频接口,和操 

作系统的音频、视频设备连接,也不需要开 

发者干预。开发者要做的工作就是开发适合 

自己的用户应用界面,并调用SkypeKit提供 

的开发语言封装包中的类和接口通过Run一 

图2 SkypeKit工作原理图 

办公自动化杂志・43・ 

生成解决方案,编译完成后会在其上级目录inte卜 

并非没有上述功能,开发者可以通过互联网上skype开发者 

faces\skyp&cpp embedde&build\目录下生成2个分别名为 

l碉站

skypekit—cppwrapper 2

_

(http://developer.skype.com/skypekit/reference/cpp/index. 

lib.1ib、skypekit—cyassl lib.1ib的lib库文 htm1)的说明文档C++Wrapper Reference查询相关的API来 

件以及1个名为skypekitclient.exe的可执行文件,其中2个lib 

实现这些功能。开发者同时也可以通过SkypeKit的开发者论 

库文件会在后续的程序编译中被链接引用,而可执行文件 

坛(http://devforum.skype.com/)来交流开发心得和SkypeKit API 

skypekitclient.exe实际就是一个字符版本的Skype应用软件,可 使用技巧。 

以使用它采取字符命令的方式来完成Skype的具体功能。in— 

terfaces\skype\cpp

_

五、结束语 

即时通讯工具QQ是个封闭的系统,只能使用标准的 

客户端程序,MSN则提供了可以进行插件开发的软件包。与之 

embedded\documentation子目录中则提供使用 

c++来开发的详细文档供开发人员阅读参考。 

打开examples\cpp\tutorialkbuild\vs2008\子目录下的解决 

相比,Skype更具互联网精神,提供了具有更为深入和全面功能 

方案skypekit—tutorials.sln,可以学习Skype提供的16个功能 

的二次开发软件包,使用户能够方便地共享世界级的VolP语音 

示例,包括登录、发起呼叫、接受呼叫、添加好友请求检测、 

网络和通话质量。事实上,在SkypeKit发布后,Skype的用户数 

发起多人语音聊天室、加入语音聊天室、好友在线检测及事 

量出现了大幅增长。有不少公司特别是中小公司已经基于 

件状态获取、SMS短信、语音邮件、文件传输等等,基本囊括 

SkypeKit这个平台开发了为自己量身定制的应用来提高工作效 

了常用的即时通讯应用,非常实用,也不复杂。需要注意的 

率,节省沟通费用。Skype公司计划发布更多的基于智能手机平 

是编译skypekit—tutorials.sin解决方案必需具备两个前提,一 

台(如Android)的SkypeKit软件包,也许会对电信业传统的话务 

是上文中提到的和interfaces有关的2个编译完成后的lib 

格局产生深远影响。 

库文件需要在解决方案或者项目中被link,二是在编译解决 

方案前会需要将之前下载的key pair密钥文件重命名为 

参考文献 

keypair.pem并拷贝到名为keypair.h的头文件所对应的子目 

[1]吴琼.Skype会话建立过程分析与话路检 ̄rJH].计算机应 

录examples\cpp\tutorilakkeypair\之下。Skype提供了与每个功能 

用与软件,2010.11,216~219. 

示例对应的详细文档说明,具备一定c++基础的开发者很容易 

2]Skype,https://developer.skype.eom/skypekit/development— 

理解。 

guide,2011-11—8. 

SkypeKit提供的16个功能示例中,很遗憾地没有包含使用 

程序接口进行自动帐号注册和自动发送添加好友及接受其他用 

[3]Skype,http://developer.skype.com/skypekit/reference/cpp/in— 

dex.html,2011—11—10. 

户成为好友的例子。如果作为公司用户,好友分组的功能是否可 

作者简介 

以通过自己的界面系统来操作实现也是重要的功能,可以用 

周颖(1971~),男(汉族),湖南株洲人,湖南化工职业技术 

来进行部门分组等,示例程序同样未能提供。好在SkypeKit 

学院讲师。 

I上接第34页) 

 

字典顺序比较两个字符串对象的大小。这里我们主要提出的是 

体存储的字符串值。

Stirng类的相等关系,String类对象有两种比较方式,一种是关 

系运算符==,另一种是方法equals(),compareTo方法判断字 

四、小结 

在软件项目开发中,通过类集成数据特征属性及方法,而在 

符串是否相等主要依赖于equals()方法的返回值。而String类的 

数据处理过程中,数据排序是最常见的数据处理过程之一,通过 

表现形式一种是常量,这种值并不占据栈空间,数值存储于常量 

开发人员编写的算法规则的灵活运用,可以使同一个类在不同 

池中,而在常量池中的同一种值只存储一个具体数据,因此两个 

环境场合下按照不同的比较规则进行关系运算的比较,极大地 

在常量池中的字符串只要对应的字符相同,用:=运算符运算 

提高了程序的变化性和灵活性,通过对Java类对象比较方法实 

和用equals()运算都是相等的。而当定义的字符串类对象用 

现的原理,往往可以使我们的程序起到意想不到的效果。 

new生成对象后,则会占据栈空间,这时的两个栈空间变量即使 

参考文献 

对应的字符串相同,如果用运算符==运算,则结果为false,即 

l、李钟慰.Java从入门到精通 E京:清华大学出版社,2008. 

不相等,但如果用equals判断则相等。例: 

String s 1=”abc”;String str2=”abc”: 

2、王灏.Java完全自学手册[M].北京:机械工业出版社, 

2006. 

String str3=new String(“def'’); 

String s ̄4=new Stirng(“def’): 

3、张基温.新概念Java教程【M】一匕京:中国电力出版社,2010. 

作者简介 

张勇(1974~)男,湖北罗田人,黄冈职业技术学院电子信息 

则strl==str2返回值为true,而str3==st ̄返回值则为false。 

讲师、硕士,主要从事软件开发、软件测试方面的教学和研 

因为当我们用==运算符判断str3与str4时,系统判断的是两 

学院,

 

个变量的地址,只有用equals()方法进行判断时才判断的是具 

究工作。

44’办公自动化杂志 

本文标签: 开发注册需要功能节点