zl程序教程

您现在的位置是:首页 >  其他

当前栏目

mod_unimrcp从FreeSWITCH代码树中删除

代码 删除 mod freeswitch 树中
2023-06-13 09:15:50 时间

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最大的改变,希望未来会越来越好。