P2P语音研究.ppt

  1. 1、本文档共33页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
P2P语音研究

P2P语音研究 2008-07-29 胡浩 语音聊天概述 RTP/RTCP(一) 网络电话是实时性很强的应用 ,需要将数据及时交付。IP网络不是等时系统 ,数据可以重复、 延迟或不按顺序到达。要通过 IP 互联网有效地传输音频、 视频等实时数据 ,需要额外的协议支持。 常见的用于 IP 网络上进行多媒体数据传输的协议主要有: (1) 实时传输协议与实时传输控制协议 RTP/ RTCP,RTP是一种提供端对端传输服务的实时传输协议 ,用来支持在单目标广播和多目标广播网络服务中传输实时数据 ,而实时数据的传输则由 RTCP协议监视和控制。 (2) RTP 本身不具有传输数据的能力 ,他必须与底层协议结合起来支持实时数据传输。在典型应用中 RTP使用 UDP传输数据 ,但也可工作在 ATM 或者 TCP 之上。如果底层网络支持 , RTP还支持多路传输。应用UDP进行数据传输时 ,容易发生数据包的丢失或者数据包到达顺序的混乱。RTP协议为数据包提供了用于保证传输质量的信息。 RTP/RTCP(二) RTP 本身只保证实时数据的传输 ,并不能为按顺序传送数据包提供可靠的传送机制 ,也不提供流量控制或拥塞控制 ,他依靠 RTCP提供这些服务。 实时传输控制协议 RTCP(Real time Transport Con2t rol Protocol)在实时通信过程中提供流量控制和拥塞控制服务 ,为通信质量提供保证。 RTP/ RTCP协议为网络上的实时通信提供了基本的方法和标准 ,但他本身并不能保证传输的实时性 ,这要靠底层网络保证;其次 ,虽然 RTP 提供了序号信息 ,但其协议本身并不提供任何机制保证通信过程中不出现丢包、 乱序等不可靠的情况 ,当需要可靠性时 ,必须由底层协议或应用程序提供;最后 ,虽然 RTP 提供了时间戳 ,但如何利用时间戳保证媒体数据按正确的速率回放 ,这需要应用程序去实现。 建立声音设备 Microsoft.DirectX.DirectSound.Device dev = new Microsoft.DirectX.DirectSound.Device(); 在OnCreate函数中 LPDIRECTSOUND pDS; HRESULT result; result = DirectSoundCreate( NULL, pDS, NULL ); 第一个参数是硬件设备,NULL表示使用默认的设备, 第二个参数是远程指针LPDIRECTSOUND的地址,也就是创造的DirectSound对象放置的地址, 第三个参数必须为NULL,暂时没有用。 当没有相应的设备或设备在别的程序的控制下不能响应你的呼叫时,函数返回出错,这时,如果你的程序继续工作,所有和DirectSound对象相关的操作都将不可进行! Streaming Buffer   Streaming Buffer提供了两个指针:Play Cursor(回放游标)和Write Cursor(写入游标),它们的值只是相对于缓冲区开头的偏移量而非绝对的内存地址。其中Play Cursor总是指向下一个被输出的数据字节,而Write Cursor指向的地址则指明从哪个地方开始可以安全地写入新的音频数据而不影响回放。按回放音频数据的顺序来看,Write Cursor总是在Play Cursor之前,并且它们间保持着一定的间距,而这个间距会根据不同的系统状况而有所不同,实验表明这个间距大概是100~200字节左右。 Streaming Buffer 当开始对缓冲区中的音频数据进行循环模式回放时,总是在Play Cursor所指的地方开始。回放后Play Cursor和Write Cursor会保持它们的间距等速度前移,并且Play Cursor总是指向下一个被输出的数据字节。当回放到达缓冲区的结尾处时,Play Cursor将重新指向缓冲区的开头,如此循环下去。而当程序停止对Streaming Buffer中的音频数据进行回放时,Play Cursor则不再移动,并停留在下一个被输出的数据字节处,直到重新回放才会继续前移。另外,在Play Cursor和Write Cursor之间的区域被认为是即将要进行回放的数据,所以不能够对其做更新。 建立缓冲区 BufferDescription desc = new BufferDescription(format); //缓冲区具有控制音量的能力; desc.ControlVolume = true; //缓冲区具有控制位置的能力。 desc.ControlPositi

文档评论(0)

sd44055 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档