ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

3 步把 ZLMediaKit 接进 Spring Boot:Java 开发者的流媒体后端方案

3 步把 ZLMediaKit 接进 Spring Boot:Java 开发者的流媒体后端方案 3 步把 ZLMediaKit 接进 Spring BootJava 开发者的流媒体后端方案【免费下载链接】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 是一款高性能流媒体服务器支持 RTSP/RTMP/HLS/WebRTC 等协议与 Spring Boot 集成后你得到一套完整的流媒体后端媒体服务器管流Spring Boot 管业务两者用 HTTP API 和 WebHook 打通。从两个真实业务场景说起如果你在做直播平台用户推流后台要记录这路流是谁的、生成播放地址、下播时切断流如果你在做安防监控回放页面需要实时知道哪些摄像头的流当前在线。这两件事用纯 Spring Boot 都能做但你不想在 Java 里手写 RTSP、RTMP 的协议解析——这部分正是 ZLMediaKit 的职责。先说分工媒体服务器管流Spring Boot 管业务把它想成一家餐厅。厨房MediaServer 进程负责收原料收流、加工协议转换与分发、上菜输出各协议的播放流前台你的 Spring Boot 应用负责点单、查会员资格鉴权、记账数据库、开票播放地址。边界很清晰音视频的流动——接收、转协议、多协议分发——全部由 C 进程完成音视频之外的业务——鉴权、权限、流的归属、计费——全部在 Java 里做两者之间只有两条通道你调它的接口它回调你的接口。三步接入从代码到跑起来的 MediaServer第一步ZLMediaKit 编译部署命令在 Linux 上克隆、编译、启动四条命令git clone https://gitcode.com/GitHub_Trending/zl/ZLMediaKit cd ZLMediaKit mkdir -p build cd build cmake .. make -j4 ./release/linux/Debug/MediaServer -c ../conf/config.ini启动后默认监听 80 端口。所有可调项——端口、secret、hook 回调地址——都在conf/config.ini这一个文件里改。第二步把媒体服务器参数写进 application.propertiesSpring Boot 这边只需要四个参数media.server.host/media.server.port媒体服务器地址media.server.secret鉴权密钥必须与 config.ini 中[api]段的secret完全一致默认值035c73f7-bb6b-4889-a715-d9eb2d1925ccmedia.api.base-url拼出http://host:port/index/api前缀后面直接拼接口名就是完整 URL。第三步用 getServerConfig 验证 Spring Boot 调用媒体服务器 API先别写代码用一行 curl 验通道curl http://127.0.0.1:80/index/api/getServerConfig?secret你的secret能返回配置 JSON说明通道打通。secret 是所有接口的钥匙也是后面大部分坑的来源。两条交互通道你下命令它来通知你 通道一HTTP API你下命令。管理接口全部挂在/index/api/前缀下需要携带 secret 参数。最常用的七个接口一句话说明addStreamProxy建拉流代理服务器去拉上游流再本地转推addStreamPusherProxy建推流代理把本地流推到指定上游地址getMediaList查询当前在线的全部流可按 vhost、协议过滤delStreamProxy停止并删除一路代理流getServerConfig查询服务器当前配置部署后自检用getThreadsLoad查看工作线程负载排查卡顿用getStatistic查看在线流数、会话数等运行统计这些接口的注册实现在server/WebApi.cpp找不到某个接口时可以从这里开始搜。通道二WebHook它来通知你。API 是你主动查WebHook 是事件发生时它主动打给你的事件电话。比如有人推流它会请求你的 on_publish 地址你在回调里做门卫查证件式的判断——验用户、验权限返回允许或拒绝。最小可跑 Demo服务类调 addStreamProxy 拉流Service public class StreamProxyService { Value(${media.api.base-url}) private String apiBase; Value(${media.server.secret}) private String secret; private final RestTemplate rest new RestTemplate(); // 告诉媒体服务器拉取 sourceUrl 流在本地以 streamId 转推 public String addStreamProxy(String streamId, String sourceUrl) { MultiValueMapString, String form new LinkedMultiValueMap(); form.add(secret, secret); // 鉴权密钥须与 config.ini 一致 form.add(vhost, __defaultVhost__); form.add(app, live); form.add(stream, streamId); form.add(url, sourceUrl); return rest.postForEntity(apiBase /addStreamProxy, form, String.class).getBody(); } }WebHook 回调配置在哪改改conf/config.ini的[hook]段把各事件指到你的 Spring Boot 应用[hook] enable1 on_publishhttp://127.0.0.1:8080/hook/on_publish on_playhttp://127.0.0.1:8080/hook/on_play on_stream_changedhttp://127.0.0.1:8080/hook/on_stream_changedon_publish/on_play管放不放行鉴权注意要快速返回on_stream_changed管记账流注册/注销用它把流列表实时同步进数据库。Controller 返回 200 之后这条闭环就通了。排坑清单症状最可能的原因处理接口返回无权限secret 不一致检查 application.properties 与[api].secret两处是否逐字相同RestTemplate 超时超时设置不足或服务器不可达显式配置连接/读取超时走 127.0.0.1 访问时 secret 其实可以省略流已断但前端仍显示在线靠轮询状态没同步接on_stream_changed回调实时更新数据库改了 hook 没反应enable0或回调地址媒体服务器访问不到先设enable1再确认媒体服务器能访问你的 Spring Boot 端口下一步先在本机把addStreamProxyon_stream_changed这条 Demo 跑通等开播入库、断流删记录的闭环连上再往上叠你自己的业务逻辑。【免费下载链接】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),仅供参考
返回列表