ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

Spring Boot 流媒体快速上手:4 步把 ZLMediaKit 接进直播项目

Spring Boot 流媒体快速上手:4 步把 ZLMediaKit 接进直播项目 Spring Boot 流媒体快速上手4 步把 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/ZLMediaKitJava 项目要加直播功能但自己写 RTMP 解析、RTSP 握手根本不现实。让 ZLMediaKit 负责收流、转协议、低延迟分发你的 Spring Boot 项目只写鉴权、权限、播放地址这些业务。这篇文章按跑起来 → 看到画面 → 接进业务的顺序带你做完。一句话分工ZLMediaKit 收发流Spring Boot 写业务两个组件之间只有两种交互你的 Spring Boot 调它的 HTTP API加流代理、关流、查流列表、取配置它回调你的 WebHook有人推流、有人起播、流上下线都会 POST 到你的接口由你决定放行还是拒绝。也就是说流媒体能力整个是独立进程Spring Boot 里不需要写一行协议代码。整体链路就一条线推流端 → ZLMediaKit80/1935 端口→ 拉流端你的 Spring Boot 应用挂在旁边通过 API 和 Hook 跟它对话流数据不经过 Java 进程。三步把 ZLMediaKit 跑起来第一步获取代码git clone https://gitcode.com/GitHub_Trending/zl/ZLMediaKit cd ZLMediaKit mkdir build cd build cmake .. make -j4 cd ../release/linux/Debug ./MediaServer第二步确认编译产物就绪。二进制在release/linux/Debug/MediaServer启动时会默认加载同目录的config.ini——注意改配置要改这一份不是 conf/config.ini 那份样例详见 conf/readme.md。不想自己编译的话也可以直接下载对应平台的 release 二进制或 docker 镜像效果一样。第三步确认端口通。启动后执行一行命令curl http://127.0.0.1:80/index/api/getServerConfig能返回一段带secret的 JSON说明 HTTP API80 端口和流媒体服务都活着。RTMP 是 1935RTSP 是 554默认都在 conf/config.ini 里能看到。最小闭环验证推流、拉流、播放 目标5 分钟内看到画面。流媒体是先播后推的先推一条流再用标准地址拉。推流拿任意一个 mp4 用 ffmpeg 推ffmpeg -re -i demo.mp4 -c copy -f flv rtmp://127.0.0.1:1935/live/test拉流/播放同一条流live/test三种协议地址如下浏览器场景首选 HTTP-FLV协议播放地址格式说明HTTP-FLVhttp://127.0.0.1/live/test.flv低延迟流媒体播放浏览器低延迟直播首选HLShttp://127.0.0.1/live/test/hls.m3u8兼容性最好适合回放/点播式场景RTMPrtmp://127.0.0.1:1935/live/test客户端拉流、二次推流用 VLC 或任意 HTTP-FLV 播放器打开第一行地址看到画面就说明收发流链路全通了。记住这个规律流 id 就是 URL 本身后面所有鉴权、管理都围绕它。把 Spring Boot 接进业务三个高频问题问题一推流要不要鉴权要而且逻辑必须放在你的业务系统里。ZLMediaKit 自己不做业务判断它的做法是有人来推流时先暂停POST 你的接口问你。做法是在配置里打开 hook 总开关并填回调地址[hook]下设enable1、on_publishhttp://your-app:8080/hook/on_publish你的 Spring Boot 端点只需几行返回 JSONcode0放行、非 0 拒绝默认 10 秒超时PostMapping(/hook/on_publish) public String onPublish(RequestParam MapString, String p) { boolean ok streamAuth.check(p.get(stream)); // 查库/查 Redis return ok ? {\code\:0} : {\code\:-1}; }问题二流上下线怎么感知别轮询挂一个回调。配on_stream_changed流上线/下线都会触发参数里带register1或0你在端点里把状态写进 DB 或 Redis 就行前端列表就能实时刷新。如果以后做有人观看才去源站拉流的按需拉流再配上on_stream_not_found。问题三播放地址怎么按协议生成就是字符串拼接同一条流只换尾巴。你的服务里维护一份流表对外下发地址时HTTP-FLV 拼/{app}/{stream}.flvHLS 拼/{app}/{stream}/hls.m3u8RTMP 拼rtmp://host:1935/{app}/{stream}。前端拿到哪个协议就播哪个管理操作如addStreamProxy加拉流代理、getMediaList查流列表都是/index/api/下的标准 HTTP 接口带上secret参数即可本机 127.0.0.1 访问可免 secret。上线前最容易踩的 3 个坑 ⚠️坑 1配了 on_publish但任何人都能推。原因是[hook]的总开关还是enable0回调根本不会触发。把enable1打开再重启鉴权才生效。坑 2调 API 报无权限/403。原因是最敏感的接口必须带secret参数你漏传了。请求里补上secret配置里的值注意同一台机器从 127.0.0.1 访问是免 secret 的本地能跑线上 403基本都是这个。坑 3HTTP-FLV 本地能播套一层 Nginx 就卡死。原因是 Nginx 默认缓冲并掐长连接把流攒住了。在转发 ZLMediaKit 的 location 里加proxy_buffering off;同时把proxy_read_timeout调到 60 秒以上。先把最小闭环里推流、拉流两步在自己机器上跑通看到画面后再照第五节把on_publish端点接进你的 Spring Boot 工程剩下的就是按流表生成地址了。【免费下载链接】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),仅供参考
返回列表