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目录下,通过CFLAGS和LDFLAGS手动指定 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 modules中mod_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"/>

1338

被折叠的 条评论
为什么被折叠?



