当前位置: 首页 > news >正文

FreeSWITCH mrcp-v2小记

最近得知有人受mrcp的困扰,于是写了这篇小文,希望能有所帮助

  • FreeSWITCH版本选择

目前当然选择1.10.10,不建议老版本,差别在于老版本用到的libmrcp比较旧,是1.2版本,bug比较多,有时会crash,而FreeSWITCH1.10.10用libmcrp1.6,要稳定很多

  • 编译

编译不在本文的讨论范围,可能有点小麻烦,但可以解决

  • 配置

可以找到FreeSWITCH1.10.6版本的vanilla配置,复制过来,可以这样做(以ali为例):

  1. modules.conf.xml里面增加 <load module="mod_unimrcp"/>
  2. unimrcp.conf.xml里面 <param name="default-tts-profile" value="ali"/> 和<param name="default-asr-profile" value="ali"/>
  3. mrcp_profiles目前下的文件只保留nuance-5.0-mrcp-v2.xml,其它的文件可以删除
  4. nuance-5.0-mrcp-v2.xml改名为ali.xml
  5. ali.xml里面, name改为ali,server-ip和server-port指向sdm的sip地址和sip端口
  • 测试路由
<!--tts例子1-->
<action application="answer" data="">
<action application="set" data="playback_delimiter=!">  
<action application="set" data="tts_engine=unimrcp"> <!-- 或者unimrcp:ali -->
<action application="set" data="tts_voice=xiaoyan"> <!-- 这个参数很重要,要找阿里确认 -->
<action application="playback" data="say:'欢迎使用tts测试系统'!welcome.wav"> <!--同时tts和本地语音文件-->
<!--tts例子2-->
<action application="answer" data="">
<action application="speak" data="unimrcp|xiaoyan|欢迎使用tts测试系统"> <!--第二个参数是xiaoyan,但需要找阿里确认-->

本文没有提供asr例子,可以去别的地方去找

我觉得tts参数比较少,比较容易调试。先搞定tts, asr就不难了

  • 调试

调试的主要方法是看日志和抓包,从sip invite开始看,里面一般是二个media,其中一个当然是rtp(关注c地址),另外一个就是mrcp(关注地址和mrcp端口)

  • 常见问题

1.ali和tengxun如何并存

同时放二个文件:ali.xml和tengxun.xml,当然,profile 名称不能一样,client-port不能一样

在应用层,tts_engine设置为unimrcp:ali或者设置为unimrcp:tengxun,这样就可以区别开了

2.听不到tts,抓包发现tts server没有发rtp流过来,但sip流程正常

看fs的c地址是不是127.0.0.1,如果是,那么client-ip和rtp-ip不能配成auto(让fs自动找),要修改成$${local_ip_v4},或者写死,比如192.168.1.100(本机ipv4)。此外,如果有nat,那么client-ext-ip和rtp-ext-ip可能需要设置下。抓包能定位到这些问题(有兴趣的可以研究下mod_unimrcp.c)

3.1001 bridge 1002,需要同时识别,要怎么做

重点是2条腿都需要execute 'detect_speech'先启动,不能execute 'play_and_detect_speech',后者不能返回

在收到pause之后,execute 'detect_speech resume' 继续识别

下面给出启动时的lua代码:

function debug(s)session:consoleLog("DEBUG", (s or "(NULL)") .. "\n")
end
debug("start-asr entry")-- session:execute("info")
debug("caller = " .. session:getVariable("caller_id_number") .. " callee = " .. session:getVariable("destination_number"))
session:setVariable("fire_asr_events", "true")
-- 开始识别
session:execute("detect_speech", "unimrcp {start-input-timers=true,Speech-Complete-Timeout=10000,no-input-timeout=3000,recognition-timeout=60000}builtin:grammar/boolean?language=zh-CN;y=1;n=2 builtin")
-- session:execute("detect_speech", "param start-input-timers true")
-- session:execute("detect_speech", "param Recognition-Mode continuous")
debug("start-asr exit")

uuid_broadcast可以执行application,对esl程序可能有用(本人不会esl,好惭愧)

  • 其它

sdm支持连续的语音识别,但mrcp不支持,或许以后可以修改源码来支持这个特性

dtmf mrcp支持,但sdm不支持,lua可以设置回调,可能可以解决识别的过程中收码的问题

function my_cb(s, type, obj, arg)
-- ...
endblah = "w00t"
session:setInputCallback("my_cb", "blah")
session:execute("play_and_detect_speech",...
-- ...

本文完全是凭记忆写成的,或许以后可以适当补充日志。

相关文章:

FreeSWITCH mrcp-v2小记

最近得知有人受mrcp的困扰&#xff0c;于是写了这篇小文&#xff0c;希望能有所帮助 FreeSWITCH版本选择 目前当然选择1.10.10&#xff0c;不建议老版本&#xff0c;差别在于老版本用到的libmrcp比较旧&#xff0c;是1.2版本&#xff0c;bug比较多&#xff0c;有时会crash&am…...

如何将你的PC电脑数据迁移到Mac电脑?使用“迁移助理”从 PC 传输到 Mac的具体操作教程

有的小伙伴因为某一项工作或者其它原因由Windows电脑换成了Mac电脑&#xff0c;但是数据和文件都在原先的Windows电脑上&#xff0c;不知道怎么传输。接下来小编就为大家介绍使用“迁移助理”将你的通讯录、日历、电子邮件帐户等内容从 Windows PC 传输到 Mac 上的相应位置。 在…...

Elasticsearch集群搭建、数据分片以及位置坐标实现附近的人搜索

集群搭建、数据分片 es使用两种不同的方式来发现对方: 广播单播也可以同时使用两者,但默认的广播,单播需要已知节点列表来完成 一 广播方式 当es实例启动的时候,它发送了广播的ping请求到地址224.2.2.4:54328。而其他的es实例使用同样的集群名称响应了这个请求。 一般这…...

深度学习_3 数据操作之线代,微分

线代基础 标量 只有一个元素的张量。可以通过 x torch.tensor(3.0) 方式创建。 向量 由多个标量组成的列表&#xff08;一维张量&#xff09;。比如 x torch.arange(4) 就是创建了一个1*4的向量。可以通过下标获取特定元素&#xff08;x[3]&#xff09;&#xff0c;可以通…...

树莓派安装Ubuntu22.04LTS桌面版

工具&#xff1a;树莓派4B Raspberry Pi 自己下载的ubuntu22.04LTS img磁盘镜像文件 这里有一个小技巧&#xff1a;这个Raspberry Pi的选择镜像的时候在最后面一行可以选择自定义的镜像&#xff0c;哈哈哈哈&#xff0c;这就使得我们可以自己下载&#xff0c;而且知道那个文…...

Rust编程基础之函数和表达式

1.Rust函数 在之前的文章中,我们已经见到了一个函数:main函数, 它是很多程序的入口点。也见过 fn 关键字&#xff0c;它用来声明新函数。 Rust 代码中的函数和变量名使用 snake case 规范风格。在 snake case 中&#xff0c;所有字母都是小写并使用下划线分隔单词。这是一个包…...

关于preempt count的疑问

Linux中的preempt_count - 知乎 https://www.cnblogs.com/hellokitty2/p/15652312.html LWN&#xff1a;关于preempt_count()的四个小讨论&#xff01;-CSDN博客 主要是参考这些文章 之前一直认为只要是in_interrupt()返回非0值&#xff0c;那么就可以认为当前在中断上下文。即…...

Windows 开启 Kerberos 的火狐 Firefox 浏览器访问yarn、hdfs

背景&#xff1a;类型为IPA或者MIT KDC&#xff0c;windows目前只支持 firefoxMIT Kerberos客户端的形式&#xff0c;其他windows端浏览器IE、chrome、edge&#xff0c;没有办法去调用MIT Kerberos Windows客户端的GSSAPI验证方式&#xff0c;所以均无法使用 Windows 开启 Kerb…...

华为云资源搭建过程

网络搭建 EIP&#xff1a; 弹性EIP&#xff0c;支持IPv4和IPv6。 弹性公网IP&#xff08;Elastic IP&#xff09;提供独立的公网IP资源&#xff0c;包括公网IP地址与公网出口带宽服务。可以与弹性云服务器、裸金属服务器、虚拟IP、弹性负载均衡、NAT网关等资源灵活地绑定及解绑…...

突破防火墙的一种方法

当Linux防火墙阻止来自某个ip的数据时&#xff0c;它应该是根据ip数据报里“源IP地址”字段取得的对方ip吧&#xff0c;那对方就不能通过篡改“源IP地址”来绕过防火墙吗&#xff1f;NAT模式下的路由器就修改了这个字段。 但这样的话&#xff0c;攻击者是收不到服务器返回的数…...

Docker 多阶段构建的原理及构建过程展示

Docker多阶段构建是一个优秀的技术&#xff0c;可以显著减少 Docker 镜像的大小&#xff0c;从而加快镜像的构建速度&#xff0c;并减少镜像的传输时间和存储空间。本文将详细介绍 Docker 多阶段构建的原理、用途以及示例。 Docker 多阶段构建的原理 在传统的 Docker 镜像构建…...

【开题报告】基于Spring Boot的家装产品展示交易平台的设计与实现

1.研究背景和目的 随着人们对居住环境舒适度和个性化需求的不断提升&#xff0c;家装市场正逐渐发展成为一个重要的消费领域。为了满足消费者对家装产品的需求&#xff0c;建立一个高效、可靠的家装产品展示交易平台变得尤为重要。本项目旨在通过使用Spring Boot框架&#xff…...

MacOS安装git

文章目录 通过Xcode Command Lines Tool安装(推荐)终端直接运行git命令根据流程安装先安装Command Lines Tool后再安装git 官网下载二进制文件进行安装官方国外源下载二进制文件(不推荐)国内镜像下载二进制文件(推荐)安装git 通过Xcode Command Lines Tool安装(推荐) 简单来讲C…...

京东协议算法最新版

环境准备 1 com.jingdong.app.mall11.6.4 入口定位 逆向分析&#xff0c;发现 params 里面有一个 sign 以及请求头里面有一个 jdgs 首先我们发现京东的 sign 是 32 位的&#xff0c;猜测其可能是 md5 之类的 hash 算法&#xff0c;既然是 hash 算法&#xff0c;那么就大概率…...

软考系统架构设计师案例分析知识汇总

软件架构风格 △△△ 软件架构风格是描述某一类特定应用领域中软件系统组织方式和惯用方式。组织方式描述了系统的组成构件和这些构件的组织方式,惯用模式则反映众多系统共有的结构和语义。 面向对象架构风格的特征是将数据表示和基本操作封装在对象中。这种模式的构件是对象…...

MyBatis-plus 代码生成器

具体代码 application.yaml server:port: 8081 #自定义端口号spring:datasource:url: jdbc:mysql://localhost:3306/itcast?useUnicodetrue&characterEncodingutf-8&serverTimezoneGMT%2B8username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver…...

运维常识——网络

内网&#xff0c;公网IP 内网IP为专网IP 因为网络资源&#xff08;IP地址不够&#xff0c;所以引出来了内网IP和IPv6&#xff09; 内网IP和公网IP之分是为了减缓IP地址不够使用的情况 一般设置代理服务器 设置两张网卡 一张对外一张对内 内部主机将数据转发到内网卡&#…...

《研发效能(DevOps)工程师》课程简介(一)丨IDCF

为贯彻落实《关于深化人才发展体制机制改革的意见》&#xff0c;推动实施人才强国战略&#xff0c;促进专业技术人员提升职业素养、补充新知识新技能&#xff0c;实现人力资源深度开发&#xff0c;推动经济社会全面发展&#xff0c;根据《中华人民共和国劳动法》有关规定&#…...

OMV 介绍及安装

# Time: 2023/11/02 #Author: Xiaohong # 运行电脑: Lenovo X201I (Intel(R) Core(TM) i3 CPU M 370 2.40GHz) # 功能: OMV 介绍及安装 导图 若OMV6 安装Extras 插件失败&#xff0c;可以参考 OMV6 安装Extras 插件失败的解决方法...

JAVA 实现PDF转图片(spire.pdf.free版)

1.引入jar包 导入方法1&#xff1a; 手动引入。将Free Spire.PDF for Java下载到本地&#xff0c;解压&#xff0c;找到lib文件夹下的Spire.PDF.jar文件。在IDEA中打开如下界面&#xff0c;将本地路径中的jar文件引入Java程序&#xff1a; 导入方法2&#xff1a;如果您想通过…...

华硕笔记本性能管家G-Helper:3步告别臃肿控制中心,释放硬件潜能

华硕笔记本性能管家G-Helper&#xff1a;3步告别臃肿控制中心&#xff0c;释放硬件潜能 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, V…...

微服务架构设计:构建可扩展的分布式系统

微服务架构设计&#xff1a;构建可扩展的分布式系统 什么是微服务&#xff1f; 微服务是一种架构风格&#xff0c;将应用程序拆分为一组小型、自治的服务&#xff0c;每个服务运行在独立的进程中&#xff0c;通过轻量级的通信机制相互协作。 微服务 vs 单体应用 特性单体应用微…...

Gemini 长上下文成本估算表:输入、输出、缓存怎么拆

做 Gemini 长上下文应用时&#xff0c;最容易出问题的不是第一版代码&#xff0c;而是成本模型。测试阶段只跑几十次请求&#xff0c;账单看起来很轻&#xff1b;上线后用户开始上传 PDF、合同、日志、代码仓库&#xff0c;输入 token 被放大&#xff0c;费用曲线马上变陡。 这…...

5分钟搞定Windows桌面整理:免费开源的NoFences终极指南

5分钟搞定Windows桌面整理&#xff1a;免费开源的NoFences终极指南 【免费下载链接】NoFences &#x1f6a7; Open Source Stardock Fences alternative 项目地址: https://gitcode.com/gh_mirrors/no/NoFences 还在为杂乱的Windows桌面图标而烦恼吗&#xff1f;每次寻找…...

如何快速完成北航毕业论文:LaTeX模板终极指南

如何快速完成北航毕业论文&#xff1a;LaTeX模板终极指南 【免费下载链接】BUAAthesis 北航毕设论文LaTeX模板 项目地址: https://gitcode.com/gh_mirrors/bu/BUAAthesis 还在为毕业论文格式调整而烦恼吗&#xff1f;每年都有无数北航学子在毕业季被繁琐的格式要求折磨得…...

Java类与对象:编程核心解密

好的&#xff0c;我们来详细解释一下Java中的类和对象这两个核心概念。1. 类 (Class)定义&#xff1a;类是一个模板或蓝图。它定义了某一类“事物”的共同特征&#xff08;属性&#xff09;和行为&#xff08;方法&#xff09;。作用&#xff1a;类描述了该种“事物”具有哪些信…...

QQ音乐格式转换终极指南:如何3步将.qmc文件转为MP3/FLAC

QQ音乐格式转换终极指南&#xff1a;如何3步将.qmc文件转为MP3/FLAC 【免费下载链接】qmc-decoder Fastest & best convert qmc 2 mp3 | flac tools 项目地址: https://gitcode.com/gh_mirrors/qm/qmc-decoder 你是否曾在QQ音乐下载了心爱的歌曲&#xff0c;却发现它…...

Three.js实战:3D数据可视化入门与实践

Three.js实战&#xff1a;3D数据可视化入门与实践 前言 大家好&#xff0c;我是前端老炮儿。今天咱们来聊聊Three.js&#xff01; 在数据可视化领域&#xff0c;3D可视化正变得越来越重要。Three.js作为一个强大的3D库&#xff0c;可以帮助我们轻松创建各种3D效果。 今天我就带…...

城市交通网络信号的无模型自适应控制方法【附模型】

✨ 长期致力于城市交通网络信号控制、数据驱动控制、无模型自适应控制、无模型自适应预测控制、无模型自适应迭代学习控制、宏观基本图研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方…...

在 Node.js 后端服务中接入 Taotoken 多模型 API 的实践

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 在 Node.js 后端服务中接入 Taotoken 多模型 API 的实践 为后端服务添加 AI 能力&#xff0c;例如智能客服或内容生成&#xff0c;…...