Windows下基于PJSIP的视频通话控件的研究与实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:hhf1985
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:PJSIP是一个开源的SIP协议栈,作为基于SIP的一个多媒体通信框架,它提供了非常清晰的API,实现了SIP、SDP、RTP、STUN、TURN、ICE等协议,以及NAT穿越的功能。PJSIP具有非常好的移植性,几乎支持现今所有系统:从桌面系统、嵌入式系统到智能手机。PJSIP支持语音、视频、状态呈现和即时通讯。PJSIP具有非常完善的文档资料,对开发者是很友好的。本文基于PJSIP协议实现了Windows平台下的音视频通信系统,其功能包括SIP账号注册、音视频通信、状态呈现等。通过在Windows 7操作系统下的测试表明,SIP通信系统的各项功能运行稳定,对PJSIP修改的部分也达到了预期的效果。系统还具有良好的可扩展性,后期可以在此基础上进行更多的功能实现。
  关键词:PJSIP;FreeSwitch;SIP
  中图分类号:TN911-34 文献标识码:A 文章编号:1009-3044(2018)23-0241-03
  Abstract: PJSIP is a free and open source multimedia communication protocol stack. As a multimedia communication framework based on SIP, PJSIP provides a very clear API, and implements standard based protocols such as SIP, SDP, RTP, STUN , TURN, ICE, and NAT traversal function. PJSIP has a very good portability, almost supporting all the existing systems ranging from desktops, embedded systems to mobile handsets.It supports audio, video,presence, and instant messaging,PJSIP has perfect documents and is very friendly to developers.Based on the PJSIP stack,I realize an audio and video communication system in the Windows platform.Its functions include the SIP account registration,audio and video communication,status presence,etc.Tests under Windows 7 operating systems demonstrate that all function of the SIP communication system works stably,the modification of PJSIP also achieved the expected affect.The system also has good extensibility and we can add more functions to it in the future.
  Key words: PJSIP; FreeSwitch; SIP
  1 PJSIP的簡介
  PJSIP是一个开源的SIP协议栈,支持多种SIP的扩展功能,作为基于SIP协议的一个多媒体通信框架,它提供了非常清晰的API,实现了SDP、RTP、SIP、STUN、TURN、ICE等协议,以及NAT穿越的功能。并且具有非常好的移植性,几乎支持现今所有系统:从桌面系统、嵌入式系统到智能手机。同时支持语音、视频、状态呈现和即时通讯。它具有非常完善的文档,对开发者是很友好的。PJSIP由Benny Prijono、Perry Ismangil在2005年创建,之后不久,Nanang Izzuddin、Sauw Ming加入开发团队。2006年成立Teluu Ltd.,成为开发和维护PJSIP的公司。PJSIP采用双License:GPLv2以及商业许可证,开发者可以根据需要选择不同的License。
  1.1 PJSIP框架
  PJSIP包括:PJSIP - Open Source SIP Stack[开源的SIP协议栈]、PJMEDIA - Open Source Media Stack[开源的媒体栈]、PJNATH - Open Source NAT Traversal Helper Library[开源的NAT-T辅助库]、PJLIB - UTIL - Auxiliary Library[辅助工具库]、PJLIB - Ultra Portable Base Framework Library[基础框架库]、PJSUA-LIB等模块。
  其中PJSIP包含:CORE、SIMPLE、UA三个模块,在PJMEDIA中包含了CODEC模块。PJSIP的框架图如图1所示。
  1.2 PJLIB框架
  PJLIB是整个PJSIP库的基础,所有的子模块都是依赖于PJLIB,它主要实现对平台的抽象,屏蔽了不同操作系统之间的差异,向上为PJSIP框架的业务相关模块提供统一的接口。PJLIB提供的接口涉及如下几个方面:
  1) 内存池方式的内存分配。
  2) OS抽象。
  3) 网络相关的支持。
  4) 时间管理。
  5) 各种工具性的数据结构。
  6) 异常处理。
  7) LOG机制。   8) 随机数及GUID的产生。
  1.3 PJLIB-UTIL
  PJLIB-UTIL是辅助工具库。提供的辅助工具包括:
  1) 提供命令行操作的接口。
  2) 提供加密算法,如Base64、CRC32、MD5、SHA1等。
  3) 文本跟字符串处理。
  4) DNS协议处理。
  5) 文件读写的处理,如JSON、XML解析处理。
  1.4 PJNATH
  PJNATH是开源的NAT穿越辅助库,提供了标准的基于NAT的穿越方案。
  1.5 PJMEDIA
  PJMEDIA是开源的媒体栈,支持很多音视频格式的处理、具有移植性强、代码精简、媒体处理质量优秀、对硬件支持度高以及扩展性良好等优点。PJMEDIA还对SIP中的SDP协商提供部分支持,主要为SIP协议提供可传输的媒体类型。在通信双方的SDP沟通协商过程中,最终商定的传输媒体类型主要由PJMEDIA模块提供支持。
  1.6 PJMEDIA-CODEC
  PJMEDIA-CODEC是一个静态库,它包含了各种编解码器的实现,对上层模块通过提供PJMEDIA-CODEC框架来便于进行编解码处理,该框架屏蔽了下层各个编解码器的细节。
  1.7 PJSIP、PJSIP-SIMPLE
  PJSIP、PJSIP-SIMPLE是实现标准SIP协议以及SIMPLE扩展协议的SIP栈。
  1.8 PJSIP-LIB、PJSUA-LIB
  PJSIP-LIB以及PJSUA-LIB主要包含pjsua2和pjsua。其中pjsua2是面向对象的C 语言实现,pjsua是面向过程的C语言实现。pjsua2封装了pjsua,为上层应用提供面向对象的接口。这两个库封装了PJSIP框架底层的SIP棧、媒体处理及NAT穿越等功能,提供更高级的面向网络电话业务的接口。
  2 PJSIP配置和编译
  从www.linphone.org下载如下文件:linphone-3.5.2.tar.gz、libeXosip2-3.3.0.tar.gz、libosip2-3.3.0.tar.gz、 speex-1.2rc1.tar.gz、linphone-deps-win32-120218.zip。其中linphone-3.5.2.tar.gz主要包含linphone、oRTP、mediastreamer2,libosip2-3.3.0.tar.gz主要包含osip、osipparser2,libeXosip2-3.3.0.tar.gz为eXosip2; speex-1.2rc1.tar.gz在编译mediastreamer库时需要。linphone-deps-win32-120218.zip包含运行所需的库及配置文件等。
  2.1 编译osipparser2库、eXosip库、osip库
  这三个库下载的只有源码,没有vs项目文件,需要新建osipparser2、eXosip、osip三个项目。
  以osippparser2为例,创建空的动态库项目,项目名为osipparser2,将libosip2-3.1.0/src/osipparser2文件夹下的文件全部复制到刚创建的项目根目录下,并将所有的源文件和头文件都加入项目内,同时将libosip2-3.1.0中的INCLUDE文件夹导入到创建的工程中,编译链接即可生成osipparser2.dll。
  以osippparser2为例,创建空的静态库项目,项目名为osipparser2,将libosip2-3.1.0/src/osipparser2文件夹下的文件全部复制到刚创建的项目根目录下,并将所有的源文件和头文件都加入项目内,同时将libosip2-3.1.0中的INCLUDE文件夹导入到创建的工程中,编译链接即可生成osipparser2.lib。
  要注意的是此处需新建def文件,在文件中添加要导出的接口函数。osip2和eXosip方法类似,不再赘述。
  2.2 编译oRTP库、mediastreamer2库
  oRTP源码包中已经有对应的vs项目,无需做任何修改可直接编译运行生成对应的库文件。mediastreamer2源码包虽然有vs项目,但还需要稍作修改才可编译:在项目属性中添加一条宏定义:MS2_INTERNAL,然后删除文件gsm.c,再添加qualityindicator.c、bitratecontrol.c、audioconference.c、eventqueue.c、bitratedriver.c 到工程中。
  2.3 创建phonecore
  在linphone/coreapi中没有提供相应的vs项目,需新建动态链接库项目,将linphone/coreapi文件夹中除test_lsd.c、test_ecc.c 、tunnelmanager.hh、linphonecore_jni.cc、sipwizard.c、tunnelmanager.cc文件外的其他文件都添加到项目中,再新建def文件,在文件中添加需要用到的接口函数。
  由于自定义的unistd.h,需要将头文件引用方式由#include 改为#include "unistd.h"。
  在lpconfig.c文件中找到: if (chmod(filename, S_IRUSR | S_IWUSR) == -1),并注释掉该if分支的所有语句。
  在sal_eXosip2.c文件中找到:eXosip_set_tls_ctx(
其他文献
光纤传输技术诞生于20世纪,利用光的传输速度来传递信息,经过多年的发展,到目前为止,光纤技术已经被有效的运用到了通信技术中,将通信质量与网络速度达到了新的高度,且随着当
本文从理论和实践上分析了一次烧成金花玉石生产过程中常见的色差缺陷的产生原因,并提出了稳定坯体的颜色、严格色料及其渗花辅助化工原料质量、严格执行渗花工艺参数等具体
目的探讨外源性一氧化碳释放分子2(CORM-2)对LPS所致健康人外周血中血小板过度活化的作用及分子机制。方法采集1名健康成年人的静脉血,离心分离出富血小板血浆(PRP),分装于硅化后的试管,按随机数字表法分为正常对照组、LPS组、无活性CORM-2(iCORM-2)组、10 μmol/L CORM-2组、50 μmol/L CORM-2组,每组3管。正常对照组不进行任何处理;LPS组接受20 m
为改善玉米粉的食用品质,采用添加多种改良剂方法研究其对玉米饺子粉品质的影响.以改性玉米粉与小麦粉混合粉为原料,通过添加谷朊粉、瓜尔豆胶、田菁胶及海藻酸钠等改良剂的
摘要:语音室是训练学生听力和口语能力的重要平台。开放式语音室的建设推动了教学的全面发展,开放的教学模式和教学环境能够充分激发学生的潜能,促进学生语言学习能力的提高。高校数字语音室在语言教学中的应用是当前教育领域里的一项重要平台,运用科学的管理方式来进行维护,才能发挥数字语音室的教学效率。本文分析了高校数字语音室在开放式的管理与维护中存在的问题,并提出了加强数字语音室的管理与维护的阐述。  关键词:
随着科技不断发展,人们对居住环境要求逐渐提高.由于人们大多数时间都是在室内度过,因此家具环境质量与人体健康情况有直接联系.除此之外,人们要求能够实时对室内的光照、温
近年来,单片机控制系统取得广泛应用,获得了重要发展机遇,然而受各种干扰因素的影响,单片机应用系统容易发生失控情况,进而严重影响系统运行,并造成不必要的经济损失.为此需
改革开放以来,随着我国社会主义市场经济的不断发展和科学技术的不断进步,机械电子工程行业在国民经济中的比例越来越高,其行业发展也受到了社会各界及人们的广泛关注和高度
目的 探讨严重烧伤大鼠血清对体外培养的大鼠脂肪间充质干细胞(ADSCs)生物学特性的影响.方法 取雄性SD大鼠双侧腹股沟脂肪组织,采用胶原酶消化法、分离纯化大鼠ADSCs,取第3代
摘要:微课程逐渐成为教学研究的热点,并受到越来越多学者的关注。微课的出现不仅契合网络时代学习者追求便捷和效率的趋势,同时也促使学习者学习方式的不断变化,并对传统课堂教学产生巨大的冲击。翻转课堂中老师和学生的角色发生了变化,知识传授与知识内化的顺序也发生了变化。该研究从微课与多媒体课件教学相结合的角度,对大专生多媒体课件的微课程设计进行研究,目的是为开展有效的多媒体课件教学以及提高学生学习效果提供一