PC到PC的IP电话实现
|
|||||||||||||||||
|
|||||||||||||||||
|
正文: | ||
Internet是当今应用最广泛、发展最迅速的通信网络。这是基于数据包方式的数据分组交换方式,用户数据被封装在分组中,而分组还包含一些附加信息用于网络中的路由选择、差错纠正、流量控制等。数据包各自独立地在网络中传递,由于网络状况的变化和经历路径的不同,数据包到达目的地的时间是不固定的、非实时的。故此,一般来说互联网较适用于数据的传输。但是,我们知道视频、音频信号经过模数转换后也可以作为数据在互联网上传递,因此将语音采样,量化变为数字信号,然后打包从网络上传输,双方也可以进行通话,这就是IP电话。 一 软件设计 实现此软件的重点和难点如下: 图一 语音传输流程 多个用户之间的互相连接通常可以采用两种方法。第一种方法是设置一个服务器,所有的客户机都连接到服务器上,通过服务器互相连接。这种方法的好处是软件控制比较简单,用户的连接也比较方便,用户只需要知道服务器的IP地址就行了。但缺点也很明显,它较适合于公司的商业性质的软件,普通人员没有资金去专门购买和设置一个服务器,也没有时间和精力去管理和维护服务器。第二种方法是不要服务器,每两个用户之间都可以互相连接,只要知道对方的IP地址就可以去连接对方,同时别人只要知道你的IP地址,也可以与你连接,即每台计算机都既是服务器,又是客户机。采用这种方法的优缺点与第一种方法可以说是正好相反,不再赘述。也有某些比较完善的软件对这两种方法都予以采用,用户可以自行选择其中一种方法与其它用户进行连接。 图二 软件的整体结构和数据流程 至此我们已经搭起了整个软件的基本框架,对于软件的数据流程也已分析得比较透彻,下一步就是具体的实现了。 二 软件实现 下面具体分析软件实现中的一些主要难点。 1.语音的采集和播放。 图三 录音流程 以录音为例,关键的录音函数和顺序如下: 在录音和放音的程序处理中,要特别注意两点。一个是分配的内存的大小和数量。内存的大小与IP电话中语音的连续性和延时性有直接关系,内存越大,则语音的连续性越好,但延时性越差,反之,内存越小,则语音的延时性越小,但连续性越差,所以要权衡利弊,取一个折衷量,这就需要反复实验。根据作者的实验,大约每个内存块录音的时间长度取0.1秒比较合适,具体的大小与采用的语音格式有关。内存的数量则与内存的大小和对每个内存的录音数据的处理时间长短有关,一定要保证在录音过程中,录音设备至少有一块内存可供录音,也就是说录满的内存要及时返回,使得循环能够顺利进行。由此可知,内存大,分配的数量就可以少,对每个内存的录音数据的处理时间短,分配的数量就可以少,反之,分配的数量就要多。当然可以分配足够多的数量,但是太多则耗费资源,降低了程序的效率。根据作者的实验,大约所有的内存块录音的时间长度和有0.5秒就足够了,也就是说,如果每个内存块录音时间长度为0.1秒,则可以分配5个内存块。 程序中还有特别重要的一点是语音设备的Window消息的相应,通过语音设备发送的一系列消息,如MM_WIN_OPEN录音设备打开消息,MM_WIM_CLOSE录音设备关闭消息等,我们可以响应语音设备的打开,关闭,开始录音和放音,停止录音和放音,录音时一个内存块录满,放音时一个内存块放完等各种事件,来进行相关的处理。需要注意的是这些消息在VC的ClassWizard类工具的消息序列中是看不到的,需要手工编辑消息响应宏和代码。 2.语音数据的网络传输 建立网络的连接主要有如下三个步骤,一是在程序中加入Windows Sockets支持,二是以CSocket为基类构造两个新类CServerSocket和CMsgSocket。CServerSocket用来接收请求连接的申请,CMsgSocket用来传输数据。三是建立服务器方和客户机方的连接。下表显示了在服务器与客户机之间建立通信所需做的工作的顺序,具体的函数参数可查阅连机文档。服务器方首先构造一个CServerSocket类的对象,用来接收请求连接的申请,调用此对象的Listen成员函数,表示处于等待连接状态,等待客户机方发出申请连接(Connect)的消息,当接收到此消息后,CServerSocket类的OnAccept消息响应函数即会响应,此时再构造一个CMsgSocket类的对象(用来传输数据),然后调用CServerSocket类的Accept成员函数表示接受连接申请,若此函数返回真值,则表示连接成功。客户机方则只需构造一个CMsgSocket类的对象,调用此对象的Connect成员函数,申请连接即可。 按上述顺序建立连接后,服务器方和客户机方都调用CMsgSocket对象的Send函数来发送数据,当接收到数据时,CMsgSocket类的OnReceive消息响应函数即会响应,再调用Receive函数来接收数据,这样服务器方和客户机方就可以进行数据通信了。 3.对单工声卡的支持 三 软件界面和使用方法 软件界面如图四,界面上方的IP地址栏可输入欲连接的计算机的IP地址,单击右边的代表连接含义的图标即可与之连接,连通或未连通在界面上方的文本框内都有提示。用户也可以按连接按纽旁边的断开按纽断开与任意已连通的对象的网络连接。 图四 软件界面 实践证明,本软件在实际运行中稳定可靠,在局域网上音质和延迟都基本上达到了电话的效果。 四 软件的不足和进一步工作 本软件从总体上已经达到了IP电话的基本要求,但是由于作者的时间和条件有限,软件也存在一些不足和需要进一步完善的地方。 作者会员名:ruan_bangqiu |
PC到PC的IP电话实现相关推荐
- PC和服务器的IP地址信息DNS,PC和服务器的IP地址信息DNS
PC和服务器的IP地址信息DNS 内容精选 换一换 网站的访问与云服务器的网络配置.端口通信.防火墙配置.安全组配置等多个环节相关联.任意一个环节出现问题,都会导致网站无法访问.本节操作介绍网站无法访 ...
- PC端移动端IP查询
一.PC端 外网ip: www.ip.cn www.ipip.net what is my ip address.com www.ip138.com 内网ip: 方法1:Windows+R 调出运行, ...
- 将ip电话注册到服务器上,ip电话怎么安装设置 ip电话安装设置方法文字详解【图文】...
随着互联网时代的到来,我们的地球变成了一个"村庄",跨越了时间和空间的界限,可以不夸张的说,一个位于"天涯",另一个身在"海角"都能相互通话 ...
- IP电话基本原理详细解析
一.IP电话基本原理: 通过语音压缩算法对语音信号进行压缩编码处理,然后把这些语音数据按TCP/IP标准进行打包,经过网络把数据包发送到接收地:接收端把这些语音数据包串起来,经过解码解压缩处理后恢复成 ...
- 基于智能移动设备的IP电话软件的设计与实现
摘 要 介绍了以Pocket PC2003为操作系统,带WiFi功能的智能移动设备平台下IP电话软件的设计方案与实现方法.实践证明,本软件具有实时性好.移植性强等优点. 关键字 智能移动设 ...
- IP电话与普通电话的区别
一.IP电话的含义 IP(InternetProtocoi)电话始于1995年,所谓IP电话,是在IP网上通过TCP/IP协议实时传送语音信息的应用.最初的IP电话技术,只是计算机对计算机的语音传输技 ...
- 基于SIP协议的IP电话系统设计与实现
网络IP电话不仅具有成本低廉.网络资源利用率高等诸多优点,而且还可以进一步集成多媒体信息(包括语音.图像.数据等),以实现交互式的实时通信等,具有很大的发展潜力,且有逐渐取代传统PSTN电话的趋势,成 ...
- CISCO PT IP电话7960 LAB
Cisco PT模拟器上可以进行简单的IP电话模拟实验,但是现在实际的使用情况现在一般不会使用这种方法进行配置了,只做了解. 需求: 左边只有IP电话,网段要求172.16.1.0/24. 右边有办公 ...
- Cisco IP电话软件的WINRTP
纵览Overview of this Document 介绍Introduction 更新What's New 功能Features 组件及安装Components and Installation ...
最新文章
- mysql 打印_故障分析 | MySQL:5.6大事务show engine innodb status故障一例
- 使用阿里云Python SDK管理ECS安全组
- 同一Word文档不同尺寸(纸张)页面的混排方法
- 用32定时器让电机缓慢转动_实验三 步进电机原理及应用
- 【讨论】测试工程师能否作为一份终生职业?30岁+怎么办?
- 高16位低16位什么意思_为什么模拟量模块16位要比13位转换精度高,高多少?
- 计算机组成原理疑难知识点
- NMAKE makefile内容和功能
- Windows/Mac上免费好用的压缩软件推荐(持续更新)
- 最简单的基于FFMPEG的封装格式转换器(致敬雷霄骅)
- Android 开发小TIPS
- 2019年电子设计国赛综合测评回顾
- html可以使用文本修饰标记定义,HTML标记功能详述-网站首页.ppt
- 密码学写作论文排版操作手册,latex模板cryptocode
- 五种网站Web服务器技术和网页设计技术
- 关于 Google play 上架的缺失 64 位版本问题
- Java实现生成数据库表结构文档(生成工具screw的使用)
- java ieee_Java IEEE754 工具类
- 基于空间平滑MUSIC算法的相干信号DOA估计(1)
- 七彩cms云转码_七彩CMS视频转码 2019云转码彻底开源系统版本号