Ubuntu 20.04下ZLMediaKit编译全攻略:从依赖安装到WebRTC推流测试

张开发
2026/4/17 8:47:35 15 分钟阅读

分享文章

Ubuntu 20.04下ZLMediaKit编译全攻略:从依赖安装到WebRTC推流测试
Ubuntu 20.04下ZLMediaKit编译全攻略从依赖安装到WebRTC推流测试在流媒体开发领域ZLMediaKit凭借其高性能和丰富的功能支持已成为众多开发者的首选框架。特别是在WebRTC推拉流场景中它展现出了卓越的稳定性和低延迟特性。本文将带你从零开始在Ubuntu 20.04系统上完成ZLMediaKit的完整编译过程并重点解决WebRTC模块配置中的常见问题。1. 环境准备与依赖安装在开始编译ZLMediaKit之前确保你的Ubuntu 20.04系统已经更新到最新状态sudo apt update sudo apt upgrade -y1.1 基础工具链安装编译ZLMediaKit需要以下基础工具链sudo apt install -y build-essential cmake git pkg-config关键版本要求GCC ≥ 7.3CMake ≥ 3.0Git ≥ 2.01.2 OpenSSL编译与配置WebRTC功能需要特定版本的OpenSSL支持建议从源码编译安装wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz tar -xzf openssl-1.1.1w.tar.gz cd openssl-1.1.1w ./config --prefix/usr/local/openssl --openssldir/usr/local/openssl shared zlib make -j$(nproc) sudo make install配置环境变量确保系统能找到新安装的OpenSSLecho export PATH/usr/local/openssl/bin:$PATH ~/.bashrc echo export LD_LIBRARY_PATH/usr/local/openssl/lib:$LD_LIBRARY_PATH ~/.bashrc source ~/.bashrc1.3 其他关键依赖安装WebRTC所需的libsrtp库git clone https://github.com/cisco/libsrtp.git cd libsrtp ./configure --enable-openssl make -j$(nproc) sudo make install安装多媒体相关依赖sudo apt install -y libssl-dev libsdl2-dev libavcodec-dev libavutil-dev ffmpeg2. ZLMediaKit源码获取与准备2.1 克隆源码仓库推荐使用国内镜像源加速下载git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit.git cd ZLMediaKit2.2 初始化子模块这是很多开发者容易忽略的关键步骤git submodule update --init --recursive注意如果网络环境不佳可能导致子模块下载失败。此时可以尝试多次执行该命令或手动修改.gitmodules文件中的仓库地址为国内镜像源。3. 编译配置与构建3.1 创建构建目录mkdir build cd build3.2 CMake配置选项启用WebRTC支持的核心配置命令cmake .. -DENABLE_WEBRTCon \ -DOPENSSL_ROOT_DIR/usr/local/openssl \ -DOPENSSL_LIBRARIES/usr/local/openssl/lib常用编译选项选项说明默认值ENABLE_WEBRTC启用WebRTC支持OFFENABLE_SRT启用SRT协议支持OFFENABLE_RTPPROXY启用RTP代理功能OFFBUILD_SHARED_LIBS构建动态链接库OFF3.3 开始编译使用多核并行编译加速过程make -j$(nproc)3.4 常见编译问题解决问题1OpenSSL路径错误症状Could NOT find OpenSSL, try to set the path to OpenSSL root folder...解决方案确保环境变量已正确设置显式指定OpenSSL路径cmake .. -DOPENSSL_ROOT_DIR/usr/local/openssl问题2libsrtp链接失败症状undefined reference to srtp_init解决方案检查libsrtp是否安装成功添加链接路径export PKG_CONFIG_PATH/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH4. WebRTC推流测试实战4.1 准备运行环境编译完成后生成的可执行文件位于cd release/linux/Debug复制Web测试页面cp -r ../../../www .生成SSL证书用于HTTPS和WebRTCopenssl req -newkey rsa:2048 -nodes -keyout ssl.key -x509 -days 365 -out ssl.crt cat ssl.key ssl.crt ssl.pem4.2 启动媒体服务器./MediaServer -s ./ssl.pem4.3 浏览器测试访问以下URL进行测试https://[服务器IP]/webrtc/测试场景示例推流端点击Push按钮允许浏览器访问摄像头和麦克风观察视频是否正常传输播放端点击Play按钮输入推流端生成的流ID检查视频延迟和画质4.4 性能优化参数在config.ini中添加以下WebRTC相关配置[webrtc] # 启用UDP传输 enable_udp1 # 启用TCP传输 enable_tcp1 # 端口范围 port_range30000-40000 # 关键帧请求间隔 keyframe_gop1005. 高级配置与生产环境部署5.1 系统调优提高文件描述符限制ulimit -n 65535调整内核网络参数echo net.core.rmem_max4194304 | sudo tee -a /etc/sysctl.conf echo net.core.wmem_max4194304 | sudo tee -a /etc/sysctl.conf sudo sysctl -p5.2 守护进程配置创建systemd服务文件[Unit] DescriptionZLMediaKit Media Server Afternetwork.target [Service] Typesimple Usermedia WorkingDirectory/opt/zlm/release/linux/Debug ExecStart/opt/zlm/release/linux/Debug/MediaServer -c /opt/zlm/config.ini -s /opt/zlm/ssl.pem Restartalways RestartSec5s [Install] WantedBymulti-user.target5.3 监控与日志启用详细日志记录[log] # 日志级别0-40为最详细 level3 # 日志文件路径 file_path./logs # 单个日志文件大小(MB) max_size506. WebRTC扩展功能开发6.1 自定义信令协议ZLMediaKit支持通过插件扩展WebRTC信令协议。基本开发流程创建插件目录结构webrtc-plugin/ ├── CMakeLists.txt └── src/ └── webrtc_signaling.cpp实现核心接口class WebRTCSignaling : public WebRTCInterface { public: void onOffer(const string offer, const onResp cb) override { // 处理SDP offer string answer generateAnswer(offer); cb(answer); } };6.2 集成STUN/TURN服务配置外网可访问的WebRTC服务[webrtc] # STUN服务器地址 stun_serverstun.l.google.com:19302 # TURN服务器配置 turn_serverturn:example.com:3478 turn_userusername turn_passwordpassword6.3 性能监控接口ZLMediaKit提供了丰富的API用于监控WebRTC会话状态GET /index/api/getWebRTCInfo响应示例{ code: 0, data: { sessions: 15, bitrate: 2500000, loss_rate: 0.02 } }在实际项目部署中我们发现WebRTC的UDP传输在跨运营商环境下可能会出现连接不稳定的情况。这时可以尝试启用TCP回退功能或者结合QUIC协议来改善传输质量。对于大规模并发场景建议将TURN服务器部署在边缘节点并启用ZLMediaKit的集群模式来实现负载均衡。

更多文章