Skip to content

本来想采用 CentOS7 编译,过程中各种ssl版本低,cmake版本低的错误。于是采用 Debian12 编译,实现了语音对讲。后续再尝试在 CentOS7 上进行编译。

系统情况

系统环境:

  • 服务器:128GB 内存 56 核心 HDD、SSD、NVME 多硬盘
  • 操作系统:Debian-12.9
  • 网卡:万兆网卡

依赖库

核心依赖库:

  1. openssl
  2. cmake
  3. libsrtp

参见 ZLM 官方的根据系统需要安装的库,逐一进行安装。见:https://docs.zlmediakit.com/zh/tutorial/

需提前安装基本库:

shell
yum -y install gcc gcc-c++ make

sudo apt install build-essential
sudo apt install libssl-dev
sudo apt install libsdl-dev
sudo apt install libavcodec-dev
sudo apt install libavutil-dev

先下载 ffmpeg 7.x,解压并复制 ffmpegffprobe/usr/local/bin 下。

升级 OpenSSL 到 3.x

这个 Debian12 默认就安装的 3.0 可以用 openssl version -a 进行验证。

log
OpenSSL 3.0.13 30 Jan 2024 (Library: OpenSSL 3.0.13 30 Jan 2024)
built on: Fri Feb  2 21:17:10 2024 UTC
platform: linux-x86_64
options:  bn(64,64)
......

如不是 openssl 3.x 需自行升级。

CentOS 7 升级 OpenSSL3

OpenSSL3 下载地址:https://openssl-library.org/source/

因为是 CentOS7,我下载的 openssl-3.0.16.tar 版本

首先更新系统库:

shell
yum update -y
yum install -y perl-IPC-Cmd
yum install -y openssl openssl-devel
yum install -y zlib zlib-devel openssl-devel sqlite-devel bzip2-devel libffi libffi-devel gcc gcc-c++
yum install -y wget

或者安装自制 all-in-one rpm 包(openssl3-install-depends-el7.tar.gz):

shell
rpm  -ivh  *.rpm --nodeps --force

开始编译:

shell
cd openssl-3.0.16
./config --prefix=/usr/local --openssldir=/usr/local/ssl shared zlib
make -j8
make install

# 2
./config --prefix=/usr/local/openssl shared zlib

备份并创建软链接 libssl.so.3

shell
mv -v /usr/bin/openssl /usr/bin/openssl-1.0.1
ln -s /usr/local/bin/openssl /usr/bin/openssl
ln -s /usr/local/include/openssl /usr/include/openssl
ln -s /usr/local/lib64/libssl.so.3  /usr/lib64/libssl.so.3
ln -s /usr/local/lib64/libcrypto.so.3  /usr/lib64/libcrypto.so.3

rm -v /usr/lib64/libssl.so
ln -s /usr/local/lib64/libssl.so.3  /usr/lib64/libssl.so

验证:

log
[openssl-3.0.16]# openssl version -a
OpenSSL 3.0.16 11 Feb 2025 (Library: OpenSSL 3.0.16 11 Feb 2025)
built on: Fri May 30 00:55:47 2025 UTC
platform: linux-x86_64
options:  bn(64,64)
compiler: gcc -fPIC -pthread -m64 -Wa,--noexecstack -Wall -O3 -DOPENSSL_USE_NODELETE -DL_ENDIAN -DOPENSSL_PIC -DOPENSSL_BUILDING_OPENSSL -DZLIB -DNDEBUG
OPENSSLDIR: "/usr/local/ssl"
ENGINESDIR: "/usr/local/lib64/engines-3"
MODULESDIR: "/usr/local/lib64/ossl-modules"
Seeding source: os-specific
CPUINFO: OPENSSL_ia32cap=0x7ffaf3bfffebffff:0x29c67af

Debian 和 Ubuntu 等系统,ssl 默认在:/lib/x86_64-linux-gnu

检查 ssl 库位置,并写入到 ld 中。

shell
echo "/usr/local/lib64/" >> /etc/ld.so.conf

使修改后的 /etc/ld.so.conf 生效

shell
ldconfig -v

cmake 升级

可在 cmake 的官方站点 https://cmake.org/download/,下载 cmake 安装文件。

编译 ZLM 的最低 cmake 版本为 3.16 及以上。

有 sh 版本,也有 tar 源码。可选择下载:

sh安装

解压到本地,copy 并覆盖 /usr/bin/cmake 即可完成安装。

shell
./cmake-3.31.7-linux-x86_64.sh --prefix=/usr
cd /usr/cmake-3.31.7-linux-x86_64
cp -v bin/* /usr/bin/
cp -rv share/* /usr/share/

源码编译安装

采用源码,下载到本地并解压。

shell
tar -zxvf cmake-3.25.3.tar.gz 
cd cmake-3.25.3
./configure 
make -j8
sudo make install

设置环境变量

shell
export CMAKE_ROOT=/usr/local/cmake
ln -s /usr/local/cmake/bin/cmake /usr/bin/cmake
ln -s /usr/local/cmake/bin/ccmake /usr/bin/ccmake

最后用 cmake -version 验证,输出 cmake version 3.25.3 成功。

libsrtp 安装

libsrtp 是 SRTP (Secure Realtime Transport Protocol) 安全实时传输协议的开发包。作为 ZLM WebRTC 直接的依赖(没开启 WebRTC 的时候,我没安装,ZLM 也能编译通过)

下载地址:

开始编译

shell
tar -xvf libsrtp-2.7.0.tar 
cd libsrtp-2.7.0
./configure --enable-openssl
make 
sudo make install

社区推荐 Debian12: libsrtp-2.7.0.tar, CentOS7: libsrtp-2.4.2.tar

shell
./configure  --enable-openssl  --with-openssl-dir=/usr/local/openssl

ZLM 编译

下载ZLM代码

shell
#国内用户推荐从同步镜像网站gitee下载
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit.git
cd ZLMediaKit
#千万不要忘记执行这句命令
git submodule update --init

开启WebRTC编译

对讲和语音需要 webrtc 支持,需要开启:-DENABLE_WEBRTC

shell
mkdir build
cd build
cmake ..
cmake .. -DENABLE_WEBRTC=true

# 指定 SSL
cmake .. -DENABLE_WEBRTC=true  -DOPENSSL_ROOT_DIR=/usr/local/openssl  -DOPENSSL_LIBRARIES=/usr/local/openssl/lib
cmake .. -DENABLE_WEBRTC=true  -DOPENSSL_ROOT_DIR=/usr/local/openssl  -DOPENSSL_LIBRARIES=/usr/local/openssl/lib -DENABLE_TESTS=false

输出日志: WebRTC 功能已开启,即开启了 WebRTC。

log
-- found library: /usr/lib64/libssl.so;/usr/lib64/libcrypto.so, ENABLE_OPENSSL defined
-- MySQL not found.
-- ENABLE_MP4 defined
-- ENABLE_RTPPROXY defined
-- ENABLE_HLS defined
-- Socket default buffer size is set to 262144
-- set_file_group /root/workspace/ZLMediaKit/3rdpart/ZLToolKit/src 78
-- set_file_group /root/workspace/ZLMediaKit/src 211
-- srt 功能已开启
-- found library: /usr/local/lib/libsrtp2.a
-- SCTP LIBRARIES: SCTP_LIBRARIES-NOTFOUND
-- SCTP INCLUDE DIRS: SCTP_INCLUDE_DIRS-NOTFOUND
-- WebRTC 功能已开启
-- add c api tester: h264_media_server
-- add c api tester: h264_pusher
-- add c api tester: httpclient
-- add c api tester: pusher
-- add c api tester: server
-- add c api tester: websocket
-- PCAP LIBRARIES: PCAP_LIBRARIES-NOTFOUND
-- PCAP INCLUDE DIRS: PCAP_INCLUDE_DIRS-NOTFOUND

编译的成果在:ZLMediaKit/release/linux/Debug 下,可进行验证。

shell
cd release/linux/Debug
./MediaServer -c config.ini

ZLM 设置 HTTPS

设置 zlm 支持 ssl

ini
[http]
# HTTP 协议端口
port=19092
sendBufSize=65536
# HTTPS 协议端口
sslport=8443

# 允许跨域请求
allow_cross_domains=1

采用 https://ip:8443/ 进行访问,即可实现对讲。

防火墙操作

查看或添加端口:

shell
firewall-cmd --list-ports
firewall-cmd --list-all
firewall-cmd --add-port=22/tcp --permanent

firewall-cmd --remove-port=1935/tcp --permanent
firewall-cmd --add-port=10000/tcp --permanent
firewall-cmd --add-port=10000/udp --permanent
firewall-cmd --reload

重启防火墙

shell
systemctl stop firewalld
systemctl start firewalld