实时语音通信的实现

引言

本人虽已学习VC++一年半载,仍觉捉襟见肘,好在有VCKBASE的帮忙,确实学 到了不少东西,www.vckbase.com也成了我每次上民网必到之处(阁下有所不知, 鄙人接受最为严格的管理,上民网是要申请的)。近日在做一个通信 方面的程序 ,实时的语音和视频通信当然是大家所喜欢的。本文将向您展示局域网环境下实 时语音通信的的一个解决方案(视频这一块正在做,估计很快就能出炉),Winxp环 境下测试效果良好,并且具有网络 拥塞处理机制,您不妨一看。

本文以第26期 栾义明 先生的《基于API的录音机程序》为基础的,在此深表 感谢。雷同之处将不再赘述,主要做了以下发展:

(1) 利用多线程机制,实现录音、网络传输、放音同时进行。

(2) 网 络壅塞处理,保证数据不丢失。

例子程序运行画面:

下面且看我细细道来:

(一)首先定义了一个声音数据“块”

struct CAudioData
{
  PBYTE lpdata; //指向语音数据,注意这里内存区域是动态申请释放的
  DWORD dwLength;//语音数据长度
}
接下来申明两个循环队列和相关指针。

//InBlocks,OutBlocks非别为两个常数
CAudioData m_AudioDataIn[InBlocks],m_AudioDataOut[OutBlocks];
int  nAudioIn, nSend, //录入、发送指针
   nAudioOut, nReceive;//接收、播放指针
// 对于录音和放音都 存在和网络的同步问题,主要靠这些指针进行协调

时间: 2025-01-23 13:56:57

实时语音通信的实现的相关文章

一种基于局域网的点对点语音通信

引言 随着计算机网络的日益普及,人们通过网络进行交流显得越来越重要,于是出现了一系列语音通信的软件,比如NetMeeting.IPPhone.MediaRing以及VoxPhone等等,但这些软件都功能完善.相对独立,不利于集成到自己开发的软件中,有时我们也希望将这种语音通信功能集成到自己的软件中,尤其当一个单位的局域网用户分散在不同的房间时.本文给出一种灵活.简单的实现方法,采用基于对话框的方式编程,硬件上只需要一块双DMA通道的声卡(目前的声卡大多支持双DMA通道)和一支耳麦,其余全部由软件

环信支持Web实时语音吗?

问题描述 有没有提供web端的SDK,可以用来跟移动端streaming通信的? 解决方案 实时语音支持android及ios端.web不支持实时语音

DirectX编程:C#中利用Socket实现网络语音通信[初级版本]

 [声明:本篇来源:http://www.cnblogs.com/stg609/archive/2008/11/19/1334544.html 作者:stg609]       现在时下的VOIP软件很多,比较有名的就是Skype,还有其它诸如UUcall. 快门等等.它们提供的功能除了网络上的语音通话外,还可以与固定电话.手机等通话.在本篇中主要介绍利用C#实现语音通信的基本方法.但是目前只实现了网 络上语音传输的基本功能,而且比较粗糙,没有采用什么算法来优化,所以大家千万不要期望过高.我写这

声网Agora.io全球发布手游实时语音AMG Voice

3月9日,声网Agora.io全球发布手游实时语音AMG Voice(Agora Mobile Gaming Voice).声网首席音频专家.手游语音AMG Voice产品负责人陈若非博士重点介绍了声网手游实时语音的产品和技术特性,并就手游实时语音在游戏行业中的应用进行了详细介绍. 声网此次发布手游实时语音AMG Voice SDK,开发者可以直接通过API接入,几行代码,快速在手游中嵌入实时语音功能. "最近我们在手游中嵌入式实时语音已经成为了标配,玩家玩游戏的同时还可以深度实时交流.然而,手

VoWi-Fi能给LTE时代的语音通信体验带来什么?

互联网时代用户对业务体验的要求很高,包括对语音业务.这从某种程度上可以解释相对于全球LTE的建设高潮,VoLTE业务的发展却相对平缓得多.作为第一个真正意义上的电信级IP公共语音业务,VoLTE对运营商的网络提出了很高的要求.相对于一些技术问题,LTE的网络覆盖覆盖问题显得比较突出.从一些已经商用的VoLTE市场来看,一开始也不是全面铺开,而是根据各个区域LTE网络部署的实际情况来逐步发展的.在这些市场中,虽然LTE的覆盖和切换到3G网络的功能已经比较完善,但是仍然存在一些区域(比如室内)使得V

web端支持实时语音和发送语音消息吗?

问题描述 web端支持实时语音和发送语音消息吗?就像手机上的那种. 解决方案 支持发送语音文件

实时语音Bug

问题描述 +(void)callSessionStatusChanged:(EMCallSession *)callSession changeReason:(EMCallStatusChangedReason)reason error:(EMError *)error 在实时语音页面会调用两次,model两次,同时以下判断条件永远为true(只有读没有写),真蛋疼  BOOL isShowPicker = [[[NSUserDefaults standardUserDefaults] obje

iOS 如何自定义实时语音?

问题描述 解决方案 请说明详细些.解决方案二:点击图片开始实时语音通话解决方案三:就是文件流 敏创解决方案四:那这个怎么搞 ?使用环信的

iOS 实时语音和实时视频第一次连接不上

问题描述 您好!依赖easeui做的,在登录后,用手机A向手机B发送实时语音或者实时视频,不管发送多少次,一直就连接不上,但是,只要是手机A向手机B发送实时语音或者实时视频发送一次,虽然连接不上,反过来,用手机B向手机A发送,就可以连接上了,再只要是不重新登录,互相就一直可以连接上,这是什么原因?重新登录后又这样 解决方案 l- (void)callControllerClose:(NSNotification *)notification{    [[EaseMob sharedInstanc