自定义Python版本ESL库访问FreeSWITCH

环境: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

自定义Python版本ESL库访问FreeSWITCH

 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

自定义Python版本ESL库访问FreeSWITCH

三、运行效果

 1、ESL库导入效果

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

自定义Python版本ESL库访问FreeSWITCH

 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())

运行效果如下:

自定义Python版本ESL库访问FreeSWITCH

 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")

运行效果如下:

自定义Python版本ESL库访问FreeSWITCH

 四、资源下载

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

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

自定义Python版本ESL库访问FreeSWITCH

 

原文链接:https://www.cnblogs.com/MikeZhang/p/py39esl-20230424.html

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:自定义Python版本ESL库访问FreeSWITCH - Python技术站

(0)
上一篇 2023年4月25日
下一篇 2023年4月25日

相关文章

  • Python使用dict.fromkeys()快速生成一个字典示例

    下面我来为您详细讲解Python中使用dict.fromkeys()方法快速生成一个字典的攻略。 1. 什么是dict.fromkeys()方法 dict.fromkeys()方法是Python内置字典(dict)类型中的一个方法,能够快速生成一个具有指定键和默认值的字典。 函数语法如下: dict.fromkeys(seq[, value]) 其中,seq…

    python 2023年5月13日
    00
  • 详细解读python操作json文件的详细

    详细解读python操作json文件的详细攻略 什么是JSON文件? JSON是JavaScript对象表示法的缩写,是一种轻量级的数据格式,易于阅读和编写。JSON文件通常用于将数据结构化地传输和存储。 Python中操作JSON的模块 在Python中,我们可以使用内置的json模块来轻松地读取和编写JSON文件。 首先,我们需要导入json模块: im…

    python 2023年6月3日
    00
  • PHP-FPM实现性能优化

    下面是详细讲解“PHP-FPM实现性能优化”的完整攻略。 什么是PHP-FPM? PHP-FPM是一种运行于PHP环境中的FastCGI进程管理器。它可以用于解决Apache请求过多、内存泄露等问题,从而提高网站的稳定性和性能。PHP-FPM可以独立于Web服务器如Nginx、Apache运行,通常和Nginx、Apache搭配使用。 PHP-FPM性能优化…

    python 2023年6月3日
    00
  • 基于scrapy实现的简单蜘蛛采集程序

    谈及“基于scrapy实现的简单蜘蛛采集程序”的攻略,我们首先需要了解Scrapy框架和爬虫的基本概念。 Scrapy是一个开源的Python应用程序框架,用于在网络上进行爬虫开发。它提供了一组完整的工具,用于从Web站点和抓取数据存储中提取所需的信息。它可以轻松地在多个网站上运行,并且可以管理爬虫的状态。 接下来,我们将讲解如何使用Scrapy框架构建一个…

    python 2023年5月14日
    00
  • Python格式化字符串f-string的使用教程

    以下是关于Python格式化字符串f-string的使用教程的完整攻略。 什么是f-string f-string是Python3.6以后引入的一种字符串格式化语法,它能够使Python中的字符串格式化更加简洁、清晰、直观,也更加符合Python的哲学和优雅风格。 其基本语法就是通过在需要格式化的字符串前面添加一个f字母,然后在字符串内部使用大括号{}包住表…

    python 2023年6月5日
    00
  • Python用 KNN 进行验证码识别的实现方法

    下面是 Python 用 KNN 进行验证码识别的完整攻略。 一、前言 在验证码识别过程中,KNN 算法能够很好地应用。KNN,即 k-近邻算法,其本质是通过计算待识别样本与训练数据集中的每个样本之间的距离,然后按照距离排序,选取前 k 个距离最近的邻居,统计这 k 个邻居的类别,将其中出现次数最多的类别作为待识别样本的类别。 在 Python 中,通过 s…

    python 2023年6月6日
    00
  • Python入门教程之变量与数据类型

    Python入门教程之变量与数据类型 本文将介绍在使用Python编程时常用的变量和数据类型,包括数字类型、字符串类型、布尔类型和列表类型。在实际应用中,了解和使用这些数据类型可以提高代码编写效率和质量。 变量 在Python中,变量是一个标识符,可以用来存储数据。变量的命名规则和其他编程语言类似,要求具有描述性和可读性。 另外,在Python中定义变量时不…

    python 2023年5月13日
    00
  • 回调函数的意义以及python实现实例

    下面就对“回调函数的意义以及python实现实例”进行详细讲解。 一、回调函数的意义 1. 定义 回调函数(Callback Function)是指在我们调用函数A时,将另一个函数B作为实参传入A中,A在执行的过程中,调用了B函数来完成某些动作,完成后再返回到A函数继续执行后续的操作。这种在函数A运行时,在适当的时候调用B函数的方式就是“回调函数”。 2. …

    python 2023年6月3日
    00
合作推广
合作推广
分享本页
返回顶部