ZLMediaKit实用指南:源码编译到首播流,10分钟内打通推流与排错
2026/9/10 11:11:32 网站建设 项目流程

ZLMediaKit实用指南:源码编译到首播流,10分钟内打通推流与排错

【免费下载链接】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 C++11项目地址: https://gitcode.com/GitHub_Trending/zl/ZLMediaKit

想让摄像头的RTSP画面推到网页上播,或者一路RTMP源同时转发成HLS、HTTP-FLV给不同客户端?ZLMediaKit是一个C++11流媒体服务器框架,RTSP、RTMP、HTTP-FLV、HLS、WebRTC、SRT、GB28181多协议推拉流都内置了,带协议互转、录制、HTTP API与WebHook钩子,可以直接部署成直播服务。

📦 项目速览

  • 推拉流、转协议、录制、截图一套服务端能力,不用自己写协议代码
  • 一路流进、多协议出,各协议之间按需互转,播放端用什么协议就出什么协议
  • 内置RESTful API和WebHook钩子,任何语言的业务系统都能调
  • Linux、Windows、macOS、Android可跑,x86和ARM都行
  • 附带C API,可以当成SDK链进你自己的产品

从源码到第一条流

新机器上只需要编译器工具链和CMake,四步拿到能收流的进程:

sudo apt install build-essential cmake git # 装构建工具 git clone https://gitcode.com/GitHub_Trending/zl/ZLMediaKit # 拉源码 cd ZLMediaKit && mkdir build && cd build cmake .. # 默认Debug,把配置样例拷到输出目录 make -j$(nproc)

产物在release/linux/Debug/MediaServer,进程默认加载同目录的config.ini(cmake时会把 conf/config.ini 拷过去,后续改配置改这份就行):

./release/linux/Debug/MediaServer

启动后默认监听HTTP 80、RTMP 1935,跑一句curl 127.0.0.1/index/api/getServerConfig返回JSON即表示服务可用。

核心能力拆解

RTMP / HTTP-FLV:最常用的推拉流组合,src/Rtmp/ 里有完整协议栈、推流客户端和FLV分流器。推流到rtmp://127.0.0.1:1935/live/test后,浏览器直接访问http://127.0.0.1/live/test.flv,无需二次转推。

RTSP:src/Rtsp/ 实现服务器、播放器、推流客户端三种角色,RTP走TCP、UDP、组播都支持,默认端口554。服务端已有的流可以用rtsp://127.0.0.1:554/live/test直接播。

WebRTC:webrtc/ 是完整ICE/DTLS/SRTP协商栈,主打浏览器低延迟播放。8000号UDP和TCP端口必须放通,NAT后面做端口映射时,外网映射端口必须和监听端口一致。

RTP代理与GB28181:src/Rtp/ 接收国标设备直发的PS/TS流,解封装成标准流后再转成任意协议,默认监听10000。

场景实操:拉取内网摄像头流,录制并网页播放

以一台RTSP地址为rtsp://192.168.1.64:554/stream1的摄像头为例。先用API让服务器代拉并挂起这路流:

curl '127.0.0.1/index/api/addStreamProxy?vhost=__defaultVhost__&app=camera&stream=cam01&url=rtsp://192.168.1.64:554/stream1'

服务端自动转出多协议:网页播http://<服务器IP>/live/camera/cam01.flv,移动端播http://<服务器IP>/live/camera/cam01/hls.m3u8。需要落盘存留时调录制接口:

curl '127.0.0.1/index/api/startRecord?schema=rtsp&vhost=__defaultVhost__&app=camera&stream=cam01&mp4_save_path=./record'

🔧 调参与运维

以下开关都在程序目录的config.ini里改,改完重启生效:

  • protocol.enable_hls/protocol.enable_mp4:转协议开关,流上线后自动产出HLS切片或MP4
  • protocol.paced_sender_ms:推流突发不均时开启平滑发送,代价是CPU略涨
  • rtp_proxy.port_range:RTP与RTSP的UDP随机端口范围,防火墙要整段放行

监控走/index/api/下的接口,路径直接拼在HTTP端口上:

  • getStatistic:进程CPU、内存、带宽
  • getMediaList:当前所有流与在线人数
  • getServerConfig/setServerConfig:在线读、改配置
  • close_stream:强制关闭指定流

🧯 高频排错

现象:WebRTC页面始终连不上,无音无画→ 可能原因:8000号UDP被NAT或防火墙拦截,或外网映射端口与服务器监听端口不一致。 → 定位:服务器上执行ss -ulnp | grep 8000确认监听,再看映射表是否同端口。

现象:推流成功,浏览器flv只有声音没有画面→ 可能原因:源流是H265编码,浏览器不支持硬解,而AAC音频正常。 → 定位:调getMediaInfo查看流的编码,确认是H265就换H264转推,或改用WebRTC播放。

现象:流已上线,但hls.m3u8返回404→ 可能原因:enable_hls为0,切片从未生成。 → 定位:grep enable_hls config.ini,改为1后重启再请求。

进阶入口

推播放走通后,下一步是二次开发:把 api/include/ 下的C API链进自有程序当SDK用;录制模块位于src/Record/,MP4、HLS、TS三种封装的读写实现都可以直接参考;流的上下线要通知业务系统时,看server/WebHook.cpp的钩子分发逻辑即可。

【免费下载链接】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 C++11项目地址: https://gitcode.com/GitHub_Trending/zl/ZLMediaKit

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询