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;


相关文章
|
9月前
|
编解码 Linux 数据安全/隐私保护
Linux平台如何实现采集音视频数据并注入轻量级RTSP服务?
Linux平台如何实现采集音视频数据并注入轻量级RTSP服务?
223 1
|
9月前
|
编解码 监控 开发工具
如何同时启动Android平台GB28181设备接入模块和轻量级RTSP服务模块?
为什么要设计GB28181设备接入模块?GB28181接入SDK,实现不具备国标音视频能力的 Android终端,通过平台注册接入到现有的GB/T28181—2016服务,可用于如智能监控、智慧零售、智慧教育、远程办公、生产运输、智慧交通、车载或执法记录仪等场景。Android终端除支持常规的音视频数据接入外,还可以支持移动设备位置(MobilePosition)订阅和通知、语音广播和语音对讲、云台控制和预置位查询等。
|
10月前
|
计算机视觉
amd配置ffmepg amf待解决
amd配置ffmepg amf待解决
146 0
|
1月前
|
编解码 网络协议 Unix
相较于ffmpeg我更倾向于使用socket实现推流工作
相较于ffmpeg我更倾向于使用socket实现推流工作
57 0
|
1月前
|
C# 数据安全/隐私保护 开发者
Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?
Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?
|
9月前
|
编解码 Android开发
Android平台GB28181设备接入、RTMP推送模块如何实现高效率的视频编码
我们在做Android平台RTMP推送、轻量级RTSP服务和GB28181设备接入模块的时候,有一个点是逃不掉的:如何高效率的实现视频数据编码?
156 0
|
9月前
|
数据处理 Android开发 开发者
Android平台实现mp4文件实时推送RTMP|轻量级RTSP服务|GB28181平台
好多开发者有这样的诉求,想把本地录制的MP4文件,以实时流数据的形式,推送到RTMP服务器,注入轻量级RTSP服务,或者对接到GB28181平台,这块前几年我们就有对接。
|
9月前
|
编解码 监控 网络协议
Android平台GB28181设备接入侧(编码前|编码后|RTSP|RTMP)支持功能浅析
在之前,我有写过Android平台GB28181设备接入模块的好多blog,包括参数设置、功能支持与扩展等,以数据接入为例,支持的数据类型涉及编码前、编码后或直接流数据(RTSP或RTMP流)。可用于如智能监控、智慧零售、智慧教育、远程办公、生产运输、智慧交通、车载或执法记录仪等场景。
138 0
DeepStream不支持多 RTSP源(多个摄像头)
DeepStream不支持多 RTSP源(多个摄像头)
214 0
HLS开发学习-14- Vivado HLS 函数层面的优化
HLS开发学习-14- Vivado HLS 函数层面的优化
255 0
HLS开发学习-14- Vivado HLS 函数层面的优化