- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
用C#编写网络电话
最好用的网络电话:用C#编写网络电话
疯狂代码 http://CrazyC/ ĵ http:/CrazyC/DotNet/Article48900.html
下载地址:/2008_10/1224897395_ddvip_1879.zip
思路:要想做个网络电话基本遵循以下步骤
1、方实时录音把模拟信号转换成数字信号;
2、把声音实时压缩;
3、通过网络协议把压缩后数据传输给接收方;
4、接收方解压缩接受到音频数据;
5、实时把接收到数字信号转换成模拟信号并播放出来
下面我们来看看每步面临挑战及其解决方案
1、第步实时录音DirectxSound有录音方面API托管类分别是
Microsoft.DirectX.DirectSound.CaptureDevicesCollectionMicrosoft.DirectX.DirectSound.Capture和
Microsoft.DirectX.DirectSound.CaptureBufferCaptureDevicesCollection用来枚举本机可用录音设备
Capture则表示个录音设备CaptureBuffer是用来存放录音数据缓冲区我们开始录音后音频数据会不断写入到环
形流式缓冲区然后我们定期从缓冲区中把录音数据取出来返回给上层应用层就可以了有关环形流式缓冲区可以
看参考链接部分
2、声音压缩是个很难抉择步骤默认DirectSound只能播放和录制PCM格式(WAV)音频数据但这种声音格
式特别大常用声音压缩格式有h.7231,gsm,amr,h.711等等各种压缩算法都有自己码率和适用范围我们做是互联
网语音电话不考虑慢速网络和无线连接下情况也不用考虑终端设备CPU能不能支持我们选用压缩算法我们做语
音电话双方都是PC机应该什么解压缩算法都不会引起什么性能上问题所以只要网络快些选择哪个压缩算法都无
所谓了网上有h.711压缩算法我打算就采用这个他码率是64Kbps比PCM1.544Mbps和2.048Mbps要小多然后
我们进行了音频数据压缩后还可以对字节流进行GZIP或者7ZIP压缩前者用SharpZip后者7zip官方有c#使用代
码大家可以测试下这两个算法性能后做出适合自己决定有关各种压缩格式特性可以参考我做PPT及提供参考链
接
3、网络电话注重实时性而把声音从网络上传输就要走IP网络而IP网络不是个等时系统所以我们就要尽量
去模拟实时语音传输提到实时肯定UDP比TCP要实时TCP要保证传输可靠性有序性等而专门用于实时传输有个
应用层协议是RTP协议这个协议般就是建立在UDP基础上它在每个包头提供了些序列号、时间戳等信息但
UDP本身并不会使用这些信息这时候就有个RTCP协议来用这些信息进行流量控制和拥塞控制比如说RTCP检测
到网络拥挤会告诉发送方变换种低码率语音压缩算法来传输数据这些大多都需要自己去实现本文源码没有去实
现这些有关RTP和RTCP可以参考相关资料或者我做PPT
4、每个压缩算法都有相应解压缩算法呵呵
5、播放声音肯定也需要用到DS,也需要用到StreamBuffer大致流程如下
1)创建个声音设备Microsoft.DirectX.DirectSound.Device dev =
Microsoft.DirectX.DirectSound.Device;
2)设置协调级别dev.SetCooperativeLevel(this,
Microsoft.DirectX.DirectSound.CooperativeLevel.Normal);
3)创建声音格式、缓冲区描述、及辅助缓冲区;
4)给辅助缓冲区设定通知;
5)用声音数据填满缓冲区;
6)播放缓冲区声音数据播放到定通知点通知填充线程填充新声音数据;
7)循环第6步直到没有新声音数据填充到缓冲区
具体过程参考PPT或者具体代码
版权声明
附件源代码里CaptureSoundSoundPlayer和CircularBuffer类反编译自随意桌面代码(注释是我加)版权归
作者所有
PPT里图片和些文字选自个叫做ch11-DxSoundInput2.ppt文件源链接已丢失还有些选择个叫做“SIP的
穿越NAT.ppt”文件网上可以搜索到版权均归原作者所有源
您可能关注的文档
最近下载
- 《七巧板》完整版教学课件.pptx VIP
- 定时交通灯控制设计.pdf VIP
- 浙大中控DCS系统操作规程.doc VIP
- 学校家长安全责任书.docx VIP
- 北师大版小学数学六年级上册第二单元 分数混合运算 基础测试题.doc VIP
- 2025至2030中国食用油行业运营态势与投资前景调查研究报告.docx VIP
- 10.3 合同的变更、转让、解除和终止(政策与法律法规 第7版).pptx VIP
- 儿童肺炎支原体肺炎诊疗指南2025年版解读PPT课件.pptx VIP
- 深圳初一数学下学期期中模拟测试题(带答案).pdf VIP
- 2023年春国开(甘肃)《个人理财》形考任务1-4题库.docx
文档评论(0)