ZLMediaKit流媒体服务器4条命令跑通编译、推流与低延迟播放的部署指南【免费下载链接】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把一路RTMP推流接进来同时让网页端以低延迟播放还要能转成HLS和GB28181给其他系统消费——这类需求通常需要部署一台流媒体服务器来完成。ZLMediaKit就是一个基于C11的流媒体服务器框架内置RTSP、RTMP、HLS、HTTP-FLV、WebRTC、SRT、GB28181等协议的服务器与客户端实现还支持协议间互相转换。这篇文章带你从零把它的MediaServer编译出来跑通推流、拉流、国标接入并给出常见问题的排查思路。支持哪些协议和功能一张清单看懂能力边界先看清楚它能干什么再决定要不要用它能力类别具体支持直播推/拉流RTMP(S)、RTSP(S)、HTTP-FLV、WebSocket-FLV、HLS(mpegts/fmp4)、HTTP-TS、HTTP-fMP4、SRT实时通信WebRTC含STUN/TURN、SDP协商、GB28181国标设备接入点播与录制MP4点播、MP4/fmp4录制、HLS切片生成扩展能力协议互转RTMP转RTSP/HLS/RTSP转RTMP等、WebHook事件回调、RESTful API管理接口编解码方面H264/H265/AAC/Opus/G711/MP3/VP8/VP9/AV1全协议可用JPEG等部分格式可转发但不参与转协议。从环境准备到启动服务器一条线走下来的编译流程整个过程就是装工具链、拿代码、cmake、make四步中间不需要手动配置第三方库CMake会自动处理。git clone https://gitcode.com/GitHub_Trending/zl/ZLMediaKit cd ZLMediaKit mkdir build cd build cmake .. make -j$(nproc)注意cmake会默认开启部分第三方库的依赖检测如果缺少ffmpeg、mysql、jemalloc等构建时会有提示按提示补装即可不补装也能编译出核心功能。编译产物在release/linux/Debug/或Release目录下可执行文件叫MediaServer同目录会有一份拷贝生成的config.ini。启动时默认加载同目录的配置文件./release/linux/Debug/MediaServer如果你改的是仓库里的配置文件范例它不会被直接加载除非用-c参数显式指定./release/linux/Debug/MediaServer -c /path/to/config.ini启动后控制台会打印监听端口和API信息看到HTTP、RTMP、RTSP、RTP代理的端口全部就绪就说明服务起来了。场景一RTMP推流 HTTP-FLV网页低延迟播放要做什么设备或编码器推一路RTMP流网页播放器用HTTP-FLV地址观看延迟目标是秒开、低延迟。怎么配置默认端口已经够用RTMP监听1935见[rtmp]段port1935HTTP监听80见[http]段port80。80/443/1935如果被占用去[http]和[rtmp]段改掉对应端口即可。推流命令ffmpeg -re -i input.mp4 -c copy -f flv rtmp://127.0.0.1:1935/live/stream1得到什么结果浏览器访问http://服务器IP/live/stream1.flv即可播放配合flv.js等播放器同一路流还自动转出http://服务器IP/index/api/getSnap?applivestreamstream1可取的实时截图。推流断开后continue_push_ms默认给15秒重连窗口这个参数允许推流端短暂掉线后重连期间播放器不会立刻断开。场景二HLS分发与按需转协议要做什么让iOS原生播放器或CDN侧能拉走HLS切片同时按需才生成切片文件避免没人看也在写盘。怎么配置在配置文件的[protocol]段enable_hls1控制是否开启HLS(mpegts)转换enable_hls_fmp41则额外开启fmp4封装的HLS体积更小、延迟略低auto_close1表示流无人观看时直接关闭不再等WebHook回调决定。切片相关参数集中在[hls]段hls_save_path是切片输出目录按需修改。得到什么结果有播放请求进来后按流的app/stream生成m3u8和ts文件http://服务器IP/live/stream1/hls.m3u8即可被标准HLS播放器拉取。转协议是有消费才转的模型省磁盘IO也省CPU。场景三GB28181安防设备接入要做什么把符合GB28181的摄像头或NVR的视频流接进来转成RTSP/HTTP-FLV给其他业务用。怎么配置关键在[rtp_proxy]段port10000是接收设备RTP流的UDP/TCP代理端口支持TS或PS负载port_range30000-35000是随机端口池注释里提醒这个范围要至少保留36个端口同时它也会限制RTSP服务器的UDP端口设备侧把媒体地址指向本机的对应端口即可。接入后通过API下发取流指令ZLMediaKit会处理注册、心跳与RTP收包。得到什么结果设备推上来的PS/TS流被解析成媒体流之后就能用RTSP、HTTP-FLV、WebRTC任意方式拉取相当于把安防协议栈和直播协议栈打通了。调优与排障按现象定位按顺序排查几个高频问题按现象→排查顺序→处理办法处理现象推流握手失败连接秒断。排查顺序先确认1935端口在监听netstat -tlnp | grep 1935再看防火墙/安全组是否放行最后看[rtmp]段handshakeSecond15这是握手超时时间跨公网大延迟时15秒可能不够。处理办法放行端口必要时调大handshakeSecond和keepAliveSecond后者是链路保活超时长时间无数据也会断连。现象画面延迟高、卡顿不平滑。排查顺序先用HTTP-FLV拉流替代HLS对比HLS天然有切片延迟再看源流码率是否稳定。处理办法[rtp]段lowLatency0是RTP打包的低延迟开关注意H264一帧多slice时开启可能花屏[protocol]段paced_sender_ms开启后对转发做平滑发送代价是CPU和内存适合源流抖动明显的场景[rtp_proxy]段merge_frame1提高兼容性但可能增加延迟排障时可对照调整。现象内存占用持续上涨。排查顺序先看并发流数量和播放器数调API/index/api/getMediaList查流列表、/index/api/getStatistic看整体统计再看是否开启了不必要的转协议。处理办法[protocol]段关掉没人用的转换项如enable_hls_fmp4、enable_mp4[rtp_proxy]段gop_cache默认缓存1个GOP用于级联秒开不用startSendRtp/startRecord的话置0可省内存编译时用jemalloc也能改善碎片。管理侧建议把[api]段apiDebug1留着用于调试正式环境记得改强secret敏感API不带secret从非本机访问会被拒绝。接下来可以做什么把API测试用例里的C语言示例跑一遍server.c和pusher.c能帮你快速熟悉MediaServer的API调用形态用[hook]段的WebHook配置把on_publish、on_play事件接到自己的业务系统实现鉴权、录像、计费之类的逻辑参考server目录下main.cpp与WebApi.cpp的结构如果要在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/ZLMediaKit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考