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

ZLMediaKit(webrtc)在CentOS7上的高效部署与常见问题解决指南

1. 环境准备与依赖安装在CentOS7上部署ZLMediaKit(webrtc)前需要先搞定基础环境。我遇到过不少新手直接克隆代码就开始编译结果被各种报错劝退。下面这些依赖就像盖房子前要打的地基缺一不可。1.1 更新系统与基础工具刚装好的CentOS7就像个毛坯房得先装几样必备工具。建议先执行这些命令yum update -y yum install -y epel-release yum groupinstall -y Development Tools这里有个坑要注意CentOS7默认的git版本太老1.8.x而ZLMediaKit需要2.x版本。我推荐用IUS仓库安装新版yum remove -y git yum install -y https://repo.ius.io/ius-release-el7.rpm yum install -y git236 git version # 应该显示2.36.x1.2 编译工具链升级ZLMediaKit需要较新的gcc和cmake。有次我用默认的gcc4.8编译遇到一堆C11兼容问题折腾了半天才发现是编译器太老。先安装高版本gccyum install -y centos-release-scl yum install -y devtoolset-9 scl enable devtoolset-9 bash gcc --version # 应该显示9.x版本cmake建议用3.20版本wget https://github.com/Kitware/CMake/releases/download/v3.20.5/cmake-3.20.5.tar.gz tar zxvf cmake-3.20.5.tar.gz cd cmake-3.20.5 ./bootstrap make -j$(nproc) make install1.3 关键依赖安装WebRTC功能需要这几个核心组件OpenSSL 1.1千万别用系统自带的1.0版本我吃过这个亏wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz tar zxvf openssl-1.1.1k.tar.gz cd openssl-1.1.1k ./config --prefix/usr/local/openssl --openssldir/usr/local/openssl make -j$(nproc) make installlibsrtp这是WebRTC的加密传输必备wget https://github.com/cisco/libsrtp/archive/refs/tags/v2.3.0.tar.gz tar zxvf v2.3.0.tar.gz cd libsrtp-2.3.0 ./configure --enable-openssl --with-openssl-dir/usr/local/openssl make -j$(nproc) make installFFmpeg处理媒体流的核心yum install -y nasm yasm wget https://ffmpeg.org/releases/ffmpeg-4.4.tar.bz2 tar jxvf ffmpeg-4.4.tar.bz2 cd ffmpeg-4.4 ./configure --prefix/usr/local/ffmpeg --enable-shared make -j$(nproc) make install安装完后记得更新动态库缓存echo /usr/local/lib /etc/ld.so.conf echo /usr/local/ffmpeg/lib /etc/ld.so.conf ldconfig2. ZLMediaKit源码编译2.1 获取源码与子模块官方源码在GitHub但国内用户建议用Gitee镜像git clone --depth 1 https://gitee.com/xia-chu/ZLMediaKit cd ZLMediaKit git submodule update --init这里有个隐藏坑点如果网络不好导致子模块下载失败可以手动修改.gitmodules文件中的URL为gitee镜像地址。2.2 编译配置技巧创建build目录并配置编译选项mkdir build cd build cmake .. \ -DENABLE_WEBRTCON \ -DOPENSSL_ROOT_DIR/usr/local/openssl \ -DOPENSSL_LIBRARIES/usr/local/openssl/lib \ -DCMAKE_INSTALL_PREFIX/usr/local/zlm几个关键参数说明-DENABLE_WEBRTCON必须开启才能支持WebRTCOPENSSL相关路径要指向我们自定义安装的位置CMAKE_INSTALL_PREFIX指定安装目录2.3 编译与安装开始编译建议用tmux或nohupmake -j$(nproc) make install编译完成后在release/linux/Debug下会生成可执行文件MediaServer。我习惯做个软链接方便使用ln -s /usr/local/zlm/release/linux/Debug/MediaServer /usr/local/bin/zlm3. 配置与优化3.1 基础配置调整配置文件通常位于/usr/local/zlm/config.ini重点修改这些部分[rtc] externIP你的公网IP # 必须设置否则内网客户端无法连接 port8000 # 建议保持默认 timeoutSec15 [http] port8091 # WebRTC测试页面端口 sslport443特别提醒如果服务器在NAT后需要在路由器做端口映射且外部端口必须与rtc.port一致否则STUN协议会失效。3.2 性能调优参数根据服务器配置调整[thread] rtmp4 # RTMP线程数 rtsp4 # RTSP线程数 shell1 # API管理线程内存管理设置[protocol] enable_audio1 # 是否处理音频 max_stream_wait_ms5000 # 等待流超时3.3 安全配置建议关闭不必要的协议[protocol] enable_rtmp0 # 如果只用WebRTC可以关闭 enable_rtsp0Hook鉴权配置如需[hook] enable1 admin_paramssecret你的密码4. 运行与管理4.1 启动方式选择测试运行cd /usr/local/zlm/release/linux/Debug ./MediaServer -c /usr/local/zlm/config.ini生产环境建议用systemd管理cat /etc/systemd/system/zlm.service EOF [Unit] DescriptionZLMediaKit Service [Service] Typesimple ExecStart/usr/local/zlm/release/linux/Debug/MediaServer -c /usr/local/zlm/config.ini Restartalways [Install] WantedBymulti-user.target EOF systemctl daemon-reload systemctl start zlm systemctl enable zlm4.2 日志查看技巧默认日志在控制台输出生产环境建议重定向./MediaServer -c config.ini zlm.log 21 关键日志关键字RTC推流成功WebRTC推流建立ICE状态变化网络穿透状态DTLS握手完成加密通道建立4.3 性能监控内置HTTP API可以查看状态curl http://127.0.0.1:8091/api/statistic输出示例{ code: 0, data: { connections: 5, webrtc: { push: 2, play: 3 } } }5. 常见问题解决5.1 WebRTC连接失败排查症状能打开测试页面但无法播放检查步骤确认externIP设置正确检查防火墙firewall-cmd --add-port8000/udp # RTC端口 firewall-cmd --add-port8091/tcp # HTTP端口测试STUN服务curl http://127.0.0.1:8091/index/api/webrtc?applivestreamtest5.2 编译错误处理错误1GLIBCXX版本不匹配strings /usr/lib64/libstdc.so.6 | grep GLIBCXX如果缺少高版本需要更新libstdccp /usr/local/gcc/lib64/libstdc.so.6.0.26 /usr/lib64 rm -f /usr/lib64/libstdc.so.6 ln -s /usr/lib64/libstdc.so.6.0.26 /usr/lib64/libstdc.so.6错误2openssl相关错误确认编译时指定的openssl路径与实际安装路径一致检查ldd MediaServer | grep ssl5.3 音视频问题无声音检查配置文件enable_audio1测试时使用Chrome浏览器对WebRTC支持最完善卡顿调整rembBitRate限制码率检查服务器带宽iftop -i eth06. 进阶技巧6.1 集群部署方案多节点部署时建议使用相同的配置文件通过API控制流量切换curl http://主节点IP:8091/index/api/addStreamProxy?applivestreamtesturlrtmp://备用节点IP/live/test6.2 自定义Web页面默认测试页面在/usr/local/zlm/www可以替换成自己的页面。记得修改script const peer new RTCPeerConnection({ iceServers: [{ urls: stun:你的服务器IP:8000 }] }); /script6.3 录制与回放开启录制功能[record] app_namerecord file_path/data/zlm_records file_second3600回放URL格式http://服务器IP:8091/record/live/流名/2023-07-01/10-00-00.mp4

相关文章:

ZLMediaKit(webrtc)在CentOS7上的高效部署与常见问题解决指南

1. 环境准备与依赖安装 在CentOS7上部署ZLMediaKit(webrtc)前,需要先搞定基础环境。我遇到过不少新手直接克隆代码就开始编译,结果被各种报错劝退。下面这些依赖就像盖房子前要打的地基,缺一不可。 1.1 更新系统与基础工具 刚装好的CentOS7就…...

【AI】可以操控鼠标的智能体

2026-04-02,以下是当前(截至2026年初)可以操作鼠标的AI智能体最新格局,分为操作系统级控制(真鼠标键盘控制)和浏览器级控制两类:第一梯队:操作系统级鼠标控制(全桌面操控…...

OpenClaw飞书机器人集成:千问3.5-9B对话触发详解

OpenClaw飞书机器人集成:千问3.5-9B对话触发详解 1. 为什么选择飞书OpenClaw的私有化方案 去年团队内部开始尝试用AI助手处理日常事务时,我们面临一个典型困境:公有云机器人虽然开箱即用,但所有对话记录和文件都要经过第三方服务…...

别只盯着PID!用STM32的PWM差速控制,让你的循迹小车转弯更稳(附源码分析)

STM32 PWM差速控制:让循迹小车转弯更稳的实战技巧 循迹小车的核心挑战之一是如何实现平滑稳定的转弯控制。许多开发者习惯性地直接套用PID算法,却忽略了更基础的PWM差速控制策略。实际上,通过精心设计的PWM占空比调整方案,完全可以…...

气动元器件选型(工业自动化场景实战指南)

1. 气动技术基础与工业自动化适配性 气动技术作为工业自动化领域的核心驱动方式之一,其本质是通过压缩空气实现能量传递。想象一下,就像我们用吸管吹动纸团一样简单直接——空压机将电动机的旋转动能转化为气压能,再通过各类阀门控制气流方向…...

公司SEO推广与关键词策略的关系是什么_公司SEO推广的长期效果如何确保

公司SEO推广与关键词策略的关系是什么_公司SEO推广的长期效果如何确保 什么是SEO推广? 我们来了解一下什么是SEO推广。SEO,全称搜索引擎优化,是通过优化网站内容和结构,提高其在搜索引擎自然排名中的位置,从而吸引更…...

从PubMed到知识库:手把手教你用Python把医学文献数据存进MySQL/CSV(含完整代码)

从PubMed到知识库:构建医学文献智能管理系统的Python实战指南 在生物医学研究领域,每天都有数以万计的新文献涌入PubMed数据库。面对如此庞大的知识海洋,研究人员常常陷入两难:如何高效获取目标文献?更重要的是&#x…...

假芯片识别与防范:工程师实战指南

1. 假芯片泛滥:半导体行业的隐秘危机最近在调试一块电路板时,我发现一个奇怪的现象:明明使用的是同型号的MCU,但部分板子的功耗异常偏高。经过一周的排查,最终发现问题出在芯片上——我们采购到了一批"套牌"…...

Cesium实战:5分钟搞定飞机轨迹飞行与流光道路效果(附完整代码)

Cesium实战:5分钟实现飞机轨迹飞行与流光道路特效 第一次接触Cesium时,我就被它强大的三维地理可视化能力震撼了。作为一个长期从事WebGIS开发的工程师,我一直在寻找能够快速实现复杂三维场景的工具。直到遇到Cesium.js,才发现原来…...

Python实战:用图论算法解决外卖骑手路径规划(VRP)问题

Python实战:用图论算法解决外卖骑手路径规划(VRP)问题 外卖配送效率直接影响用户体验和平台运营成本。当3名骑手需要处理10个订单时,如何科学分配任务并规划最优路径?本文将构建一个包含时间窗口约束的VRP模型&#xf…...

SeqGPT-560M入门指南:Web界面操作+Jupyter调试+API调用三路径并行

SeqGPT-560M入门指南:Web界面操作Jupyter调试API调用三路径并行 1. 从零开始:认识SeqGPT-560M 如果你正在寻找一个开箱即用、能快速处理中文文本分类和信息抽取的AI工具,那么SeqGPT-560M绝对值得你花十分钟了解一下。 简单来说&#xff0c…...

Unity中如何通过Shader与Bounds控制实现视锥体外物体渲染

1. 为什么需要控制视锥体外物体渲染 在Unity的默认渲染流程中,摄像机只会渲染位于视锥体(Frustum)范围内的物体,这个机制被称为视锥体剔除(Frustum Culling)。这个优化手段能显著提升渲染效率,避…...

别再让MCU直连MOSFET了!用N531搭建你的第一个栅极驱动电路(附PCB文件)

从零构建高效MOSFET驱动电路:N531实战指南 在嵌入式开发中,直接使用MCU的GPIO驱动功率MOSFET是一个常见但危险的做法。我曾亲眼见过一个智能家居项目因为这种设计导致整个控制板烧毁——MOSFET开关缓慢产生的高温不仅损坏了功率器件,还反向影…...

如何成为一名出色的SEO优化师

如何成为一名出色的SEO优化师 在当今的数字化时代,搜索引擎优化(SEO)已经成为了每个企业和个人网站获得流量和提升品牌知名度的关键手段。但是,成为一名出色的SEO优化师并非易事,需要掌握一系列专业知识和技能。本文将…...

别再只会用‘Let‘s think step by step’了:DeepSeek-R1原生思维链的实战调优指南

别再只会用‘Let‘s think step by step’了:DeepSeek-R1原生思维链的实战调优指南 当你在深夜调试一个复杂的代码生成任务时,模型突然输出了一个完全不符合预期的结果。你盯着屏幕,反复检查自己的prompt——明明已经加上了经典的"Lets …...

Python项目依赖管理:如何用pipreqs精准生成requirements.txt(附常见问题解决)

Python项目依赖管理实战:从pipreqs到高效协作的全链路优化 在Python项目开发中,依赖管理就像建筑的地基——它不显眼却决定了整个项目的稳定性。想象一下这样的场景:你花了三天时间调试一个诡异的问题,最后发现只是因为测试环境缺…...

从GIS小白到地图处理高手:我的Global Mapper V26完整安装与汉化避坑实录

从GIS小白到地图处理高手:我的Global Mapper V26完整安装与汉化避坑实录 第一次打开Global Mapper时,我被满屏的英文界面和专业术语吓退了——这大概也是许多GIS初学者共同的经历。作为一款被行业专家誉为"地理信息瑞士军刀"的软件&#xff0c…...

告别命令行!用wxPython+wxFormBuilder给Python脚本做个Windows桌面GUI界面(附完整代码)

告别命令行!用wxPythonwxFormBuilder给Python脚本做个Windows桌面GUI界面(附完整代码) 每次写完一个实用的Python脚本,比如数据爬虫、自动化工具或者数据处理程序,总会遇到一个尴尬的问题——怎么让不懂命令行的同事或…...

OpenClaw故障排查大全:千问3.5-27B接口调用常见错误解决

OpenClaw故障排查大全:千问3.5-27B接口调用常见错误解决 1. 开篇:当OpenClaw遇上千问3.5-27B 上周深夜,我的OpenClaw突然罢工了——一个原本运行良好的自动化脚本在调用千问3.5-27B模型时频繁报错。作为个人效率工具的重度用户,…...

TSMaster安全算法实战:如何用DLL快速实现SeedKey解锁(附常见错误排查)

TSMaster安全算法实战:如何用DLL快速实现Seed&Key解锁(附常见错误排查) 在汽车电子诊断领域,安全访问机制(Seed&Key)如同车辆的电子钥匙,是保护ECU数据安全的重要屏障。作为深耕诊断协议…...

BusyBox根文件系统制作避坑指南:如何让QEMU模拟的ARM板成功挂载你的第一个Linux系统

BusyBox根文件系统制作避坑指南:如何让QEMU模拟的ARM板成功挂载你的第一个Linux系统 当你在QEMU上启动一个精心编译的ARM Linux内核时,最令人沮丧的莫过于看到内核在挂载根文件系统时崩溃。作为嵌入式Linux开发的关键环节,根文件系统的构建往…...

MCP协议实战:用npx免安装部署文件系统服务的完整指南

MCP协议实战:用npx免安装部署文件系统服务的完整指南 在当今快速迭代的开发环境中,如何高效部署和管理文件系统服务成为许多开发者面临的挑战。传统方式往往需要全局安装各种工具包,不仅占用系统资源,还可能引发版本冲突。本文将带…...

MCP23017按键矩阵驱动库:嵌入式I²C GPIO扩展与中断控制

1. 项目概述MentorBitMatrizPulsadores 是一款专为 MentorBit 兼容硬件平台设计的嵌入式驱动库,核心目标是简化基于 MCP23017 IC GPIO 扩展器的按键矩阵(Keypad Matrix)控制与状态读取。该库并非从零实现底层 IC 通信协议,而是构建…...

探索NextDNS Config:优化你的DNS配置以提升网络性能

探索NextDNS Config:优化你的DNS配置以提升网络性能 是一个开源项目,旨在帮助用户轻松地管理并优化其设备上的NextDNS设置。该项目由Yokoffing开发,并提供了多种平台(包括路由器、Android和iOS)的配置文件,…...

探秘 Awesome Rust:你的Rust学习与实践终极宝典 [特殊字符]

探秘 Awesome Rust:你的Rust学习与实践终极宝典 🚀 Awesome Rust是一个精心策划的Rust代码和资源集合,为开发者提供了完整的Rust生态系统指南。无论你是Rust新手还是经验丰富的开发者,这个项目都能为你节省大量寻找优质工具和库的…...

Qwen3.5-9B企业应用:法务合同关键条款提取+风险点标注案例

Qwen3.5-9B企业应用:法务合同关键条款提取风险点标注案例 1. 项目背景与价值 在法务工作中,合同审查是一项耗时且容易出错的任务。传统的人工审查方式需要律师逐条阅读合同文本,识别关键条款并标注潜在风险点,这个过程通常需要数…...

探秘《微信朋友圈统计》Android版:深度解析与实用指南

探秘《微信朋友圈统计》Android版:深度解析与实用指南 项目简介 在数字化时代,我们的社交生活离不开各种应用程序,尤其是微信这样的国民级应用。 是一个开源项目,旨在帮助用户统计和分析其在微信朋友圈发布的内容,从而…...

3步搞定飞书文档批量导出:告别手动复制粘贴的终极解决方案

3步搞定飞书文档批量导出:告别手动复制粘贴的终极解决方案 【免费下载链接】feishu-doc-export 飞书文档导出服务 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 还在为飞书文档的迁移备份而烦恼吗?每次需要导出几十上百个文档…...

06_Cursor之上下文管理与代码库理解

关键字:上下文管理, 代码库理解, 符号引用, Git集成, 图像上下文, Cursor 06_Cursor之上下文管理与代码库理解 Cursor知识体系 Cursor知识体系(续) | -- 上下文管理层 | -- 代码库级理解 | | -- 项目结构分析 | | -- 依赖关系追…...

10个HTTPie CLI高级功能实战技巧:从入门到精通API调试

10个HTTPie CLI高级功能实战技巧:从入门到精通API调试 【免费下载链接】cli 🥧 HTTPie CLI — modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more. 项目地址: https:/…...