社区
网络编程
帖子详情
做过网络电话的兄弟们请进 -【200分】
2ndboy
2002-10-16 01:32:12
由于语音数据压缩和网络传输的耗时,所以送到对方的每个包之间都有一小段时隙,所以回放的效果就变成断断续续的了,大家是怎么处理的?有什么办法能让送到对方的语音尽量连续流畅吗?
我现在采用的一个临时解决方法是收到 2,3 个包之后再把他们组合在一块儿一起播放,可是这样在一段稍长的连续语音过后还是会有一小段间断。
先谢谢各位了,有比较完美的解决方案的话一定重谢,分不成问题!!!
...全文
110
27
打赏
收藏
做过网络电话的兄弟们请进 -【200分】
由于语音数据压缩和网络传输的耗时,所以送到对方的每个包之间都有一小段时隙,所以回放的效果就变成断断续续的了,大家是怎么处理的?有什么办法能让送到对方的语音尽量连续流畅吗? 我现在采用的一个临时解决方法是收到 2,3 个包之后再把他们组合在一块儿一起播放,可是这样在一段稍长的连续语音过后还是会有一小段间断。 先谢谢各位了,有比较完美的解决方案的话一定重谢,分不成问题!!!
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
27 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
E
2002-10-19
打赏
举报
回复
我想你可以参考RTP(RFC1889和1890)。几乎所有的IP电话话音传送都是用RTP。
2ndboy
2002-10-19
打赏
举报
回复
谢谢 huhairui3(浩月):
我目前就是采用你说的多缓冲机制,不过我的采样缓冲区大小是随意定的,你上面说的那个数据“不要超过1/20秒一帧”是规定吗?意思是每个采样缓冲区只存放1/20秒的语音数据?
huhairui3
2002-10-19
打赏
举报
回复
在snsins(不再信仰,不再坚持)的基础上,音频采集采用双缓冲采集可以尽量降低音频压缩延时。
具体做法是定义两个PWAVEHDR结构,分别分配单独的缓冲区。然后在开始采集的地方执行
waveInPrepareHeader(m_hWaveIn, m_pWaveHdrIn1, sizeof(WAVEHDR));
waveInPrepareHeader(m_hWaveIn, m_pWaveHdrIn2, sizeof(WAVEHDR));
waveInAddBuffer(m_hWaveIn, m_pWaveHdrIn1, sizeof(WAVEHDR));
waveInAddBuffer(m_hWaveIn, m_pWaveHdrIn2, sizeof(WAVEHDR));
即两个缓冲区同时采集,
在WIM_DATA消息到来后执行:
waveInAddBuffer(pWaveCap->m_hWaveIn, (PWAVEHDR)msg.lParam, sizeof(WAVEHDR));让数据充满的缓冲区继续采集。
同样在音频播放时也采用双缓冲区播放。
另为提醒你一下,采集缓冲区的大小要合适,不要超过1/20秒一帧,否则压缩和传输延时 将大于采集时间声音会出现停顿。
jincai78
2002-10-19
打赏
举报
回复
缓冲区得大小一般为512byte就ok了,而且这样发送广播数据也没问题.
缓冲区的数目也无需过多,3个就ok了。
一边录音一边发送,当接收端的第二个缓冲区满后就可以播放了。
我这样试过,声音很流畅,可以唱歌的。
pcm的格式可以设置的低一点,以便减少数据.
glhorse
2002-10-18
打赏
举报
回复
xuexi
snsins
2002-10-18
打赏
举报
回复
建一个缓冲区,把收到的包先缓冲,当缓冲区满了之后再播放,这样边缓冲边播放,
不过估计解决了流畅问题会有延迟,
2ndboy
2002-10-17
打赏
举报
回复
to qrlvls(怜松):
我觉得这跟网络传输实际上已经没什么关系了,因为从理论上分析的话不管怎么样传送每两个包之间也总会有个很小的时隙,现在就是看如何能消除它的影响。
qrlvls
2002-10-17
打赏
举报
回复
加入QoS控制试试呢
ttzzgg_80713
2002-10-17
打赏
举报
回复
关注一下先
2ndboy
2002-10-17
打赏
举报
回复
to everandforever(Forever):
你所说的“一种很怪的断续情况”是怎么样的?是不是以固定频率断续?如果是的话我觉得就是每个语音数据包之间的那一小段时隙造成的。
DirectSound 还没用过,有时间就试一下。
2ndboy
2002-10-17
打赏
举报
回复
to VisualStudio(嗷~~~):
我的数据报是 80 字节,你说的“使用多缓冲”是指接收缓冲还是播放缓冲?那个 SpeakFreely 使用了“预读取”之后就没有断续现象了吗?
everandforever
2002-10-17
打赏
举报
回复
我当时用WAVEOUT...播放语音包有一种很怪的断续情况, 后来换用 DIRECT SOUND输出就没有这种情况了.
everandforever
2002-10-17
打赏
举报
回复
to everandforever(Forever):
从理论上讲就是每个包之间都有延时啊
__________________
录音和放音的速度是一样的, 包之间虽然有延时, 但延时应该小于等于前一个包里的数据的播放时间, 如果大于的话, 就会断续,那就是说最终会丢包/阻塞.
VisualStudio
2002-10-17
打赏
举报
回复
to 2ndboy(丢丢)
或者你的数据报过大,或者和你使用多缓冲有关,不知道你呀所数据包没有?
2ndboy
2002-10-17
打赏
举报
回复
to everandforever(Forever):
从理论上讲就是每个包之间都有延时啊
to chen_jun_fen(bitwise):
我现在就是使用多个缓冲
to VisualStudio(嗷~~~):
我试了一下你提到的方法,大约播放 30 秒平滑的声音之后还是会有一个小停顿。
chen_jun_fen
2002-10-17
打赏
举报
回复
采用多个缓冲
everandforever
2002-10-16
打赏
举报
回复
ACM 音频压缩管理器。一般来说,不会有这种情况。 虽然有延时,但是每个包的延时应该是一样的,如果每个包之间都有延时,那岂不是延时越来越长?
dy_paradise
2002-10-16
打赏
举报
回复
向高手学习~~~ 学习~~` 再学习~~
dy_paradise
2002-10-16
打赏
举报
回复
学习~~~ 学习~~~
2ndboy
2002-10-16
打赏
举报
回复
我刚看了
http://www.csdn.net/Expert/TopicView1.asp?id=1050963
这个帖子,不过好象讨论了半天最后无疾而终了。
谢谢 yaotang(baobao),不过好象确实跟我的情况不一样。
to smhpnuaa(天将降大任于斯人也!):
我好象从那三个字母里看不出什么解决方法,能麻烦你说详细一点吗?
加载更多回复(7)
一个80年小子的创业道理,和所有准备创业或者正在创业的
兄弟
们共享
一个80年小子的创业道理,和所有准备创业或者正在创业的
兄弟
们共享 作者:我的礼物 我是一个离开家乡在外地打拼的年轻人。回头看看过去的几年,从迷茫的小子,到对未来抱有信心的创业者,一步步走来,除了一直伴随...
畅唐网络C++开发凉经 4.2--25min 面筋攒人品
昨天招银网络科技的春招一面,整体30
分
钟左右,前面还行,后面有点紧张快排编程题答的稀烂啊啊啊,许愿能。本来以为是纯笔试,结果还要面试自我介绍问了下项目,怎么应对的高并发,怎么解决的超卖锁知道吗,讲讲你知...
战斗在软件行业一线
兄弟
们,您们的年终奖金发了吗,发了多少?-----年终奖知多少。
年终奖成了这时候员工们最关心的话题。有没有年终奖,年终奖的多少,成了判断企业发展兴衰、自身工作能力、人才留走与否的风向标。对企业老板来说,无疑想给为自己带来最大利润的员工以最大奖励,但又要照顾到其他...
一个80年小子的创业道理,和
兄弟
们共享
回头看看过去的几年,从迷茫的小子,到对未来抱有信心的创业者,一步步走来,除了一直伴随的运气,觉得还有一些关键的东西,可以写出来,和每一个创业的
兄弟
们
分
享, 特别是那些没有风险投资、没有大量资金支持、...
最新42道计算机网络面试题!-- 附答案
计算机网络、计算机操作系统这两个“
兄弟
”是所有开发岗位都需要“结拜”的,不管你是 Java、C++还是测试。对于后端开发的童鞋来说,计算机网络的重要性不亚于语言基础,毕竟平时开发经常会和网络打交道,比如:抓个...
网络编程
18,356
社区成员
64,214
社区内容
发帖
与我相关
我的任务
网络编程
VC/MFC 网络编程
复制链接
扫一扫
分享
社区描述
VC/MFC 网络编程
c++
c语言
开发语言
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章