本来想采用 CentOS7 编译,过程中各种ssl版本低,cmake版本低的错误。于是采用 Debian12 编译,实现了语音对讲。后续再尝试在 CentOS7 上进行编译。
系统情况
系统环境:
- 服务器:128GB 内存 56 核心 HDD、SSD、NVME 多硬盘
- 操作系统:Debian-12.9
- 网卡:万兆网卡
依赖库
核心依赖库:
- openssl
- cmake
- libsrtp
参见 ZLM 官方的根据系统需要安装的库,逐一进行安装。见:https://docs.zlmediakit.com/zh/tutorial/
需提前安装基本库:
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,解压并复制 ffmpeg
和 ffprobe
到 /usr/local/bin
下。
升级 OpenSSL 到 3.x
这个 Debian12 默认就安装的 3.0 可以用 openssl version -a
进行验证。
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
版本
首先更新系统库:
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):
rpm -ivh *.rpm --nodeps --force
开始编译:
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
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
验证:
[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 中。
echo "/usr/local/lib64/" >> /etc/ld.so.conf
使修改后的 /etc/ld.so.conf 生效
ldconfig -v
cmake 升级
可在 cmake 的官方站点 https://cmake.org/download/,下载 cmake 安装文件。
编译 ZLM 的最低 cmake 版本为 3.16 及以上。
有 sh 版本,也有 tar 源码。可选择下载:
- https://github.com/Kitware/CMake/releases/download/v3.31.7/cmake-3.31.7-linux-x86_64.sh
- https://github.com/Kitware/CMake/releases/download/v3.31.7/cmake-3.31.7-windows-x86_64.msi
- https://github.com/Kitware/CMake/releases/download/v3.31.7/cmake-3.31.7-windows-x86_64.zip
- https://github.com/Kitware/CMake/releases/download/v3.31.7/cmake-3.31.7-linux-x86_64.tar.gz
- https://github.com/Kitware/CMake/releases/download/v3.31.7/cmake-3.31.7.tar.gz
sh安装
解压到本地,copy 并覆盖 /usr/bin/cmake 即可完成安装。
./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/
源码编译安装
采用源码,下载到本地并解压。
tar -zxvf cmake-3.25.3.tar.gz
cd cmake-3.25.3
./configure
make -j8
sudo make install
设置环境变量
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 也能编译通过)
下载地址:
开始编译
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
./configure --enable-openssl --with-openssl-dir=/usr/local/openssl
ZLM 编译
下载ZLM代码
#国内用户推荐从同步镜像网站gitee下载
git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit.git
cd ZLMediaKit
#千万不要忘记执行这句命令
git submodule update --init
开启WebRTC编译
对讲和语音需要 webrtc 支持,需要开启:-DENABLE_WEBRTC
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。
-- 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
下,可进行验证。
cd release/linux/Debug
./MediaServer -c config.ini
ZLM 设置 HTTPS
设置 zlm 支持 ssl
[http]
# HTTP 协议端口
port=19092
sendBufSize=65536
# HTTPS 协议端口
sslport=8443
# 允许跨域请求
allow_cross_domains=1
采用 https://ip:8443/ 进行访问,即可实现对讲。
防火墙操作
查看或添加端口:
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
重启防火墙
systemctl stop firewalld
systemctl start firewalld