FFmpeg开发笔记(二十七)Ubuntu环境部署ZLMediaKit实现多协议直播推流
1. 为什么选择ZLMediaKit搭建直播环境第一次接触流媒体服务器的时候我试过好几个开源方案最后发现ZLMediaKit是最适合个人开发者和小型团队的。这个国产开源项目用起来特别顺手就像它的名字宅一样在家就能轻松搭建专业级直播系统。相比其他流媒体服务器ZLMediaKit有几个让我爱不释手的优点。首先是协议支持全面从传统的RTSP、RTMP到现代的HTTP-FLV、WebRTC一应俱全。实测下来同一路视频流可以同时用多种协议分发手机、电脑、网页都能无缝播放。其次是性能强悍在我的测试服务器4核8G上能稳定支撑200路720P并发CPU占用还不到30%。最让我惊喜的是它的易用性。配置文件清晰明了命令行参数简单直接遇到问题查文档基本都能解决。不像某些商业方案动不动就要改十几处配置。记得有次给客户演示从零开始搭建到推流成功只用了不到20分钟客户当场就决定采用这个方案。2. 环境准备与依赖安装2.1 系统环境配置我推荐使用Ubuntu 20.04 LTS这个版本长期支持到2025年软件源丰富又稳定。最近在Ubuntu 22.04上测试也没问题但部分依赖包需要手动调整版本。服务器配置建议至少2核4G硬盘空间20G以上毕竟编译过程会产生不少中间文件。先更新系统基础组件sudo apt update sudo apt upgrade -y安装必备工具链sudo apt install -y build-essential cmake git pkg-config2.2 安装核心依赖ZLMediaKit依赖的几个关键库要特别注意版本sudo apt install -y libssl-dev libsrtp2-dev libffmpeg-dev这里有个小坑要注意openssl版本最好在1.1.1以上否则可能遇到WebRTC连接问题。可以用openssl version查看当前版本如果太低需要先升级。3. 源码编译ZLMediaKit3.1 获取源码直接从Gitee克隆最新代码比GitHub快很多git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit git submodule update --init --recursive3.2 编译配置创建构建目录并配置编译选项mkdir build cd build cmake .. -DENABLE_WEBRTCon -DCMAKE_BUILD_TYPERelease几个关键参数说明-DENABLE_WEBRTCon开启WebRTC支持-DCMAKE_BUILD_TYPERelease生成优化后的发布版本3.3 编译与安装启动编译建议用-j参数加速make -j$(nproc)编译完成后直接运行即可不需要make installcd release/linux/Release ./MediaServer -c ../config.ini4. FFmpeg集成与推流实战4.1 FFmpeg安装建议虽然系统自带FFmpeg但我建议手动编译最新版git clone https://git.ffmpeg.org/ffmpeg.git cd ffmpeg ./configure --enable-gpl --enable-libx264 --enable-libx265 make -j$(nproc) sudo make install关键参数说明--enable-libx264支持H.264编码--enable-libx265支持H.265编码4.2 多协议推流命令RTSP推流示例适合监控场景ffmpeg -re -i input.mp4 -c:v libx264 -preset fast -f rtsp rtsp://localhost/live/streamRTMP推流示例适合直播场景ffmpeg -re -i input.mp4 -c:v libx264 -preset fast -f flv rtmp://localhost/live/streamHTTP-FLV推流示例适合网页播放ffmpeg -re -i input.mp4 -c:v libx264 -preset fast -f flv http://localhost/live/stream.flv4.3 推流参数优化几个提升推流质量的实用参数-preset ultrafast最低延迟但高CPU占用-tune zerolatency进一步降低延迟-g 30关键帧间隔影响seek性能5. 多终端播放测试5.1 播放地址格式ZLMediaKit会自动转换协议同一个流可以用多种方式访问RTSP:rtsp://[IP]/live/streamRTMP:rtmp://[IP]/live/streamHTTP-FLV:http://[IP]:8080/live/stream.flvHLS:http://[IP]:8080/live/stream/hls.m3u85.2 常用播放器测试VLC测试所有协议vlc rtsp://localhost/live/streamFFplay测试HTTP-FLVffplay http://localhost:8080/live/stream.flv网页播放器推荐使用flv.js或hls.js直接引用上面的HTTP地址即可。6. 常见问题排查6.1 端口冲突问题如果启动失败先检查默认端口是否被占用554 (RTSP)1935 (RTMP)8080 (HTTP)8443 (HTTPS)可以通过修改config.ini调整端口号。6.2 推流延迟优化遇到高延迟时可以尝试降低编码复杂度-preset faster减少缓冲大小-fflags nobuffer关闭B帧-bf 06.3 内存泄漏排查长时间运行后如果内存增长异常可以valgrind --toolmemcheck --leak-checkfull ./MediaServer7. 进阶配置技巧7.1 开启HTTPS支持生成自签名证书openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365启动时加载证书./MediaServer -s cert.pem -k key.pem7.2 负载均衡配置对于高并发场景可以在nginx后配置多个ZLMediaKit实例upstream mediaservers { server 127.0.0.1:8080; server 127.0.0.1:8081; } server { location /live { proxy_pass http://mediaservers; } }7.3 录制功能配置在config.ini中开启录制[record] enable1 app_namerecord file_path/var/record录制文件会自动按日期和时间分目录存储。