当前位置: 首页 > news >正文

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-config

2.2 安装核心依赖

ZLMediaKit依赖的几个关键库要特别注意版本:

sudo apt install -y libssl-dev libsrtp2-dev libffmpeg-dev

这里有个小坑要注意:openssl版本最好在1.1.1以上,否则可能遇到WebRTC连接问题。可以用openssl version查看当前版本,如果太低需要先升级。

3. 源码编译ZLMediaKit

3.1 获取源码

直接从Gitee克隆最新代码(比GitHub快很多):

git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit git submodule update --init --recursive

3.2 编译配置

创建构建目录并配置编译选项:

mkdir build cd build cmake .. -DENABLE_WEBRTC=on -DCMAKE_BUILD_TYPE=Release

几个关键参数说明:

  • -DENABLE_WEBRTC=on开启WebRTC支持
  • -DCMAKE_BUILD_TYPE=Release生成优化后的发布版本

3.3 编译与安装

启动编译(建议用-j参数加速):

make -j$(nproc)

编译完成后,直接运行即可,不需要make install:

cd release/linux/Release ./MediaServer -c ../config.ini

4. 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/stream

RTMP推流示例(适合直播场景):

ffmpeg -re -i input.mp4 -c:v libx264 -preset fast -f flv rtmp://localhost/live/stream

HTTP-FLV推流示例(适合网页播放):

ffmpeg -re -i input.mp4 -c:v libx264 -preset fast -f flv http://localhost/live/stream.flv

4.3 推流参数优化

几个提升推流质量的实用参数:

  • -preset ultrafast最低延迟但高CPU占用
  • -tune zerolatency进一步降低延迟
  • -g 30关键帧间隔,影响seek性能

5. 多终端播放测试

5.1 播放地址格式

ZLMediaKit会自动转换协议,同一个流可以用多种方式访问:

  • RTSP:rtsp://[IP]/live/stream
  • RTMP:rtmp://[IP]/live/stream
  • HTTP-FLV:http://[IP]:8080/live/stream.flv
  • HLS:http://[IP]:8080/live/stream/hls.m3u8

5.2 常用播放器测试

VLC测试所有协议:

vlc rtsp://localhost/live/stream

FFplay测试HTTP-FLV:

ffplay 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 推流延迟优化

遇到高延迟时可以尝试:

  1. 降低编码复杂度:-preset faster
  2. 减少缓冲大小:-fflags nobuffer
  3. 关闭B帧:-bf 0

6.3 内存泄漏排查

长时间运行后如果内存增长异常,可以:

valgrind --tool=memcheck --leak-check=full ./MediaServer

7. 进阶配置技巧

7.1 开启HTTPS支持

生成自签名证书:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

启动时加载证书:

./MediaServer -s cert.pem -k key.pem

7.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] enable=1 app_name=record file_path=/var/record

录制文件会自动按日期和时间分目录存储。

http://www.jsqmd.com/news/697953/

相关文章:

  • 【仅限首批内测开发者】VSCode 2026“Context-Aware Completion”功能全解锁:含6类高危误补全拦截规则与自定义意图标记语法
  • 如何高效使用BilibiliDown:5个实用场景解决你的B站视频下载难题
  • 英雄联盟终极自动化工具:如何用LeagueAkari提升你的游戏体验
  • 核心基础-Web服务与代理-Nginx 进阶:location 匹配、反向代理、缓存、Rewrite 规则
  • std::string vs std::string_view
  • 从JDK8到21:SpringBoot核心组件适配实战与性能优化
  • Proteus仿真玩转51单片机:用光敏电阻和LCD1602模拟智能光照检测系统(含AD21原理图解析)
  • Z-Image-LM权重验证工具实操:LM系列在中英文混合提示词下表现对比
  • 2026年内蒙古5公分黄锈石地铺石、市政中国黑地铺石哪家口碑好 - myqiye
  • 保姆级教程:在Ubuntu 20.04 + ROS Noetic上从零编译运行LIO-SAM(含GTSAM 4.0.2避坑指南)
  • C04-【Excel实战】差旅费用报销管理:从日期处理到多维度分析报告
  • 2026架构前瞻:从文本生成到跨端操作,移动端agnet执行体的底层范式转移
  • Elasticsearch 底层存储与写入链路:从 Segment 到 Merge,一篇搞懂
  • 终极开源游戏启动器:Starward的完整使用指南与高效技巧
  • 解读2026年中古风咖啡厅预算,宜昌靠谱装修服务有哪些 - 工业品牌热点
  • 揭秘Home Assistant本地控制架构:突破云端依赖的美的智能家电技术实现
  • 从限购到畅通:GLM-5.1 Coding Plan接入攻略
  • 把 BigQuery 接进 SAP HANA Cloud,Google BigQuery Remote Source 的实战思路与落地细节
  • 从0到1掌握TMDB:API Key、Session_ID、Account_ID获取指南(含一键获取脚本,调用源码和SDK)
  • 5分钟掌握网站离线下载:Python网站下载器实用指南
  • 总结2026年宜昌意式风格建筑排名,意式风格地毯选购攻略 - mypinpai
  • B站视频下载终极指南:用BilibiliDown三步搞定离线观看
  • 5个技巧快速掌握AKShare:Python金融数据获取终极指南
  • 保姆级教程:用CS5266+MA8621芯片组,从零设计一个Type-C七合一拓展坞(附PCB/原理图)
  • 别再扔了!手把手教你用美工刀和砂纸复活严重氧化的烙铁头(附日常保养技巧)
  • 终极图表数据提取指南:如何用WebPlotDigitizer提升科研效率700%
  • 从机器人到AR:旋转向量与矩阵的Python实现,在OpenCV和三维视觉里怎么用?
  • 华为Pura X Max正式开售:阔折叠的破局者,华为生态棋局落下重要一子
  • 从SBC到LDAC:高通QCC30xx/51xx系列蓝牙音频平台解码能力全解析
  • 讲讲南昌市东堃职业培训学校,口碑如何值得推荐吗? - 工业推荐榜