:HTTP API 與 WebHook 配置 5 步走)
ZLMediaKit 對接 Spring Boot 實戰(zhàn)HTTP API 與 WebHook 配置 5 步走【免費下載鏈接】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很多 Java 業(yè)務(wù)系統(tǒng)要接流媒體繞不開一個現(xiàn)實問題RTSP、RTMP、HLS、HTTP-FLV 各家的協(xié)議棧沒人愿意重寫。結(jié)論先行直接用 ZLMediaKit 做流媒體引擎Spring Boot 只做業(yè)務(wù)——一邊用它的 HTTP API 控制流一邊用 WebHook回調(diào)鉤子把推流、播放、流狀態(tài)事件接回自己的服務(wù)延遲可壓到 500 毫秒內(nèi)。一、場景切入為什么是引擎 業(yè)務(wù)兩層自研流媒體服務(wù)器光是 RTP 組包、協(xié)議互轉(zhuǎn)、斷線重連就要吃掉一個迭代周期ZLMediaKit 把這些做完了還支持 H.264/H.265/AAC/G.711/OPUS 等編解碼。你只需要回答兩個問題流怎么來、怎么關(guān)——調(diào) HTTP API拉流代理、停止、查列表推流/播放/流變更時業(yè)務(wù)要做什么鑒權(quán)、計費、落庫——注冊 WebHook 回調(diào)。兩層之間靠一個secretAPI 密鑰和一組回調(diào) URL 打通。二、環(huán)境準(zhǔn)備3 個前置依賴LinuxmacOS/Windows 亦可、支持 C11 的 GCC、CMake 3.x默認(rèn)端口HTTP 80、RTMP 1935、RTSP 554生產(chǎn)環(huán)境先確認(rèn)沒被占用可執(zhí)行sudo lsof -i:80 -i:554 -i:1935不需要 JDK——MediaServer 是獨立 C 進(jìn)程Spring Boot 只管調(diào)用。三、分步實操5 步Step 1 編譯并啟動 MediaServer。git clone https://gitcode.com/GitHub_Trending/zl/ZLMediaKit cd ZLMediaKit mkdir build cd build cmake .. make -j$(nproc) ./release/linux/Debug/MediaServer產(chǎn)出release/linux/Debug/MediaServer可執(zhí)行文件與同目錄下的config.ini。Step 2 驗證進(jìn)程活著。瀏覽器或 curl 訪問http://127.0.0.1/index/api/getServerConfig返回code:0加全部配置項即連通。Step 3 配置回調(diào)與密鑰。注意改的是release/linux/Debug/config.ini不是conf/config.ini——后者只是模板。在[hook]段[hook] enable1 on_publishhttp://127.0.0.1:8080/api/hook/on_publish on_stream_changedhttp://127.0.0.1:8080/api/hook/on_stream_changed同時把[api]段的secret換成自己的隨機串默認(rèn)值035c73f7-bb6b-4889-a715-d9eb2d1925cc必須改掉。Step 4 Spring Boot 側(cè)兩個端點。一個調(diào) API 的服務(wù)類一個接 hook 的控制器public String addStreamProxy(String id, String url) { return restTemplate.getForObject(http://127.0.0.1/index/api/addStreamProxy ?secret secret vhost__defaultVhost__applive stream id url url enable_hls1enable_rtmp1, String.class); } PostMapping(/api/hook/on_publish) public MapString, Integer onPublish(RequestBody MapString, Object body) { return authPass((String) body.get(stream)) ? Map.of(code, 0) : Map.of(code, -1); } 關(guān)鍵hook 回調(diào)必須盡快返回{code:0}返回code非 0 會拒絕該次推流/播放。Step 5 拉一路流驗證協(xié)議互轉(zhuǎn)。curl http://127.0.0.1/index/api/addStreamProxy?secretxxxvhost__defaultVhost__applivestreamcam1urlrtsp://192.168.1.10:554/cam1產(chǎn)出瀏覽器打開http://127.0.0.1/live/cam1.live.flv出畫面同時 RTSP 源自動轉(zhuǎn)成了 RTMP/HLS/HTTP-TS/fMP4 多種協(xié)議。四、驗證與排錯先看這 3 處getServerConfig返回code:0嗎不是 0 就是 secret 沒帶或帶錯看 MediaServer 日志里的 hook 請求記錄——如果日志里有回調(diào)記錄但流沒起來多半是 Spring Boot 返回的 JSON 缺code字段配置改了沒生效十有八九改的是conf/config.ini。五、進(jìn)階技巧 按需轉(zhuǎn)協(xié)議[protocol]段有enable_hls、enable_rtsp等開關(guān)。置 1 表示有人看才轉(zhuǎn)省 CPU置 0 則首屏秒開、無花屏。性能測試和線上體驗要分開調(diào)。無人觀看自動關(guān)流on_stream_none_reader回調(diào) [general]段的streamNoneReaderDelayMS默認(rèn) 20 秒拉流成本可以跟著觀眾數(shù)走。集群溯源[cluster]段配origin_url支持rtmp://、rtsp://、hls、http-ts 四種模板多個源站用分號分隔、輪詢溯源邊沿站掛了自動切源站。六、避坑指南 ??高頻問題原因與解法改了conf/config.ini不生效進(jìn)程只加載release/linux/Debug/config.ini或用-c參數(shù)顯式指定本地調(diào) API 正常遠(yuǎn)程全部 403只有 127.0.0.1 免密鑰遠(yuǎn)程調(diào)用必須帶secret推流偶發(fā)被拒絕hook 未在timeoutSec默認(rèn) 10 秒內(nèi)返回{code:0}檢查 Spring Boot 響應(yīng)耗時與 JSON 結(jié)構(gòu)首個觀眾看到幾秒黑屏按需轉(zhuǎn)協(xié)議*_demand或enable_*置 1的正常現(xiàn)象追求秒開就對應(yīng)置 0下一步把on_play也接上用 URL 參數(shù)完成播放鑒權(quán)權(quán)限體系就完整閉環(huán)了。【免費下載鏈接】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創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考