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;


目录
打赏
0
0
0
0
17
分享
相关文章
全网首发:gstreamer如何接入RTSP流(IP摄像头)的代码范例
全网首发:gstreamer如何接入RTSP流(IP摄像头)的代码范例
764 0
Freeswitch关于支持jsip的配置
1、freeswitch安装过程(安装过程省略,运行环境为centos7,freeswitch1.6.5)
FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流
《FFmpeg开发实战》书中介绍了如何使用FFmpeg向网络推流,简单流媒体服务器MediaMTX不适用于复杂业务。nginx-rtmp是Nginx的RTMP模块,提供基本流媒体服务。要在Linux上集成rtmp,需从官方下载nginx和nginx-rtmp-module源码,解压后在nginx目录配置并添加rtmp模块,编译安装。配置nginx.conf启用RTMP服务,监听1935端口。使用ffmpeg推流测试,如能通过VLC播放,表明nginx-rtmp运行正常。更多详情见书本。
207 0
FFmpeg开发笔记(四十)Nginx集成rtmp模块实现RTMP推拉流
相较于ffmpeg我更倾向于使用socket实现推流工作
相较于ffmpeg我更倾向于使用socket实现推流工作
204 0
IPC机制在jetson中实现硬解码视频流数据通信的逻辑解析
IPC机制在jetson中实现硬解码视频流数据通信的逻辑解析
236 0
Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?
Windows平台RTMP推送|轻量级RTSP服务录像模块如何支持中文路径?
Android平台轻量级RTSP服务模块如何实现一个服务发布多路RTSP流?
Android平台轻量级RTSP服务模块如何实现一个服务发布多路RTSP流?
300 0
如何对RTSP播放器做功能和性能评估
好多开发者在做产品竞品分析的时候,不知道如何界定一个RTSP播放器,大牛直播SDK认为,一个RTSP播放器,不是说有几个类似于Open/Close接口就够了,好的RTSP播放器需要具备以下功能和性能属性:
125 0
Windows平台RTMP多实例推送探讨
之前,我们博客 https://blog.csdn.net/renhui1112/article/details/105624392 提到,Android平台RTMP多实例推送的几种情况探讨,简单来说有以下三种情况: 1. 多路编码,多个实例分别推送到不同的RTMP URL(如Android采集板卡同时接2路出去); 2. 同一路编码,多个实例分别推送到不同的RTMP URL(如推送到内网、外网不同的RTMP服务器); 3. 部分路编码、部分路对接编码后的H.264/AAC数据,多个实例分别推送到不同的RTMP URL(混合推)。
121 0
Windows平台RTMP直播推送集成简要说明
好多开发者在集成大牛直播SDK (官方)的Windows平台RTMP推送模块时吓一跳,怎么这么多接口?本文做个简单的拆分:
107 0