mod_unimrcp从FreeSWITCH代码树中删除
FreeSWITCH从代码树中删除了mod_unimrcp(https://github.com/signalwire/freeswitch/commit/3c7e8ff989355bf518eabaeea83036585e4782b7)。
这其实是一个“蓄谋”已久的操作,不要着急,听我慢慢讲。
MRCP的全称是Media Resource Control Protocol,即媒体控制协议。现在广泛用在语音合成、语音识别等领域,大多数做人工智能(语音)的厂商现在也都支持该协议。UniMRCP(https://www.unimrcp.org/)是一个开源的实现。FreeSWITCH中有一个mod_unimrcp
模块就是使用了这个库和开源的协议。
为什么移除呢?简单回答,就是为了更好。
那为什么说“蓄谋”已久呢?因为被一些事情耽搁了。
UniMRCP底层使用了APR(Apache Portabl Runtime)(https://apr.apache.org/)库,而FreeSWITCH底层也使用了APR库,所以,在FreeSWITCH中,他们共用同一个版本的APR。这很好。但是,随着时代的发展,当人们想升级UniMRCP时,发现问题了,那就是,FreeSWITCH用的APR库比较旧,而新版UniMRCP需要的库又比较新,升级不了了……
为什么FreeSWITCH不更新APR库吗?这就说来话长了。简单来说,那就是——升不了。
FreeSWITCH对APR库有一些改动。而这些改动并没有合并到上游的APR里。
为什么不能合并呢?说好的开源软件呢?不是说程序员一言不合就提交补丁吗?FreeSWITCH难道不能把自己修改的部分提交到上游的APR仓库里吗?
提交补丁很简单,但合并补丁还真不是那么简单。FreeSWITCH确实向APR提过补丁,但都是石沉大海。感兴趣的可以自行搜索一下,也可以参考以下这些链接。
- https://bz.apache.org/bugzilla/show_bug.cgi?id=56948
- https://bz.apache.org/bugzilla/show_bug.cgi?id=56947
所以,后来,FreeSWITCH就一直用旧版本的APR。因而导致UniMRCP也无法升级。
不过,时隔多年,FreeSWITCH团队终于解决了这个问题。解决方式也简单粗暴。把FreeSWITCH自己用的APR改成fspr
。这样,就可以把mod_unimrcp
移出FreeSWITCH代码树,放到独立的仓库中(https://github.com/freeswitch/mod_unimrcp/pull/1)。新的模块也转由社区维护,想咋升咋升。
什么?那mod_unimrcp
是不是转为二等公民了?是,也不是。
首先,你可以自行编译,单独编译一个模块比放在FreeSWITCH里简单多了,比如:
$ git clone https://github.com/freeswitch/mod_unimrcp.git$ cd mod_unimrcp$ export PKG_CONFIG_PATH=/usr/local/freeswitch/libs/pkgconfig:/usr/local/unimrcp/libs/pkgconfig$ ./bootstrap.sh$ ./configure
详情可参见该模块的README(https://github.com/freeswitch/mod_unimrcp)。
其实,FreeSWITCH早就发明了一套机制,在FreeSWITCH主代码树的modules.conf
中引用一个外部模块,编译还是像以前那样make install
,没有任何不和谐。比如:
之前:
asr_tts/mod_unimrcp
现在:
mod_unimrcp|https://github.com/freeswitch/mod_unimrcp -b master
你甚至可以把你自己写的模块也放一条记录到modules.conf
中去,只要你写得足够好,大家都愿意用,甚至也可以变成FreeSWITCH缺省的安装模块。
这是今年FreeSWITCH最大的改变,希望未来会越来越好。
相关文章
- 如何在 SAP Spartacus 中编写 ASM-Compatible 的代码
- 程序员恶意删除代码:判赔 21434.48 元
- 湖仓一体电商项目(十一):编写写入DWS层业务代码
- 微信小程序开发之(表单组件的使用)代码篇
- 2022-10-15-整洁代码的注释与格式
- python读取excel文件代码_python怎么加速读取excel
- 代码签名证书,软件开发者的不二之选
- 简化QThread示例代码
- 【C 语言】文件操作 ( remove 函数删除文件 | rename 函数重命名文件 | 代码示例 )
- redis中hash表内容删除的方法代码
- 实用的Android代码片段集合(精)详解手机开发
- MySQL C程序:解决数据库问题的代码解决方案。(mysqlc程序代码)
- 发一个数据过滤的代码,很简单,有用的着的拿去
- oracle命令行删除与创建用户的代码
- checkbox多选框联动实现代码
- 用正则删除不包含某个字符串的行的代码
- aspx中利用js实现确认删除代码
- php删除文件夹及其文件夹下所有文件的函数代码
- php删除与复制文件夹及其文件夹下所有文件的实现代码
- datagrid行内按钮(更新/删除等)操作实现代码
- Repeater全选删除和分页实现思路及代码
- asp.net中gridview的查询、分页、编辑更新、删除的实例代码
- PHP删除HTMl标签的实现代码
- jquery追加tr和删除tr示例代码
- js中cookie的添加、取值、删除示例代码
- ajax与302响应代码测试
- js确认删除对话框效果的示例代码
- PHP实现删除非站内外部链接实例代码