FREESWITCH 怎样添加自定义模块

简介: FREESWITCH 怎样添加自定义模块

添加模块的方式尝试了很多种,试过的比较好的,比较方便的,如下

a、Makefile.am文件需要包含build目录下的modmake.rules


1、先写Makefile文件

Makefile 文件的内容是:

#BASE 是freeswitch的源码路径

BASE=/usr/src/freeswitch    
include $(BASE)/build/modmake.rules
复制代码


就是这两句话,当然也可以写成一句。


2、写模块代码 简历模块文件夹和模块的代码文件名一致 例如mod_example/mod_example.c

这里说明一下,如果是.c文件的话,那么代码将会以c的方式编译代码,如果.cpp文件的话,那么将使用c++的方式编译代码。

mod_sample.c的代码如下


/*
 * FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
 * Copyright (C) 2005/2012, Anthony Minessale II <anthm@freeswitch.org>
 *
 * Version: MPL 1.1
 *
 * The contents of this file are subject to the Mozilla Public License Version
 * 1.1 (the "License"); you may not use this file except in compliance with
 * the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/
 *
 * Software distributed under the License is distributed on an "AS IS" basis,
 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
 * for the specific language governing rights and limitations under the
 * License.
 *
 * The Original Code is FreeSWITCH Modular Media Switching Software Library / Soft-Switch Application
 *
 * The Initial Developer of the Original Code is
 * Anthony Minessale II <anthm@freeswitch.org>
 * Portions created by the Initial Developer are Copyright (C)
 * the Initial Developer. All Rights Reserved.
 *
 * Contributor(s):
 *
 * Anthony Minessale II <anthm@freeswitch.org>
 * Neal Horman <neal at wanlink dot com>
 *
 *
 * mod_example.c -- Framework Demo Module
 *
 */
#include <switch.h>
/*
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_example_shutdown);
SWITCH_MODULE_RUNTIME_FUNCTION(mod_example_runtime);
*/
SWITCH_MODULE_LOAD_FUNCTION(mod_example_load);
SWITCH_MODULE_DEFINITION(mod_example, mod_example_load, NULL, NULL);
SWITCH_MODULE_LOAD_FUNCTION(mod_example_load)
{
  /* connect my internal structure to the blank pointer passed to me */
  *module_interface = switch_loadable_module_create_module_interface(pool, modname);
  switch_log_printf(SWITCH_CHANNEL_LOG, SWITCH_LOG_NOTICE, "Hello World!\n");
  /* indicate that the module should continue to be loaded */
  return SWITCH_STATUS_SUCCESS;
}
/*
  Called when the system shuts down
SWITCH_MODULE_SHUTDOWN_FUNCTION(mod_example_shutdown);
{
  return SWITCH_STATUS_SUCCESS;
}
*/
/*
  If it exists, this is called in it's own thread when the module-load completes
  If it returns anything but SWITCH_STATUS_TERM it will be called again automaticly
SWITCH_MODULE_RUNTIME_FUNCTION(mod_example_runtime);
{
  while(looping)
  {
    switch_yield(1000);
  }
  return SWITCH_STATUS_TERM;
}
*/
/* For Emacs:
 * Local Variables:
 * mode:c
 * indent-tabs-mode:nil
 * tab-width:4
 * c-basic-offset:4
 * End:
 * For VIM:
 * vim:set softtabstop=4 shiftwidth=4 tabstop=4 noet expandtab:
 */
复制代码


这段代码是从freeswitch的源码中的src/mod/sdk/autotools/src中复制出来的。本身autotools也是freeswitch提供的范例用于初学者学习创建模块的。下面一个例子就是使用这个模块用来创建自定义模块。


b、使用freeswitch提供的范例进行改写,创建自定义的模块。

就是创建mod_example模块

那么我们复制 autotools 成mod_example 如果名称不一样比如是mod_test,那么我们需要修改的点如下:


1、修改configuer.ac文件

修改mod_example 为 mod_test

修改mod_example.c 为 mod_test.c

当然这里需要说明的是,如果源文件是.cpp文件的话呢这样就需要搜索一下.ac 支持编译c++。我这里添加了如下的宏

AC_PROG_CXX

AC_PROG_CPP

如果不是.cpp文件的话,则不需要添加。


网络异常,图片无法展示
|


2、修改Makefile.am文件 范例提供的Makefile.am文件,需要修改的是在src文件下面的Makefile.am文件。模块名是mod_example的话,不需要这个文件,只需要添加PKG_CONFIG_PATH的环境配置即可。


这里需要说明的是 FREESWITCH_CFLAGS 这样的宏的定义在 freeswitch.pc文件中定义的,在freeswitch编译完成之后会给安装在/usr/local/freeswitch/lib/pkgconfig/freeswitch.pc下,如果提示FREESWITCH_CFLAGS这样的宏没有定义话,就需要在环境变量里添加PKG_CONFIG_PATH的值

或者把freeswitch.pc文件因为是64位的所以复制到/usr/lib64/pkgconfig下


moddir     = @FREESWITCH_MODULES_DIR@
sysconfdir = @FREESWITCH_CONFIG_DIR@
###
# Flags
#
AM_CFLAGS  =
AM_CXXFLAGS=
AM_CPPFLAGS= -I. -I$(includedir)
AM_LDFLAGS = -L. -L$(libdir) -avoid-version -module -no-undefined -shared
###
# GCC (and compatible) specific flags
#
if CC_VENDOR_GNU
AM_CFLAGS += -Wall
endif
###
# SunCC specific flags
#
if CC_VENDOR_SUN
AM_CFLAGS +=
endif
###
# symbol visibility support
#
if CC_HAS_VISIBILITY
AM_CFLAGS   += $(VISIBILITY_CFLAGS)
AM_CXXFLAGS += $(VISIBILITY_CXXFLAGS)
AM_CPPFLAGS += -DSWITCH_API_VISIBILITY=1
endif
###
# add module(s) here, with suffix '.la'
#
mod_LTLIBRARIES = mod_example.la
###
# mod_example
#
mod_example_la_SOURCES = mod_example.c
mod_example_la_CFLAGS  = $(AM_CFLAGS) $(FREESWITCH_CFLAGS)
mod_example_la_CPPFLAGS= $(AM_CPPFLAGS) $(FREESWITCH_CPPFLAGS)
mod_example_la_LDFLAGS = $(AM_LDFLAGS)
mod_example_la_LIBADD  = $(FREESWITCH_LIBS)
# configuration file
#sysconf_DATA = example.conf.xml
#
# install configuration
#
#install-sysconfDATA:
# $(INSTALL) -d $(DESTDIR)/$(sysconfdir)
# for x in $(sysconf_DATA); do \
#   test -e $(DESTDIR)$(sysconfdir)/$$x || $(INSTALL) -m644 $$x $(DESTDIR)$(sysconfdir)/$$x ; \
# done
复制代码


3、修改了configure.ac文件和Makefile.am文件后就是看一下mod_example.c文件了,文件的内容在上面已经写过了,模块的函数也有很多的文件都有介绍了,就不多介绍了。


4、先执行autogen.sh文件,再行configure文件,再 make 最后make install

c、这种创建自定义模块的方法呢和第二种比较类似,freeswitch的中文指南中也有介绍。就是复制模块后做修改。这种一般在修改完模块自己的makefile.am模块后,要修改freeswitch目录下的configure.ac文件,添加对新增模块的路径


src/mod/asr_tts/mod_unimrcp/Makefile
src/mod/asr_tts/mod_test/Makefile #这是自定义的模块
复制代码


这样就能在自定义的模块中生成Makefile文件。

相关文章
|
存储 缓存 网络协议
freeswitch使用说明
freeswitch使用说明
839 1
freeswitch使用说明
|
Web App开发 存储 编解码
Freeswitch关于支持jsip的配置
1、freeswitch安装过程(安装过程省略,运行环境为centos7,freeswitch1.6.5)
|
11月前
|
小程序
laravel8(二)配置自定义路由文件
关于laravel5添加自定义路由文件,请移步《laravel5.8(十五)新增自定义路由文件》 这里大概记录一下laravel8添加自定义路由文件的过程: 持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情 1:首先在routes目录下创建你要添加的自定义路由文件 我这里直接复制的web.php。 2:修改app/Providers目录下RouteServiceProvider.php文件 我这里也是直接复制web部分的代码改的名字 3:修改app/Http目录下Kernel.php文件 我这里还是直接复制web部分的代码改的名
80 1
|
网络协议 网络安全 数据安全/隐私保护
Ansible模块介绍——配置网络模块、上传下载文件模块
Ansible模块介绍——配置网络模块、上传下载文件模块
386 0
|
IDE Unix 编译器
iOS小技能:Makefile的使用(Makefile的规则、部署脚本、config管理ssh连接)
make是一个命令工具,是一个解释makefile中指令的命令工具。其本质是**文件依赖**,Makefile文件制定编译和链接所涉及的文件、框架、库等信息,将整个过程自动化。
390 0
修改配置文件,编译freeswitch支持H264
修改配置文件,编译freeswitch支持H264
196 0
|
Linux Perl
FreeSwitch 一些模块的安装
这里列出来 安装libyuv libvpx opus mod_av 等模块的代码方便大家使用
|
XML API 数据安全/隐私保护
|
缓存 NoSQL 应用服务中间件
nginx安装配置Lua模块的支持
nginx安装配置Lua模块的支持
|
API 语音技术
freeswitch的模块中mod_vad的使用说明
介绍 mod_vad是一个freeswitch的模块,实现VAD录音和放音支持打断,vad和asr集成,tts放音支持等。
下一篇
无影云桌面