|
一个语音视频聊天程序

Internet是当今应用最广泛、发展最迅速的通信网络。这是基于数据包方式的数据分组交换方式,用户数据被封装在分组中,而分组还包含一些附加信息用于网络中的路由选择、差错纠正、流量控制等。数据包各自独立地在网络中传递,由于网络状况的变化和经历路径的不同,数据包到达目的地的时间是不固定的、非实时的。故此,一般来说互联网较适用于数据的传输。但是,我们知道视频、音频信号经过模数转换后也可以作为数据在互联网上传递,因此将语音采样,量化变为数字信号,然后打包从网络上传输,双方也可以进行通话,这就是IP电话。
IP电话是对模拟语音信号经过模数转换,进行编码压缩后,按一定的打包规则将压缩帧转换成IP数据包通过数据网进行传输,在目的地经过数据解压、数模转换复原成话音,从而达到语音通信的目的。由于数据网是采用统计时分的方式分配、使用网络资源,任何通信实体都不可能独占某一信道,所以IP电话可以大大提高网络资源的利用率,降低运营成本。
本项目就是实现一套精简、高效而且性能较好的视频电话系统,要求能够实现点到点的的语音和视频通话,并要求能实现多人语音会议。以后还要实现有关网络协作的白板、远程桌面共享等。
- 实现网络适时传输语音、视频数据的RTP/RTCP协议,有效处理语音延迟抖动等情况
- 实现语音的采集和播放
- 实现视频图像的采集和播放
- 采用G723.1对语音进行编解码
- 采用MPEG-4对视频进行编解码
- 对多路语音流进行混音后再播放
- 为了提高系统性能,减少网络带宽占有,要求实现动态静音检测
- 有的麦克风音量很小,对方几乎听不到,要求实现动态语音增益
- 由于视频图像的数据量很大,容易引起对网络的冲击,造成语音不连续。因而要求把大的数据包分成多个小数据包发送
- 根据网络情况动态调整视频的质量和发送帧率,要求能同时满足拨号、宽带和局域网等各种情况,要求尽可能提高视频质量和帧率,但不能造成网络阻塞。
MPEG-4
G723.1
H323
RTP/RTCP
总体设计
可靠、高效、占用网络资源少
语音的通话原理:
首先分析语音传输的过程:
如图一是一个单向的语音传输过程。发话方首先由声卡采集语音,将语音转换为数据,存入内存中,再调用语音压缩算法将语音数据进行压缩,最后通过网卡将语音数据发送出去。接收方通过网卡接收到语音数据,首先由CPU采用解压缩算法将语音数据进行解压缩,然后通过声卡将数据转换为语音,通过耳机播放。通话双方可以进行以上流程就实现了双方同时通话。
视频的传输原理和语音基本相同。发送方首先由摄像头采集视频图像,然后用压缩算法将视频图像数据压缩,最后通过网卡将视频数据发送出去。接收方通过网卡接收到视频数据,首先通过解压算法对视频数据进行解压,然后通过绘图方式将图像绘制到屏幕上。
数据包的传输:
底层的数据都是按照实时传输协议的格式打包的,然后通过UDP发送出去。虽然TCP是可靠传输,但TCP必须建立连接,占有资源多且传输速度较慢,不利于多人之间同时通讯。UDP虽然是不可靠传输,但它是点对点传输的,不需要建立连接,同时向多人发送数据非常方便,占有网络资源比较少。而且语音、视频是允许部分丢包的,还有RTP协议的主要目的就是解决数据包的抖动延迟的。所以我们采用了UDP方式来进行数据包的收发。
呼叫原理:
RTP每次采用一个临时端口号,通过服务器把RTP的端口号和IP发送给接收方,然后对方也把他的RTPIP和端口也发送过来,双方就可以通过UDP直接向对方发送数据。如果是多人之间召开网络会议,则重复进行上述过程,每个终端都记录了一个其他终端IP的列表,每个数据包都要同时发送到多个终端。终端之间以及服务器之间的关系如下图所示:

多数据流同时传输的原理:
因为需要语音视频等多个数据流同时在网络上传输,我们使用一个UDP端口同时传输所有数据。所以必须采用一定的方法正确区分每个数据流。这里采用了数据通道的概念:我们为每个数据流设置一个ID,并在发送方为数据流建立一个逻辑发送通道,在接收方为数据流建立一个逻辑接收通道,这两个通道的通道ID均和数据流的ID相同;不同的数据流ID不能相同。每个数据包发送前都安照RTP协议格式打包,并被打上相应的通道ID号,然后通过UDP发送到接收方。接收方在收到数据包后根据数据包的通道ID号把数据包分拣到不同的接收通道。
抖动缓存:
由于IP网络是非可靠传输,数据包不一定是顺序到达的。若数据包不经过排序而直接播放是不可以的,因为我们不可能听懂一个被打乱的语音。抖动缓存就是为了解决这个问题的:先设置一个缓冲链表,每当收到数据包后,根据包序号顺序把数据包插入的适当的位置。读出时从队列头顺序读取即可。
系统划分为5个模块:
- 音频、视频的采集
语音采集就是在发话方将声音通过麦克风和声卡采集成语音数据。视频采集就是通过摄像头把用户的活动图像采集下来并转换为数据。
- 音频、视频的播放
语音的播放就是在接收方通过声卡和耳机把接收到的语音数据播放出来。视频播放就是在接收方把接收到的视频数据显示出来。
- 音频、视频的编码和解码
实现语音数据的压缩/解压缩的算法,在发话方压缩采集的数据,在接收方解压缩。音频采用G723.1,视频采用MPEG-4(Xvid)。
- 语音视频数据的收发
根据网络实时传输协议(P2P),在非可靠IP网络中适时传输语音和视频数据,处理相关的包抖动和包延迟,以及根据网络情况动态调整各设备的状态等。 |