环境:CentOS 7.6_x64
Python版本:3.9.12
FreeSWITCH版本 :1.10.9

一、背景描述

ESL库是FreeSWITCH对外提供的接口,使用起来很方便,但该库是基于C语言实现的,Python使用该库的话需要使用源码进行编译。
如果使用系统自带的Python版本进行编译,过程会比较流畅,就不描述了。这里记录下使用自定义Python版本(比如自编译的Python版本)编译及使用ESL的过程,并提供预编译的二进制文件。

二、具体实现

1、准备自定义Python环境

这里使用 Python 3.9.12 版本,具体编译过程可参考这篇文章:

关注微信公众号(聊聊博文,文末可扫码)后回复 2022072401 获取。

Python环境目录:/usr/local/python39

2、准备编译环境

1)配置环境变量

souce /usr/local/python39/env.sh

文件内容:

#! /bin/bash

pydir=/usr/local/python39
export CFLAGS="-I$pydir/include"
export LDFLAGS="-L$pydir/lib"
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$pydir/lib

2)将python3的软链接指向python3.9

具体如下:

ln /usr/local/python39/bin/python3.9 -s /usr/bin/python3

3)配置python-config

将 python3.9-config 复制到 freeswitch-1.10.9.-release/libs/esl/python3 目录:

mv python-config python-config-bak
cp /usr/local/python39/bin/python3.9-config python-config

3、编译ESL库

1) 生成Makefile文件

进入 freeswitch-1.10.9.-release 目录,执行如下命令:

./devel-bootstrap.sh && ./configure

注意:该步骤需要在第2步完成之后进行。

2)编译ESL模块

进入 freeswitch-1.10.9.-release/libs/esl 目录,执行 编译操作:

make py3mod

三、运行效果

1、ESL库导入效果

在编译目录导入ESL库,具体效果如下:

2、接收事件

这里将ESL库复制到其它机器进行事件接收测试,示例代码如下:

from ESL import *

con = ESLconnection("localhost","8021","ClueCon")

if con.connected:
con.events("plain", "all");
while True:
e = con.recvEvent()
if e:
print(e.serialize())

运行效果如下:

3、发送命令

这里将ESL库复制到其它机器进行originate测试,示例代码如下:

from ESL import *

con = ESLconnection("localhost","8021","ClueCon")
if con.connected:
e = con.api("bgapi originate user/1000 &echo")
print(e.getBody())
else:
print("Not connected")

运行效果如下:

四、资源下载

本文涉及源码及预编译二进制文件,可以从如下途径获取:

关注微信公众号(聊聊博文,文末可扫码)后回复 20230424 获取。

自定义Python版本ESL库访问FreeSWITCH的更多相关文章

  1. Hadoop streaming使用自定义python版本和第三方库

    在使用Hadoop的过程中,遇到了自带python版本比较老的问题. 下面以python3.7为例,演示如何在hadoop上使用自定义的python版本以及第三方库. 1.在https://www.p ...

  2. Python常用的库简单介绍一下

    Python常用的库简单介绍一下fuzzywuzzy ,字符串模糊匹配. esmre ,正则表达式的加速器. colorama 主要用来给文本添加各种颜色,并且非常简单易用. Prettytable ...

  3. 升级python的sqlite库版本

    今天了解了一下用python获取chrome cookie信息,在研究的过程中,发现打开数据库失败,后来调查了一下发现是由于sqlite3库太老的缘故,起码需要3.8以上,然后看了一下python 2 ...

  4. 友善RK3399/NanoPC-T4开发板wiringPi Python库访问GPIO外设实例讲解 -【申嵌视频】

    1 wiringPi for Python简介 wiringPi for Python是wiringPi的Python语言扩展,用于在Python程序中操作GPIO/I2C/SPI库/UART/PWM ...

  5. robot framework自定义python库

    自定义python库的好处: robot framework填表式,将python的灵活性弄没了,但是不要担心,RF早就想到了解决办法,就是扩充自己的库. 1.在python应用程序包目录下创建一个新 ...

  6. python版本及ML库

    一:关于Python版本的选择问题 关于Python的选择问题:要看学术界能不能把科学库迁移到Python3. 1:多个版本共用: 最近发现SciPy的最高版本是3.2,只能是退而求其次,不使用最新版 ...

  7. windows 如何将安装Anaconda之前已经安装的python版本(中已安装的库)移动到 Anaconda中

    题目]如何将安装Anaconda之前已经安装的python版本(中已安装的库)移动到 Anaconda中 一.概述 之前安装tensorflow的安装了anaconda并用它进行安装,anaconda ...

  8. python 各种开源库

    测试开发 来源:https://www.jianshu.com/p/ea6f7fb69501 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. 链接 sel ...

  9. python 三方面库整理

    测试开发 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装. selenium - web UI自动化测试. –推荐 mechanize- Python中有状 ...

  10. python面试题库——1Python基础篇

    第一部分 Python基础篇(80题) 为什么学习Python? 语言本身简洁,优美,功能超级强大,跨平台,从桌面应用,web开发,自动化测试运维,爬虫,人工智能,大数据处理都能做 Python和Ja ...

随机推荐

  1. Python Boolean类型 判断

    and 判断非Boolean类型数据会自动转换类型 "A" and "B" → "B" 因为表达式 A 和 B都为True所以返回 &quo ...

  2. apt-get install 出现could not open lock file /var/lib/dpkg/lock错误问题

    apt-get install 经常出现 could not open lock file /var/lib/dpkg/lock -open 错误问题 一种解决办法 1.切换到root用户 su ~ ...

  3. 转:MyBatis 日志打印

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012666996/article/details/79106599Mybatis SQL语句控制台 ...

  4. How to Install VMware Tools on CentOS 6.5

    yum install perl gcc make kernel-headers kernel-devel -y [root@centos6 vmware-tools-distrib]# ./vmwa ...

  5. 解决VUE中document.documentElement.scrollTop为0(转)

    原文地址:https://blog.csdn.net/WDCCSDN/article/details/82107374 Vue中document.documentElement.scrollTop的值 ...

  6. Leecode 160.相交链表(Java 哈希表、双指针 两种方法)

    找两个链表第一次指针相同的地方     想法:(本来是没有的,因为没读懂题目描述= =) 1.两个指针,长的先走(长减短相差的长度)这么多的步数,然后就可以开始比较指针,直到指向为空,期间如果指针相同 ...

  7. 日常笔记 - visual studio code快捷键

    环境: Mac + visual studio code 需求: 用vs code 编辑一个txt文档, 一行放不下, 在单行和多行显示之间切换. 快捷键: alt+z [参考链接] https:// ...

  8. P8112 符文破译

    题目描述 将字符串 \(T\) 拆成若干个子串,使这些子串为字符串 \(S\) 的前缀,要求拆分形成的子串数最小. 思路整理 实际上并不需要倒着枚举,也不需要线段树,更不需要 Z 函数. 如果你做过 ...

  9. 解决margin合并问题

    一.什么是外边距合并 外边距合并(叠加)是一个相当简单的概念.但是,在实践中对网页进行布局时,它会造成许多混淆. 所谓的外边距合并就是,当两个垂直外边距相遇时,它们将形成一个外边距.合并的外边距的高度 ...

  10. java异常--自定义异常

    java异常--自定义异常 步骤: 创建自定义异常类. 在方法中通过throw关键字抛出异常对象. 处理异常try-catch 捕获并处理,否则在方法声明处通过throws关键字指明抛出给调用者的方法 ...