Freeswitch VAD改造支持as

简介: Freeswitch VAD改造支持as

当用户说话才开始录音,当用户停止说话停止录音.

uuid_record和record_session


1.使用条件:


设置录音时间长度在1-50s之间

就启动支持asr:当用户说话才开始录音,当用户停止说话停止录音.

假如没设置录音时间长度,或者时间长度超过50s,支持asr功能不起效.

uuid_record和record_session 行为跟修改之前一样.


2.设置参数:


2.1 可以设置 RECORD_SILENCE_THRESHOLD  通道变量


参数是判断用户说话开始的能量,可以设置<3000,比如设置RECORD_SILENCE_THRESHOLD=1000

没设置就是使用系统里面默认的能量=3000.一般情况下设置=1000

 

可以设置 EOS_SILENCE_THRESHOLD  通道变量

参数是判断用户没说话的能量,可以设置>200,EOS_SILENCE_THRESHOLD=5000

没设置就是使用系统里面默认的能量=200.一般情况下设置=500


2.2 可以设置 RECORD_FINAL_TIMEOUT_MS  通道变量


参数是设置用户说话之后没说话多久认为用户真的停止说话了

可以设置<2000,比如设置RECORD_FINAL_TIMEOUT_MS=1000

没设置就是使用系统里面默认的是2000ms,

假如 拨入可以设置 default 拨号计划里面

假如拨出的 需要vars.xml 里面设置

说话间隔超时时间:

 

说话开始能量:

   

 说话结束的能量:

 

 

3.事件处理


设置录音时间长度在1-20s之间,这个时候支持asr功能生效,

用户假如一直没说话,时间到了会产生RECORD_STOP事件.

假如用户开始说话,马上产生:RECORD_START事件,

用户说话结束产生: RECORD_STOP

假如系统有播音(对话方式),那么收到RECORD_START事件

需要马上停止播音,收到RECORD_STOP事件可以把录音文件打开

读出里面的语音拿去进行识别


4.esl 修改:


4.1 增加 RECORD_START RECORD_STOP 事件监听
4.2
if (strcmp(event, "RECORD_START") == 0)//yhy2018-01-13 需要判断自己的record filename才能stop play
{if (xxx)//有播音要停止播音
{char*p = strstr(eventbody, "Record-File-Path: ");
if (p)
{p = p + strlen("Record-File-Path: ");
strncpy(tmp, p, 64);
tmp[64] = 0;
if (strlen(Lineinfo.filename)>1 && strstr(tmp, Lineinfo.filename + 4))//d:/xx Record-File-Path: d%3A/data/2018/01/13/150614_13606060253_001.wav
{sprintf(cmd_tmp, "api uuid_break %s all", uuid);
esl_send_recv_timed(handle, cmd_tmp, 1000);
cti_log(5, "RECORD_START,%s,stop play,pause on", cmd_tmp);
return 0;
4.3
if (strcmp(event, "RECORD_STOP") == 0)//yhy2017-12-19 支持op_record 50秒内的录音改进. sos 才录音,eos 录音结束.
{
get_lineinfo(index, Lineinfo);
if (Lineinfo.record == 1 && time(NULL)>Lineinfo.time)//yhy2018-01-31 之前的record 不是当前的record 才停止
{
char*p = strstr(eventbody, "Record-File-Path: ");//yhy2018-03-17停止也要判断文件名
if (p)
{
p = p + strlen("Record-File-Path: ");
strncpy(tmp, p, 64);
tmp[64] = 0;
if (strlen(Lineinfo.filename) > 1 && strstr(tmp, Lineinfo.filename + 4))//d:/xx Record-File-Path: d%3A/data/2018/01/13/150614_13606060253_001.wav
{if (xxx)//有播音要停止播音
{sprintf(cmd_tmp, "api uuid_break %s all", uuid);
esl_send_recv_timed(handle, cmd_tmp, 1000);
cti_log(5, "index=%04d,RECORD_STOP,filename=%s", index, Lineinfo.filename);
return 0;


相关文章
freeswitch 默认拨号方案(下)
freeswitch默认拨号方案中(conf/dialplan/default.xml)设置了一些基本的测试功能和PBX电话系统功能 包含了分机互拨及简单IVR功能
|
Web App开发 存储 编解码
Freeswitch关于支持jsip的配置
1、freeswitch安装过程(安装过程省略,运行环境为centos7,freeswitch1.6.5)
|
7月前
|
编解码 开发工具 Android开发
Android平台轻量级RTSP服务模块技术接入说明
为满足内网无纸化/电子教室等内网超低延迟需求,避免让用户配置单独的服务器,大牛直播SDK在推送端发布了轻量级RTSP服务SDK。 轻量级RTSP服务解决的核心痛点是避免用户或者开发者单独部署RTSP或者RTMP服务,实现本地的音视频数据(如摄像头、麦克风),编码后,汇聚到内置RTSP服务,对外提供可供拉流的RTSP URL,轻量级RTSP服务,适用于内网环境下,对并发要求不高的场景,支持H.264/H.265,支持RTSP鉴权、单播、组播模式,考虑到单个服务承载能力,我们支持同时创建多个RTSP服务,并支持获取当前RTSP服务会话连接数。
112 0
|
Web App开发 开发工具 Android开发
Android平台不需要单独部署流媒体服务如何实现内网环境下一对一音视频互动
我们在做内网环境的一对一音视频互动的时候,遇到这样的技术诉求:如智能硬件场景下(比如操控智能硬件),纯内网环境,如何不要单独部署RTMP或类似流媒体服务,实现一对一音视频互动。
123 0
|
10月前
|
编解码 网络协议 Unix
相较于ffmpeg我更倾向于使用socket实现推流工作
相较于ffmpeg我更倾向于使用socket实现推流工作
199 0
|
机器学习/深度学习 算法 机器人
FreeSWITCH ASR 电话机器人 VAD 打断 ASR集成 全功能开源代码
最近很多人都对FreeSWITCH和ASR对接比较感谢兴趣,我之前已经做了一个商业模块(商业模块请点击这里http://www.ddrj.com/callcenter/asr.html),考虑到大部分人,只是研究一下,并不准确购买商业模块,特意做一个开源项目给大家提供一个参考。
817 0
|
编解码 Linux C语言
freeswitch媒体协商的三种配置方案
概述 在企业级VOIP通信中,语音质量是重要的关注点,而语音质量的好坏和媒体编解码有重要的关系。 freeswitch作为一款免费开源的软交换平台,支持多种不同的编解码格式,具体详情本文不多描述。 而不同的终端也会支持多种不同的编解码格式,在呼叫创建过程中就需要编解码的协商。 编解码的协商过程是很容易让人困惑的,即使是对SIP和SDP很熟悉的人也一样。 那么,freeswitch在软交换的过程中,是如何控制A/B路之间媒体的协商过程?如何配置出我们想要的协商方案?不同方案都有什么优缺点? 本文主要描述freeswitch在媒体协商过程中的三种常见方案。 文章中有较多的配置和日志打印信息可以略过
|
数据安全/隐私保护 Windows
FreeSwitch中的会议功能设置
FreeSwitch中的会议功能设置
|
API 语音技术
freeswitch的模块中mod_vad的使用说明
介绍 mod_vad是一个freeswitch的模块,实现VAD录音和放音支持打断,vad和asr集成,tts放音支持等。
|
Linux C语言
freeswitch 新通话启动过程梳理
概述 freeswitch是一款开源的VOIP软交换平台,功能强大。 在使用fs进行呼叫业务的过程中,我们最常见到的日志就是呼叫通道的启动信息,日志如下 2022-03-03 14:14:30.028832 [NOTICE] switch_channel.c:1133 New Channel sofia/internal/1001@192.168.0.152 [d70acc45-294c-4787-8dce-ff46d2cd96a1] 这行日志表示一个新的通话channel初始化完成。 如果我们希望知道channel是如何初始化和启动的,该如何去梳理代码流程呢,有以下几种方式。