从技术上而言,音视频通信技术,涉及到音视频设备操作、音视频流编解码、媒体流网络传输、流媒体接收处理等相关技术,门槛高,难度大。另外,由于媒体流信息量大,及时要求度高,还要保障媒体帧的流畅性,这就对依耐于高速网络、高性能的硬件设备以及相关媒体流网络包的建包和解包算法。
本课题主要以实现音视频通信会议功能为重点的音视频通信软件,主要包含基本的单人音视频功能、音视频会议功能。通过对构架类分布式的服务源服务模式,最终实现“基于网络逻辑完全树架构的服务模式”系统,从而将服务重责平均分配到各个参加网络音视频会议的各个用户子机,减轻总服务源(会议发起方)的服务“压力”,进行使整个通信系统达到“有福共享,有难同当”的最佳服务状态。该音视频通信软件的核心需求是搭建几种特殊的完全树网络逻辑架构,限于其研究目的,不实现P2P功能,但需提供可扩展的网络接口,所以其应用范围仅限于某一子网。
该音视频通信软件要求在Windows XP或Windows Server 2003操作系统下运行,需要Divx5.02编解码器,以实现媒体帧的编码和解码操作。
本次研发的音视频通信软件主要需实现如下功能:
(1) 三种网络登录模式设计(广播、多播、CS);
(2) 本地音视频设备设置;
(4)简单的文字辅助单聊、群聊功能。
本课题所涉及的音视频通信软件,使用了C++语言进行开发,C++语言主要具备下列特点和优势:
(1)C++由C发展而来,与C兼容,C程序基本可以不加修改应用于C++;
(2)C++具备C语言的全部优点,并增加了面向对象机制;
(3)C++编译器资源很广泛,几乎涵盖所有常见操作系统;
(4)C++执行效率很高,运行速度快。
1、操作系统
该课题所涉及到的音视频通信软件,在普通用户通用机型,Windows XP操作系统中完成全部开发和测试。Windows XP 为目前单机普通用户主流机型,能更好的满足广大计算机用户的需求。
2、集成开发环境
该课题中,集成开发环境选用了微软的Visual Studio 2005。Visual Studio 2005是一个基于Windows操作系统的可视化集成开发环境。Visual Studio 2005包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等全套工具。所有组件通过Developer Studio集成为完整的开发环境。值得一提的是,Visual Studio 2005所提供的MFC能够较为方便地完成图形界面应用程序。
3、其他辅助平台
该课题中,媒体流帧解编码部份采用了Divx5.02编解码器实现。
DivX是一项由DivXNetworks公司发明的,类似于MP3的数字多媒体压缩技术。它由DivXNetworks公司发明,基于MPEG-4标准,DivX配置CPU要求是300MHz以上、内存要求是64M以上、8M以上显存的显卡.DivX视频编码技术是为了打破微软ASF的种种协定的束缚,由Microsoft mpeg4 v3修改而来,使用的MPEG-4压缩算法可以把MPEG-2格式的多媒体文件压缩至原来的10%,更可把VHS格式录像带格式的文件压至原来的1%。通过DSL或CableModen等宽带设备,它可以让你欣赏全屏的高质量数字电影。无论是声音还是画质都可以和DVD相媲美。同时它还允许在其他设备(如安有机顶盒的电视、PocketPC)上观看。
本课题所完成的音视频通信软件,主要完成三种用户登录模式:广播、多播、CS,用户可以根据当前网络支持状况,选择其中一种合适的登录模式;支持同一时间与多人进行一对一音视频聊天;另外,邀请在线好友进行音视频会议;同时,软件支持文字辅助聊天。
针对该软件的主要需求,摄像设备的独占性特点,主要可以采取两种设计方案实现:
(1) 捕获音视频设备媒体流,进行相应编码操作,将视频流以图片帧的方式,绘制图像到相应窗口,建立发送地址表,通过TCP/UDP网络套接字对表内的所有客户主机地址发送媒体流,同时接收Filter接收相应网络媒体流,进行相应解码操作后输出媒体流到相应音视频显示设备终端;
(2)捕获音视频设备媒体流、进行相应编码操作,建立发送分支Filter,对相应客户方建立相应音视频发送Filter分支与视频显示分支,同时接收Filter接收相应网络媒体流,进行相应解码操作后输出媒体流到相应音视频显示设备终端。其中,收发Filter分为单人聊天收发Filter与音视频会议收发Filter,分别支持TCP媒体流与UDP媒体流。
显然,第一种方式更简单易懂,更容易实现,然而所带来的系统开销也是非常庞大的。对应每一个音视频会话,就对应一个网络地址,在发送媒体流时,遍历这个地址表的同时将绘制媒体流图片帧到相应窗口,这消耗大量CPU运算时间,严重影响系统性能。同时,第一种实现方式也失去了DirectShow技术的优势。另外,在本课题的音视频会议软件,要求满足广大即时通信软件的特点:即时、高效、简捷。所以,本课题的音视频通信软件采用第二种方式实现,建立以Filter支链为基础的Filter Graph运行方式,可以有效节约系统资源,便于软件管理与维护。针对此种实现方法,程序总体运行流程如图 3 - 1所示。
图 3 - 1 音视频通信软件系统总流程
根据功能实现需要,并兼顾代码的模块化、规范化,本课题所开发的音视频通信软件主要设计为由以下三大模块构成,如图 3 - 2所示。
图 3 - 2 音视频通信软件模块划分
1、用户管理子系统,主要实现以下功能:
(1)群用户管理:主要管理群用户上线、下线、群消息;
(2)网络登录模式:实现网络登录多态接口,并扩展为广播、多播、CS登录模式。
(3)消息包分析:分析并提交网络消息包与窗口消息包。
2、音视频通信管理子系统,主要实现以下功能:
(1)单人聊天模式:一对一进行音视频聊天功能;
(2)音视频会议模式:具有完全树网络逻辑服务模式的音视频会议功能。
3、协同辅助模块,主要实现以下功能:
该模块辅助音视频通信时,相应请求、应答消息管理,并提供用户界面,接受用户输入,判断输入合法性。
该子系统主要实现软件群用户的管理、用户网络登录以及用户消息包解析功能,为后期音视频通信提供用户组对象。该子系统包含了群用户管理、网络登录模式、消息包分析三大功能,该子系统总体流程如图 3 - 3所示。
图 3 - 3 用户管理子系统运行流程
该功能模块设计为主要负责管理群组用户,维护应用程序用户列表,发送与接收群组消息,分别处理用户上线、用户下线以及群用户消息。针对群用户管理模块的具体功能需求,重点数据类型和各个子功能分别设计如下:
1、网络通信包设计
网络通信包是音视频通信软件之间协同通信的网络消息报文,因此,网络通信包设计为封装各个用户通信的基本参数信息,封包组成成份有:封包头、设备标识、通信名称以及附加内容。其中封包头和设备标识为四个字节的枚举类型;通信名称为256个字节长度;附加内容为1124个字节长度。总共1388个字节长度,小于1500,能保障封包在传输过程中不被分片 ,以完整的形式到达对方。网络消息包具体设计,如表3 – 1 所示:
网络通信包
|
名称 |
长度(byte) |
字段名 |
备注 |
封包头 |
4 |
mUserWay |
封包类型,枚举变量,包含用户入网形式以及附加封包头标识信息; |
|
设备标识 |
4 |
mVideo |
设备状态标识,枚举变量,用于标识当前是否有音视频设备; |
|
通信名称 |
256 |
musername |
用户名称,字符串变量,长度256,用户基本通信名称; |
|
附加内容 |
1124 |
mexData |
附加数据,字符串变量,长度1124,附加消息封包字段或填充字段; |
表 3 - 1 网络通信包(UserNetPack)定义表
2、群用户网络形为设计
群用户网络形为设计为三种方式:登录网络、退出网络、网络消息群发。原理与飞鸽协议相类似,即:某登录时发布我上线了的消息,其它用户收到该消息后向其返回它也在线的消息。目地在于方便系统管理用户群组,方便即时与群中用户进行音视频聊天或者音视频会议。登录系统时,由用户填写基本信息后登录网络并启动相应系统服务;退出系统时,由程序自动向群中用户发送退出消息报文并关闭相应系统服务;群发网络消息时,将通过网络接口向群组用户发送消息。其中通过设计网络通信包头值,以区分不同的用户形为,封包头为一个4个字节的枚举类型,其定义见表3 – 2所示:
网络通信包头 |
字段名 |
备注 |
UserWrong |
未知用户登录标识头,初始值0; |
|
UserAdd |
用户登录网络标识头,表示某一用户上线或刷新好友列表; |
|
UserLeave |
用户离开网络标识头,表示某一用户下线; |
|
UserAddBack |