FreeSwitch编译部署

1.安装操作系统依赖组件

sudo apt update

sudo apt install -y build-essential pkg-config uuid-dev zlib1g-dev libjpeg-dev libsqlite3-dev libcurl4-openssl-dev libpcre3-dev libspeexdsp-dev libldns-dev libedit-dev libtiff5-dev yasm libopus-dev libsndfile1-dev unzip libavformat-dev libswscale-dev libswresample-dev liblua5.2-dev liblua5.2-0 cmake libpq-dev unixodbc-dev autoconf automake ntpdate libxml2-dev libpq5 sngrep wget vim

FreeSWITCH 依赖 ffmpeg 系列库,Ubuntu22 上使用 libswresample-dev 替代已废弃的 libavresample-dev

    2.安装编译依赖组件

    在opt目录下克隆各依赖库和 FreeSWITCH 源码:

    cd /opt
    
    # 克隆依赖
    git clone https://wget.la/https://github.com/signalwire/libks.git
    git clone https://wget.la/https://github.com/signalwire/signalwire-c.git
    git clone https://wget.la/https://github.com/freeswitch/sofia-sip.git
    git clone https://wget.la/https://github.com/freeswitch/spandsp.git
    
    # 克隆 FreeSWITCH 源码
    git clone https://wget.la/https://github.com/signalwire/freeswitch.git -b v1.10.12
    

    3.编译与安装

    3.1 编译 libks

    cd /opt/libks
    cmake .
    make -j$(nproc)
    sudo make install
    

    等待完成即可。

    3.2.编译 signalwire-c

    cd /opt/signalwire-c
    cmake .
    make -j$(nproc)
    sudo make install

    3.3.编译 spandsp

    cd /opt/spandsp
    cmake .
    make -j$(nproc)
    sudo make install

    发现找不到“CMakeLists.txt”文件则需要执行下面的命令执行

    git checkout -b finecode20230705 0d2e6ac65e0e8f53d652665a743015a88bf048d4
    ./bootstrap.sh
    ./configure
    make -j$(nproc)
    sudo make install
    

    3.4.编译 sofia-sip

    cd /opt/sofia-sip
    ./bootstrap.sh
    ./configure
    make -j$(nproc)
    sudo make install

    3.4.编译 FreeSWITCH 主程序

    cd /opt/freeswitch
    ./bootstrap.sh

    清理旧版 FFmpeg 残留(关键!避免路径冲突)

    # 卸载所有FFmpeg相关包
    sudo apt remove --purge ffmpeg libavcodec-dev libavformat-dev libavutil-dev libswscale-dev -y
    # 清理源码安装残留(如果之前手动编译过)
    sudo rm -rf /usr/local/ffmpeg /etc/profile.d/ffmpeg.sh /etc/ld.so.conf.d/ffmpeg.conf
    # 刷新系统缓存
    sudo apt autoremove -y && sudo apt autoclean
    sudo ldconfig

    安装兼容的 FFmpeg 及开发库

    # 更新源
    sudo apt update
    
    # 安装FFmpeg及开发库(含头文件)
    sudo apt install -y \
      ffmpeg \
      libavcodec-dev \
      libavformat-dev \
      libavutil-dev \
      libswscale-dev

    验证安装

    # 检查FFmpeg版本(应显示4.1.11)
    ffmpeg -version | grep "ffmpeg version"
    
    # 检查关键头文件是否存在(确保编译mod_av时能找到)
    dpkg -L libavcodec-dev | grep "libavcodec.h"
    # 正确输出:/usr/include/x86_64-linux-gnu/libavcodec/libavcodec.h

    当 dpkg -L libavcodec-dev | grep "libavcodec.h" 返回空结果时,通常有以下几种可能的原因和解决方法:

    包未正确安装:首先确认 libavcodec-dev 确实已安装

    dpkg -s libavcodec-dev | grep Status

    如果未安装,请执行:

    sudo apt update
    sudo apt install libavcodec-dev

    文件路径不在标准位置:该头文件可能位于其他路径,尝试更宽松的搜索:

    dpkg -L libavcodec-dev | grep -i avcodec.h

    版本差异:不同版本的 ffmpeg 可能将头文件放在不同位置,尝试全局搜索:

    sudo find /usr -name "libavcodec.h"

    包名差异:某些系统中可能使用不同的包名,比如 libavcodec58-dev 等,可通过以下命令查看可用版本:

    apt search libavcodec | grep dev

    配置 FreeSWITCH,自动识别 FFmpeg

    ./configure  # 自动检测系统中的FFmpeg,无需额外参数

    编译并安装mod_av

    # 进入mod_av模块目录
    cd src/mod/applications/mod_av
    
    # 编译并安装
    make && sudo make install

    3.4.1.编译mod_av时提示 “av_packet_alloc 未声明”

    原因:FFmpeg 头文件未被识别。解决方案:

    解决方案:强制指定 FFmpeg 4.1.11 的头文件和库路径

    Ubuntu 22.04 通过 APT 安装的 FFmpeg 开发库路径如下(必须存在):

    # 头文件路径(包含libavcodec.h等)
    ls /usr/include/x86_64-linux-gnu/libavcodec/
    ls /usr/include/x86_64-linux-gnu/libavformat/
    
    # 库文件路径(包含libavcodec.so等)
    ls /usr/lib/x86_64-linux-gnu/libavcodec.so

    编译mod_av时强制指定 FFmpeg 路径

    mod_av目录下,通过CFLAGSLDFLAGS手动指定 FFmpeg 的头文件和库路径,覆盖默认搜索路径:

    # 进入mod_av目录
    cd /opt/freeswitch/src/mod/applications/mod_av
    
    # 清理旧编译缓存
    make clean
    
    # 强制指定FFmpeg头文件和库路径编译
    make CFLAGS="-I/usr/include/x86_64-linux-gnu" LDFLAGS="-L/usr/lib/x86_64-linux-gnu"
    
    # 安装(若编译成功)
    sudo make install

    3.4.2.加载模块时提示 “无法打开共享对象文件”

    原因:FFmpeg 库路径未被系统识别。解决:

    sudo ldconfig  # 刷新系统库缓存

    3.4.3.show modulesmod_av未显示

    原因:编译未成功或未安装。解决:

    # 重新编译安装mod_av
    cd /opt/FreeSWITCH/freeswitch-1.10/src/mod/applications/mod_av
    make clean && make && sudo make install

    3.4.5.mod_directory未被编译 

    1.mod_directory 是默认模块,通常会自动编译,但需确认配置中未被禁用:

    # 检查配置结果中是否包含 mod_directory(正常会显示)
    grep "mod_directory" modules.conf
    • 若显示 applications/mod_directory,说明已启用;
    • 若未显示,编辑 modules.conf,确保 applications/mod_directory 未被注释。
    • 取消注释重新编译
    # 编译(-j 后面的数字为CPU核心数,加速编译)
    make -j 4
    
    # 安装(仅安装缺失的模块,或重新安装全部)
    make install

    编译完成后,mod_directory.so 会被生成在 /usr/local/freeswitch/mod/ 目录下。

    2.验证模块文件是否存在

    ls -l /usr/local/freeswitch/mod/mod_directory.so
    

    • 若显示文件信息(如 -rwxr-xr-x),说明安装成功;
    • 若仍缺失,检查编译过程中的错误日志(通常在 make 输出中),修复依赖问题后重新编译。

    3.加载模块并验证 

    运行FreeSwitch后

    # 进入 FreeSWITCH 控制台
    fs_cli
    
    # 加载 mod_directory 模块
    load mod_directory
    
    # 验证模块是否加载成功
    module_exists mod_directory  # 应返回 true

    3.4.6.488错误解决

    在 freeswitch 配置文件,sip_profiles/internal.xml 中添加:

    <param name="apply-candidate-acl" value="rfc1918.auto"/>
    <param name="apply-candidate-acl" value="wan.auto"/>

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    大鱼>

    一分也是爱

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值