[发明专利]用于tcp协议的基于能量阈值的语音缓冲丢包处理方法有效
申请号: | 201610243138.3 | 申请日: | 2016-04-19 |
公开(公告)号: | CN105743806B | 公开(公告)日: | 2019-02-26 |
发明(设计)人: | 刘鹏 | 申请(专利权)人: | 浙江万朋教育科技股份有限公司 |
主分类号: | H04L12/823 | 分类号: | H04L12/823;H04L12/863;H04L29/06;G10L25/78 |
代理公司: | 杭州君度专利代理事务所(特殊普通合伙) 33240 | 代理人: | 杜军 |
地址: | 310013 浙江省杭州市西*** | 国省代码: | 浙江;33 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 用于 tcp 协议 基于 能量 阈值 语音 缓冲 处理 方法 | ||
1.用于tcp协议的基于能量阈值的语音缓冲丢包处理方法,其特征在于包括如下步骤:
步骤1、针对采集发送端,具体的:
1-1、从麦克风采集音频数据帧frame;
1-2、计算音频数据帧frame的能量值frame_energy:先用vad算法判断音频数据帧frame是否含有人的语音;如果不含语音,则认为是不重要的数据,将该frame的能量值frame_energy设置为0,如果含有语音则通过能量计算公式计算该frame能量值frame_energy;
frame_energy=|sample[0]|+…+|sample[count-1]| 公式(1)
其中,count是自然数,为步骤1-1中所述音频数据帧frame一帧中含有的采样点的个数,|sample[count-1]|表示其中一个采样点的能量值;
1-3、直接获取当前发送队列中的语音缓冲长度buffer_ms1;
1-4、使用语音缓冲长度buffer_ms1和能量值frame_energy,通过丢包判定模块判断该帧是否需要丢掉,如果不需要丢掉,则将该frame和frame_energy填加到发送队列,如果需要丢掉,则将该帧丢掉;
1-5、发送线程每隔时间T定时检查发送队列中是否有数据,如果有数据,则从发送队列取一帧frame数据出来,将frame编码压缩后和frame_energy一起打包成音频数据包,并发送到服务器转发端;
所述的时间T是麦克风采集到的数据帧时长的一半;
步骤2、针对服务器转发端,具体的:
2-1、服务器转发端接收采集发送端发过来的音频数据包,
2-2、从接收到的音频数据包中解析出该帧能量frame_energy
2-3、取得当前转发队列中的语音缓冲长度buffer_ms2
2-4、使用buffer_ms2和frame_energy,通过丢包判定模块判断该音频数据包是否需要丢包,如果不需要丢包,则将该包填加到当前转发队列,如果需要丢包,则将该包丢掉;
2-5、转发线程每隔时长T1定时检查转发队列中是否有数据,如果有数据,则从转发队列取出一个从发送端接收到的音频数据包转发给接收播放端;
所述的时间T1与麦克风采集到的数据帧时长相等;
步骤3、针对接收播放端,具体的:
3-1、接收从服务器转发端转发过来的音频数据包
3-2、从接收到的音频数据包中解析出该帧能量frame_energy
3-3、取得当前播放队列中的语音缓冲长度buffer_ms3
3-4、使用buffer_ms3和frame_energy,通过丢包判定模块判断该音频数据包是否需要丢包,如果不需要丢包,则将该包填加到播放队列,如果需要丢包,则将该包丢掉;
3-5、播放线程持续时长T3定时检测是否需要向播放设备中添加音频数据包,如果需要添加,则先判断播放队列的缓冲状态isBuffering:
如果播放队列正在缓冲,即缓冲状态isBuffering==true,则判断当前播放队列中的语音缓冲长度buffer_ms3是否大于初始缓冲阈值min_ms;如果语音缓冲长度buffer_ms3大于等于初始缓冲阈值min_ms,则缓冲完成,将isBuffering设置成false,然后继续添加音频数据包;否则添加空数据包;
如果播放队列中缓冲状态isBuffering==false,且语音缓冲长度buffer_ms3大于0,则从播放队列中取出一帧frame进行解码,并将解码后的音频数据帧添加到播放,否则,播放空数据并设置isBuffering=true
所述的时间T3是麦克风采集到的数据帧时长的一半。
2.根据权利要求1所述的用于tcp协议的基于能量阈值的语音缓冲丢包处理方法,其特征在于所述的丢包判定模块的具体实现如下:
丢包判定模块利用tcp协议可靠传输的特点,通过丢掉相对不重要的语音数据包来控制语音数据的语音缓冲长度,平衡语音延迟和语音流畅度之间的关系;语音数据是否重要通过vad算法和语音帧的能量来判断,通过vad算法判定音频数据帧是否为语音数据,如果不是语音数据则将该音频数据帧的能量设置为0;否则对该音频数据帧进行能量计算,具体计算如下:
frame_energy=|sample[0]|+…+|sample[count-1]| 公式(1)
其中,count是自然数,为步骤1-1中所述的音频数据帧frame的一帧中含有的采样点的个数,|sample[count-1]|表示其中一个采样点的能量值;且该采样点的能量值大小范围为short型;该音频数据帧的时长为10毫秒的整数倍;
首先、建立语音缓冲时长和能量阈值的映射表energy_threshold_map[ms],其中ms为定义的语音缓冲时长大小,单位为毫秒;
所述的语音缓冲时长用自小到大的数组[an]表示,能量阈值用自小到大数组[bn],映射表energy_threshold_map[ms]体现了数组[an]与[bn]之间一一对应的关系,用来判断当前音频数据包是否需要丢掉;其中数组[an]与[bn]中的元素值的大小根据系统进行定义,或根据实际情况进行判断;
其次、判断当前音频数据帧是否需要丢掉,丢掉输出用isCanDelete表示:为了根据映射表energy_threshold_map[ms]判断是否需要丢掉当前的音频数据帧frame,需要知道当前语音缓冲长度buffer_ms和当前音频数据帧frame的能量值frame_energy;循环查找映射表项中的数组[an],判断每项是否满足丢包条件:buffer_ms>an并且frame_energy<bn,如果满足,则判定需要丢掉当前音频数据帧frame,设置isCanDelete=true,否则判定不能丢掉当前音频数据帧frame,设置isCanDelete=false;并将输出判定结果isCanDelete给调用者。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于浙江万朋教育科技股份有限公司,未经浙江万朋教育科技股份有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610243138.3/1.html,转载请声明来源钻瓜专利网。