0 引子
之前在CentOS 7.2上安装的FreeSwitch是从官方的RPM源上直接拉下来的,虽然能够正常使用,但是因为我们需要对FreeSwitch的某些模块进行修改,因此最终还是需要手动编译安装。
在我第一次的编译过程中出现了很多坑,因此记录一下,以备将来使用。
环境:
- 系统:CentOS7.9
- GCC:9
- FreeSwitch:1.8.7
- ffmpeg:3.4.9
- nginx:1.25.2(当前最新)
为了展示排错的流程,我就先从FreeSwitch开始,经过FFmpeg,最后是Nginx。
其中FFmpeg中的libavformat和libswscale两个库是FreeSwitch中mod_av所依赖的,而使用FFmpeg进行视频推流的测试则需要Nginx搭建一个简单的rtmp服务器。
1 编译FreeSwitch
这个里面的教程有点老,但是不至于用不了
https://developer.signalwire.com/freeswitch/FreeSWITCH-Explained/Installation/Linux/CentOS-7-and-RHEL-7_10289546/
### 1.2 通过signalwire源下载一些依赖
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# 初始化一些环境变量
echo "signalwire" > /etc/yum/vars/signalwireusername
echo "TOKEN" > /etc/yum/vars/signalwiretoken
# 添加官方推荐的源
yum install -y https://$(< /etc/yum/vars/signalwireusername):$(< /etc/yum/vars/signalwiretoken)@freeswitch.signalwire.com/repo/yum/centos-release/freeswitch-release-repo-0-1.noarch.rpm epel-release centos-release-scl
# 更新源数据
yum update
# 安装编译所需工具
yum install yum-utils yum-plugin-ovl rpmdevtools git
# 这一步的时候应该会出现一个spandsp和spandsp3的冲突,我选择的是安装spandsp3,所以使用这个命令先跳过冲突
yum-builddep -y freeswitch --skip-broken
yum remove -y spandsp
yum install -y spandsp3-devel
# 安装GCC
yum install -y devtoolset-9-gcc*
scl enable devtoolset-9 'bash'
|
1.3 下载源码
1
2
3
4
|
cd ~
git clone https://github.com/signalwire/freeswitch.git
cd freeswitch
git checkout v1.8.7
|
1.4 编译以及撞墙
如果在编译前你的环境流没有ffmpeg相关的东西的话,建议先看[第二节](# 2 编译FFmpeg),等到装完ffmpeg和相关库之后再回来看,具体原因我会在下面解释。
1
2
3
4
5
6
7
8
|
cd ~/freeswitch
./bootstrap.sh -j
./configure --enable-portable-binary \
--prefix=/usr --localstatedir=/var --sysconfdir=/etc \
--with-gnu-ld --with-python --with-erlang --with-openssl \
--enable-core-odbc-support
make -j
|
我在执行到make
这个地方的时候遇到了这么一个问题:
error You must install libavformat-dev and libswscale-dev to build mod_av
这是因为没有mod_av所需要的libavformat和libswscale导致的,这两个都是可以通过安装ffmpeg解决的。
但是现在CentOS7真的是太古旧了,根本不好找合适的RPM包,所以最好还是自己编译安装。可以先跳到[第二节](# 2 编译FFmpeg),把FFmpeg编译完成之后再回来处理FreeSwitch的问题。
在编译完FFmpeg并更新动态库缓存之后就可以重新实施make
了,如果make
一切正常,就可以继续执行下面的步骤了:
1
2
3
|
make install 2>&1 | tee make.log
make cd-sounds-install
make cd-moh-install
|
如果一切顺利的话,就可以使用freeswitch了
2 编译FFmpeg
2.1 下载源码
1
2
3
4
5
6
7
|
cd ~
git clone https://github.com/FFmpeg/FFmpeg.git
cd FFmpeg
git checkout n3.4.9
# 2.x版本中AVStream这个结构体里没有codecpar这个成员
# 而4.4.4中avresample这个依赖库被废弃了。
# 经过测试3.4.9一切正常
|
2.2 编译并安装
1
2
3
4
|
# 编译avresample这个库以及生成动态链接库
./configure --enable-avresample --enable-shared
make -j
make install 2>&1 | tee make.log
|
2.3 更新动态链接库
1
2
3
4
|
ldconfig
# 有些情况下,上面的那个命令可能不太好用,可能需要手动export一下环境变量。
编译生成的动态库文件在/usr/local/lib/这个路径下,可以通过下面这个命令来导入:
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:${PKG_CONFIG_PATH}
|
到此为止,我们就编译完了FFmpeg,如果你是从上一章跳过来的,现在就可以点击[这里](# 1.4 编译以及撞墙)跳回去了。