freeswitch启用mod_python3

一直没有启用mod_python3模块,今天来配置试一下。记录配置的过程。

1.yum  install python3-devel

    如果不执行这个命令,可能会报错:

    configure: error: Your python3 lacks threads support, can not build mod_python3

    或者就是找不到python的头文件。

2.安装python3,因为目前系统里用的是python2,索性就升级到python3吧。

    下面的版本你可以自己选择。

wget https://www.python.org/ftp/python/3.10.8/Python-3.10.8.tar.xz 
解压
cd Python-3.*
sudo ./configure --prefix=/usr/local/python3.10  --enable-shared CFLAGS=-fPIC
sudo make
sudo make install

   3.编译mod_python3模块。

      首先,进入到freeswitch源代码的根目录下,执行:

    ./configure --with-python3=/usr/bin/python3.10 

    执行完后,会自动生成mod_python3模块下的相匹配的makefile文件。

   下面有2种方法:

   (1)在源码目录下执行:make mod_python3-install

   (2)在freeswitch/src/mod/languages/mod_python3 目录下,执行:

             make

             make install

这2种方法,最后都会生成mod_python3文件。

4.加载模块:

   在fs_cli的控制台执行:load  mod_python3.

5.加载完毕,开始测试:

   为了省事,不自己写测试脚本了,就用源码里 自带的python_example.py 脚本。

  把python_example.py复制到/usr/local/freeswitch/scripts 目录下,

然后在控制台执行:python python_example  (注意,不要带.py后缀)

此时报错:

mod_python3.c:255 Error importing module
[ERR] mod_python3.c:168 Python Error by calling script "test": <class 'ModuleNotFoundError'>
Message: No module named 'freeswitch'
Exception: NoneType: None

经上网搜索,发现原来是python的默认目录不是scripts,而是要放到python3的某一个安装目录下。(这块有疑问,如果有不对的地方,请高人指点,谢谢)

在我的环境下,就是:/usr/lib/python3/site-packages

这个目录的来源是/usr/local/python3.10/lib/python3.10/site-packages

也就是刚才--prefix指定的安装目录

这个目录下,存放你自己的python脚本,并确保存在freeswitch.py 文件。

并设置一个python的运行目录:

export PYTHONPATH=/usr/lib/python3/site-packages

不然还是无法加载:No module named 'freeswitch'

6.然后重启freeswitch主程序,再次执行:python python_example 就成功了,执行结果如下:

---python python_example
w00t!
Event-Name: API
Core-UUID: dd19aae8-8fe6-11ee-8e74-e19207ef332f
FreeSWITCH-Hostname: xxx
FreeSWITCH-Switchname: xxx
FreeSWITCH-IPv4: xxx
FreeSWITCH-IPv6: %3A%3A1
Event-Date-Local: 2023-12-01%2009%3A35%3A00
Event-Date-GMT: Fri,%2001%20Dec%202023%2001%3A35%3A00%20GMT
Event-Date-Timestamp: xxx
Event-Calling-File: switch_loadable_module.c
Event-Calling-Function: switch_api_execute
Event-Calling-Line-Number: 2949
Event-Sequence: 1132
API-Command: python
API-Command-Argument: python_example


[NOTICE] mod_python3.c:216 Invoking py module: python_example
[DEBUG] mod_python3.c:308 Call python script 
[DEBUG] mod_python3.c:310 Finished calling python script 

7.结束了,end

   长风破浪会有时,直挂云帆济沧海!

### 实现 FreeSWITCH WebSocket API 文本到语音功能 为了实现在 FreeSWITCH 中通过 WebSocket 接口完成文本转语音 (TTS) 的操作,可以利用 `mod_websocket` 和 TTS 模块如 `mod_tts_simple` 或其他支持的 TTS 引擎。具体实现方式如下: #### 配置 FreeSWITCH 使用 WebSocket 确保已安装并启用了 `mod_websocket` 模块,在配置文件中设置 WebSocket 监听端口和其他必要参数[^1]。 ```xml <configuration name="ws.conf" description="WebSocket Configuration"> <settings> <param name="listen-ip" value=""/> <param name="listen-port" value="8089"/> <!-- 更多配置项 --> </settings> </configuration> ``` #### 连接至 WebSocket 并发送命令 客户端可以通过 WebSocket 协议连接到上述指定 IP 地址和端口号,并向服务器发送 JSON 命令请求执行特定任务。对于 TTS 功能来说,则需构建相应的消息体结构来触发转换过程。 ```json { "method": "execute", "command": "tts_say", "data": { "text": "Hello, this is a test message.", "language": "en-US" } } ``` 此 JSON 对象中的字段解释: - `"method"` 表明这是一个方法调用; - `"command"` 是要执行的具体指令名称; - `"data"` 包含传递给该命令的数据对象,其中至少应包含待合成的文字内容以及目标语言代码。 当 FreeSWITCH 收到来自 WebSocket 客户端的有效 TTS 请求后,会根据所选的语言模型将输入字符串合成为音频流,并可通过适当的方式播放出来或返回给发起者处理。 #### Python 示例:使用 WebSockets 库与 FreeSWITCH 交互 下面是一个简单的 Python 脚本来展示如何建立 WebSocket 连接并向 FreeSWITCH 发送 TTS 请求: ```python import asyncio import websockets async def send_tts_request(): uri = &#39;ws://localhost:8089/ws&#39; async with websockets.connect(uri) as websocket: tts_command = &#39;&#39;&#39;{"method":"execute","command":"tts_say",\ "data":{"text":"This is an example of Text-to-Speech using FreeSWITCH.", \ "language":"en"}}&#39;&#39;&#39; await websocket.send(tts_command) response = await websocket.recv() print(f"< {response}") if __name__ == &#39;__main__&#39;: asyncio.get_event_loop().run_until_complete(send_tts_request()) ``` 这段脚本展示了怎样创建一个异步函数用于打开 WebSocket 连接、发送 TTS 请求数据包并通过接收响应确认操作成功与否的过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值