hur.cn - 华软网

 热门搜索

  • 授权方式: 商业源码
  • 支付金币: 0个
  • 金币充值: 点击查看
  • 下载方法: 点击查看
  • 源码大小: 15700 KB
  • 评分等级: ★★★★★
  • 源码类别: 商业源码
  • 运行环境: WinXP/NT/Vista/Win7
  • 整理录入: 昕晨
  • 更新时间: 2010/8/27 15:09:56

源码介绍    


NetTalkv1.1
NetTalk是一个适用于局域网和因特网的可视电话软件

一. 开发环境

Windows2000 Server & Visual C++6.0 & SDK
+自开发的CWndX类库(相当于简化的MFC涉及窗口的部分)

二. 支持环境

Windows98/ME/2000/XP

三. 所涉及协议和标准

网络传输采用UDP协议,音频压缩采用G.729标准,视频压缩采用H.263标准

四. 性能参数

以音频帧为基准,每帧音频数据有240个采样点,时间为240*1000/8000=30ms,8000为音频的采样率。
数据接收端队列缓冲延迟:30*3=90ms
数据发送端录音延迟:30ms
数据压缩解压耗时:<40ms
网络延迟:<100ms(我想校网情况应该不错)
总延迟:<260ms
根据VOIP标准,总延迟<300ms是人可以接受的,以上计算是保守的,实际情况可能会好得多。
  
带宽需求  
数据类型 带宽需求(byte/sec)  带宽总需求(Kbyte/sec)
音频 1000 ~9.2
视频 ~8000(会随图象质量的变化而有较大变化) 
帧头 ~200 

NetTalk软件结构及工作流程
一.概述:
NetTalk是可视电话软件,可以实现远距离的面对面沟通。

二.组成部分

分网络传输部分、音频输入、音频输出、视频输入、视频输出、音频视频压缩、音频波形显示、界面。共创建个线程,音频输入线程、音频输出线程(这两个有WINAPI隐式创建)、音频视频压缩传送线程和主线程。因为音频的采样率比视频采样率高得多,这里的音频的采样率为8000Hz而视频仅为20左右,所以从宏观来看,音频是连续的,而视频是非连续的,这也就是无须为视频输入输出创建独立线程的原因。

网络传输:基于UDP协议,有两组SOCKET,一组用于指令发送和接受(要求可靠),另一组负责音频视频数据的传送和接受(不保证可靠性)。

音频输入:通过waveIn函数族完成连续的录音

音频输出:通过waveOut函数族完成连续的放音

视频输入:通过cap函数族对视频进行捕获

视频输出:通过cap函数族实现视频输出

音频视频压缩:音频压缩采用G.729标准(8:1,1kbps),视频压缩采用H.263+标准

音频波形显示:将PCM音频数据以波形动态地显示出来

界面:与用户交互

三.工作流程:
1. 软件一般自动运行(当操作系统启动时运行),与服务器通讯,向服务器传送登录信息.   注:目前并没有服务器介入,而直接是客户与客户的通讯

2. 进入监听状态,等候呼叫

3. 呼叫,可以从地址簿呼叫,也可直接打入IP呼叫
     
4. 与被叫方取得联系后,等待发送方回应,当超过一定时间或由用户终止时,取消呼叫

5. 被叫方接受呼叫请求时,开始实时视频通讯,直到任意一方中断对话或非人为中断
   
    如示意图所示:
 
(图1,数据发送示意)
数据接收部分与此大致相反,只是加入了帧缓冲、排序、抛弃等机制。更详细的流程见下图
 
以上仅为软件结构及流程的非详细说明,很多细节并未涉及

AVIOMgr模块
AVIOMgr是一个可视通信的通用模块,在NetTalk中是一个独立的模块,对它进行一些简单的处理,可以做成静态库、动态库或ActiveX控件,以用于其他软件。
    AVIOMgr封装了包括:视频采集、视频压缩、音频采集、音频压缩、音频播放、数据传输、命令控制等一系列与可视通讯有关的功能。一切对AVIOMgr的控制和AVIOMgr的信息反馈仅通过几个简单的消息和几个简单的函数调用就能完成。
VFW函数族中某些函数的疑惑:
   capDriverConnect
   capDriverDisconnect
   这两个函数的调用必须在同一个线程内,而且似乎还必须同在主线程内,否则就会造成capDriverDisconnect的调用失败,具体是何原因还不太清楚。


疑惑

waveIn函数族中某些函数的疑惑:
   如果用回调机制,那么很可能在结束录音时(调用waveInReset的时候)出现死锁,导致程序无法正常退出,MSDN中在对waveInProc的说明中提到这一点,并列出了一系列不能调用的函数,可我并没有调用它列举的函数,却依然在某些机子上出现死锁现象,不解(后改用线程通知机制)


对Socket(UDP)编程的一些看法:
    sendto\rcevfrom是阻塞型的函数,通过WSASelect 等函数的调用,可以把这两个函数变成非阻塞的(异步),这需要创建用来接收消息的窗口,在调用WSASelect 的时候,隐含地创建了一个线程。而我却习惯于用阻塞型的,创建一个线程,其中有一个循环,不断调用 rcevfrom。有些书上说异步的效率要高一些,当我觉得我这种方法的效率不会低。以前做过的第三只眼远程控制软件和NetTalk 均采用这种结构,并未发现任何性能上的不足。

new的失败
    当一个线程经常反复调用new/delete或者用new分配大块内存时,需要特别注意new的运行结果,不要总以为NEW是成功的,有时候也会失败,在NetTalk中就发现了这种情况。(已解决)

VCM函数族中某些函数的疑惑:
ICDecompress函数在某些情况下(具体很难描述)会失败,在MSDEV中出现0xc0000005 access violation的debug错误,不解。后来仅调整了几个函数的调用顺序就解决了。


 

 



上一源码:宾馆酒店管理系统
下一源码:商品采购管理系统vc

下载地址    

  • 可视电话软件源码

下载说明

  • 为防止盗链,本站资源部分有解压密码,解压密码点击查看
  • 如果您发现该资源不能下载,请通知管理员;
  • 为了保证您快速的下载,推荐使用迅雷或网际快车等专业工具下载;
  • 为确保所下资源能正常使用,请使用WinRAR v3.80或以上版本解压本站资源;
  • 本站所收集的下载资源均来源于网络,如果有侵犯您的版权,请来信告知,我们会马上处理;
  • 本站所提供的资源仅供学习和研究,请勿用于商业用途,请在下载后24小时内删除;
  • 本站不承担用户因使用这些下载资源对自己和他人造成任何形式的损失或伤害!