ZLMediaKit完整实战从零搭建流媒体服务器并跑通第一条流【免费下载链接】ZLMediaKitWebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT/STUN/TURN server and client framework based on C11项目地址: https://gitcode.com/GitHub_Trending/zl/ZLMediaKitZLMediaKit 是一款基于 C11 的高性能流媒体服务器框架内置 RTSP、RTMP、HTTP-FLV、HLS、WebRTC、GB28181、SRT 等协议并支持相互转换。编译运行后它就是一个开箱即用的流媒体服务用任何工具推一路流浏览器端立刻能播。本文带你一步步完成克隆、构建、启动与验证走完这些步骤你就能拥有一台可用的流媒体服务器。一、先想清楚ZLMediaKit 能帮你做什么定位是免开发即用的流媒体服务器。它不只是个要引用进自己工程里的库server/ 目录下有一个完整的 MediaServer 可执行程序编译后直接运行就是一台流媒体服务器。直播场景全覆盖。RTMP 负责推流和拉流HTTP-FLV 与 WebSocket-FLV 负责浏览器播放HLS 负责广兼容分发延迟表现优秀首帧秒开。国标监控场景也能接。支持 GB28181 接入海康、大华等摄像头设备支持 RTP/PS/TS 推流互转一套服务同时服务直播和视频监控。协议互转是它的核心卖点。你只推一路 RTMP系统自动帮你转出 HLS、RTSP、WebRTC 等多个版本一路流同时服务多种终端。性能经过线上验证。多线程异步 IO 架构单机支撑 10 万级并发连接低延迟模式下可在 500 毫秒以内出画。二、ZLMediaKit 编译环境如何配置备齐这三样一台 Linux 服务器优先。Windows、macOS 同样能编译但 Linux 是性能表现最稳、资料最全的部署目标本文以 Linux 为例。C 编译器加 CMake。默认要求 CMake 3.10 及以上配合 gcc 或 g 即可OpenSSL 默认启用需要系统里装好它。Git 客户端。用来拉取源码和它的子模块后文第一步就会用到。FFmpeg、x264 等属于可选项。只有当你需要 FFmpeg 代理拉流或截图功能时才需要安装cmake/ 目录下为这些依赖都备好了检测脚本缺哪个不会阻塞主流程。想完全跳过编译用 Docker。如果机器上有 Docker直接拉取 zlmediakit/zlmediakit:master 镜像启动端口映射见 docker/ 目录下的说明效果与本文编译出的服务一致。三、如何克隆并编译ZLMediaKit五步出可执行文件克隆时务必带上 --recursive。项目包含多个 git 子模块ZLToolKit、media-server、jsoncpp 等漏了这一步 3rdpart/ 目录会是空的编译必然失败。git clone --recursive https://gitcode.com/GitHub_Trending/zl/ZLMediaKit cd ZLMediaKit最省事的构建命令是 cmake 加 make。建一个 build 目录配置和编译两条命令搞定-j 让 make 用满所有 CPU 核。mkdir -p build cd build cmake .. make -j产物在 release 目录里。编译完成后在 release/linux/ 下按你指定的编译类型分 Debug 或 Release 子目录能找到 MediaServer 可执行文件和配套的 config.ini 配置文件。按需裁剪在 cmake 阶段做。不需要本地测试播放器就传 -DENABLE_PLAYEROFF要开 FFmpeg 代理拉流先装好 FFmpeg 再传 -DENABLE_FFMPEGON其余开关都在 CMakeLists.txt 的 option 列表里。四、ZLMediaKit 启动后如何验证推一路流立刻播出来直接运行可执行文件即可。MediaServer 默认加载同目录下的 config.ini不需要额外参数。./release/linux/Release/MediaServer启动即监听全部端口。默认 HTTP 用 80、RTMP 用 1935、RTSP 用 554、WebRTC 用 8000、SRT 用 9000、RTP 用 10000有端口被占用就改配置文件里对应项再启动。用 OBS、ffmpeg 或手机 App 推一路流。推流地址例如 rtmp://127.0.0.1:1935/live/test推流成功终端会打印流注册日志。三种方式确认播放成功HTTP-FLV播放器工具访问 http://127.0.0.1/live/test.flvHLS浏览器直接打开 http://127.0.0.1/live/test/hls.m3u8RESTful 接口浏览器访问 http://127.0.0.1/swagger/index.html 查看在线 API 文档调用 getMediaList 接口确认流已注册本机访问无需 secret接口能查到流就说明链路全通了。后面所有业务能力都建立在这个跑通的实例之上。五、ZLMediaKit 配置调优四个值得先认识的配置项secret 是敏感接口的钥匙。conf/config.ini 的 [api] 段里有一串 secret 值从 127.0.0.1 调用可省略跨机器调用必须携带部署前建议先改掉默认值。按需转协议能明显省 CPU。[protocol] 段里各协议的 demand 开关置 1 后只有真有人观看才生成对应协议的流代价是首个播放者开播稍慢追求极致体验的协议保持 0。录制能力默认关闭。把 [protocol] 段的 enable_mp4 置 1 并设置 mp4_save_path 到可访问的目录录制出的 MP4 就能通过 HTTP 直接下载。时间戳模式影响画面流畅度。modify_stamp 默认值 2相对时间戳模式对大多数源都平滑遇到花屏或音画不同步时再按注释里三种模式的说明逐项试。六、ZLMediaKit 常见报错处理这几个坑一次说清编译报找不到 ZLToolKit 的头文件。十有八九是子模块没拉下来回仓库根目录执行 git submodule update --init --recursive 再重新编译。端口冲突启动失败。80 和 1935 最容易被 Nginx、老 RTMP 服务占用停掉占用进程或改配置里的端口号即可。改了 conf/config.ini 却不生效。MediaServer 加载的是 release 输出目录里的那份 config.inicmake 每次会重新拷贝覆盖要改就改输出目录里的或者用 -c 参数显式指定配置文件路径。WebRTC 播放连不上。检查 8000 端口的 TCP 和 UDP 是否都放行客户端用的 IP 要和实际监听地址一致公网环境记得走 HTTPS 信令。调试接口行为时加 secret 参数。本机 127.0.0.1 调用可免 secret其他地址访问时带上 secret你的值否则敏感接口一律返回无权限容易误以为是服务异常。从克隆到第一次播放成功你只做了五件事拉代码、编译、跑可执行文件、推流、用接口确认。生产环境要做的也是这几步差别只是配置更全、流更多。基于这个跑起来的实例协议互转、录制、鉴权、按需拉流都可以通过 RESTful 接口和 webhook 直接驱动不需要再碰一行代码。✅ 跨平台部署Linux、Windows、macOS、iOS、Android 全支持x86、ARM 等指令集均可运行✅ 协议全家桶RTSP/RTMP/HTTP-FLV/HLS/WebRTC/GB28181/SRT 一路流多协议互转✅ 高并发低延迟单机 10 万级连接500 毫秒级延迟首帧秒开✅ 业务友好完整 RESTful API 与 web hook鉴权、录制、按需拉流开箱即用✅ 两种用法直接运行 MediaServer 当服务器或通过 api/include/ 的 C API 嵌入自己的产品 ✨【免费下载链接】ZLMediaKitWebRTC/RTSP/RTMP/HTTP/HLS/HTTP-FLV/WebSocket-FLV/HTTP-TS/HTTP-fMP4/WebSocket-TS/WebSocket-fMP4/GB28181/SRT/STUN/TURN server and client framework based on C11项目地址: https://gitcode.com/GitHub_Trending/zl/ZLMediaKit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考