@@ -0,0 +1,80 @@
package org.dromara.sis.controller.zkmedia ;
import com.alibaba.fastjson2.JSONObject ;
import lombok.extern.slf4j.Slf4j ;
import org.dromara.sis.sdk.zkmedia.MediaServerUtils ;
import org.dromara.sis.sdk.zkmedia.model.* ;
import org.springframework.web.bind.annotation.* ;
import java.util.Map ;
@Slf4j
@RestController
@RequestMapping ( " /index/hook " )
public class ZkMediaHookController {
/**
* 服务器定时上报时间, 上报间隔可配置, 默认10s上报一次
*/
@ResponseBody
@PostMapping ( value = " /on_server_keepalive " , produces = " application/json;charset=UTF-8 " )
public HookResult onServerKeepalive ( @RequestBody OnServerKeepaliveHookParam param ) {
log . debug ( " ZLM心跳上报,params: {} " , param ) ;
return HookResult . SUCCESS ( ) ;
}
/**
* rtsp/rtmp/rtp 推流鉴权事件。
*/
@ResponseBody
@PostMapping ( value = " /on_publish " , produces = " application/json;charset=UTF-8 " )
public HookResult onPublish ( @RequestBody OnPushParam param ) {
log . info ( " rtsp/rtmp/rtp 推流鉴权,params: {} " , param ) ;
return HookResult . SUCCESS ( ) ;
}
/**
* 播放器鉴权事件, rtsp/rtmp/http-flv/ws-flv/hls的播放都将触发此鉴权事件。
*/
@ResponseBody
@PostMapping ( value = " /on_play " , produces = " application/json;charset=UTF-8 " )
public HookResult onPlay ( @RequestBody OnPlayHookParam param ) {
Map < String , String > paramMap = MediaServerUtils . urlParamToMap ( param . getParams ( ) ) ;
// 对于播放流进行鉴权
log . info ( " 播放器鉴权事件,params={} " , JSONObject . toJSONString ( param ) ) ;
return HookResult . SUCCESS ( ) ;
}
/**
* rtsp/rtmp流注册或注销时触发此事件; 此事件对回复不敏感。
*/
@ResponseBody
@PostMapping ( value = " /on_stream_changed " , produces = " application/json;charset=UTF-8 " )
public HookResult onStreamChanged ( @RequestBody OnStreamChangedHookParam param ) {
log . info ( " [ZLM HOOK] 流注销, {}->{}->{}/{} " , param . getMediaServerId ( ) , param . getSchema ( ) , param . getApp ( ) , param . getStream ( ) ) ;
return HookResult . SUCCESS ( ) ;
}
/**
* 流无人观看时事件,用户可以通过此事件选择是否关闭无人看的流。
*/
@ResponseBody
@PostMapping ( value = " /on_stream_none_reader " , produces = " application/json;charset=UTF-8 " )
public HookResult onStreamNoneReader ( @RequestBody OnStreamNoneReaderHookParam param ) {
log . info ( " [ZLM HOOK]流无人观看:{}->{}->{}/{} " , param . getMediaServerId ( ) , param . getSchema ( ) , param . getApp ( ) , param . getStream ( ) ) ;
// TODO 关闭无人观看的流
return HookResult . SUCCESS ( ) . setClose ( true ) ;
}
/**
* 流未找到事件,用户可以在此事件触发时,立即去拉流,这样可以实现按需拉流;此事件对回复不敏感。
*/
@ResponseBody
@PostMapping ( value = " /on_stream_not_found " , produces = " application/json;charset=UTF-8 " )
public HookResult onStreamNotFound ( @RequestBody OnStreamNotFoundHookParam param ) {
log . info ( " [ZLM HOOK] 流未找到:{}->{}->{}/{} " , param . getMediaServerId ( ) , param . getSchema ( ) , param . getApp ( ) , param . getStream ( ) ) ;
return HookResult . SUCCESS ( ) ;
}
}