保姆级教程:在Ubuntu 22.04上从源码编译ZLMediaKit,并配置为系统服务

发布时间:2026/6/17 18:43:31

保姆级教程:在Ubuntu 22.04上从源码编译ZLMediaKit,并配置为系统服务 从源码构建ZLMediaKitUbuntu 22.04深度编译与系统服务集成指南流媒体服务器的性能优化往往始于最底层的编译环节。对于追求极致控制力的技术团队而言从源码构建ZLMediaKit不仅是获取最新特性的必经之路更是深度定制化的重要起点。本文将完整呈现从依赖环境搭建到systemd服务集成的全链路实践特别针对WebRTC支持、编译参数调优等关键环节提供可复用的解决方案。1. 环境准备与依赖治理在Ubuntu 22.04 LTS上构建C媒体服务需要特别注意系统库的版本兼容性。我们推荐使用全新的操作系统环境以避免潜在的依赖冲突# 基础工具链安装包含SSL和SRTP支持 sudo apt update sudo apt install -y \ build-essential \ cmake \ libssl-dev \ libsrtp2-dev \ ffmpeg \ git关键依赖说明libssl-dev提供HTTPS和SRT协议支持libsrtp2-devWebRTC安全传输的核心依赖ffmpeg转码与封装格式处理提示若需H.265编码支持需额外安装libx265-dev。生产环境建议使用固定版本号的依赖库。常见依赖问题解决方案错误类型排查命令修复方案OpenSSL缺失openssl version安装libssl-devSRTP链接失败pkg-config --modversion libsrtp2检查LD_LIBRARY_PATHC17不兼容g --version升级gcc到9.0版本2. 源码编译与参数调优获取最新代码时建议使用深度克隆方式确保子模块完整git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit.git cd ZLMediaKit git submodule update --init --recursive构建目录建议采用分离式结构ZLMediaKit/ ├── build/ # 编译中间文件 ├── release/ # 输出目录 └── src/ # 源代码关键编译参数解析cmake -DCMAKE_BUILD_TYPERelease \ -DENABLE_WEBRTCtrue \ -DENABLE_SRTtrue \ -DENABLE_TESTSfalse \ -DCMAKE_INSTALL_PREFIX/usr/local/zlm \ ..性能优化参数对照表参数默认值生产环境建议影响范围ENABLE_MP4ONOFF减少10%内存占用ENABLE_HLSON按需启用每个会话增加2MB缓存ENABLE_ASYNCOFFON提升30%并发能力编译完成后验证二进制文件cd release/linux/Release/ ./MediaServer -v # 预期输出示例ZLMediaKit version 4.0 (built with OpenSSL 3.0.2)3. 系统服务化部署创建专用系统账户提升安全性sudo useradd -r -s /usr/sbin/nologin -d /var/lib/zlm zlm sudo mkdir -p /var/log/zlm /etc/zlm sudo chown -R zlm:zlm /var/log/zlm标准systemd单元文件模板[Unit] DescriptionZLMediaKit Media Server Afternetwork.target [Service] Userzlm Groupzlm Typesimple EnvironmentLD_LIBRARY_PATH/usr/local/lib ExecStart/usr/local/zlm/MediaServer -c /etc/zlm/config.ini Restartalways RestartSec5s StandardOutputsyslog StandardErrorsyslog SyslogIdentifierzlm [Install] WantedBymulti-user.target关键配置项说明User/Group避免root权限运行Restart策略异常退出后5秒重启日志输出统一由syslog管理部署流程sudo cp release/linux/Release/* /usr/local/zlm/ sudo cp conf/config.ini /etc/zlm/ sudo systemctl daemon-reload sudo systemctl enable --now zlm4. 生产环境调优指南内存管理建议在config.ini中配置[api] # 限制API内存占用 maxReqSize2048 [hls] # 每个HLS会话缓存限制 fileBufSize512网络参数优化[rtp] # 提升UDP接收缓冲区 udpRecvBuf4194304 # WebRTC专用端口范围 portRange30000-40000监控集成方案# Prometheus指标采集端点 curl http://localhost:8080/api/monitor性能基准测试命令示例# 使用ffmpeg模拟推流 ffmpeg -re -i test.mp4 -c copy -f rtsp rtsp://127.0.0.1:554/live/test # 压力测试工具 sudo apt install -y srt-tools srt-live-transmit srt://:9000 file://con -statsout -statsfreq 5日志轮转配置示例/etc/logrotate.d/zlm/var/log/zlm/*.log { daily missingok rotate 7 compress delaycompress notifempty create 640 zlm zlm sharedscripts postrotate systemctl kill -s USR1 zlm.service endscript }5. 与wvp-GB28181-pro的集成要点GB28181协议栈的特殊配置[rtsp] # 国标服务器模式 gbServerMode1 # SIP端口配置 sipPort5060 [record] # 录像存储格式 mp4AsPlayer0数据库连接池优化建议# 在wvp的application.yml中调整 spring: datasource: hikari: maximum-pool-size: 20 connection-timeout: 30000网络拓扑注意事项端口开放清单554 (RTSP)5060 (SIP)30000-40000 (WebRTC)18080 (HTTP API)防火墙规则示例sudo ufw allow proto tcp from 192.168.1.0/24 to any port 5060 sudo ufw allow proto udp from any to any port 30000:40000NAT穿透配置[webrtc] # 公网IP声明 externIPyour.public.ip # TURN服务器配置 turnServeruser:passwordturn.example.com

相关新闻