1、接口:/on_stream_none_reader
流无人观看时事件,用户可以通过此事件选择是否关闭无人观看的流。
2、方法参数
public JSONObject onStreamNoneReader(@RequestBody OnStreamNoneReaderHookParam param)
@RequestBody:表示请求体中的 JSON 数据会被自动绑定到 OnStreamNoneReaderHookParam 类的实例 param 中。
Spring 会自动解析请求体中的 JSON 数据并将其映射到该对象的字段上(需要确保字段名匹配)。
OnStreamNoneReaderHookParam:
这是一个自定义的 Java Bean,用于封装 ZLMediaKit 的回调参数。
它可能包含以下字段(根据 ZLMediaKit 的回调文档):
mediaServerId:媒体服务器的唯一标识。
schema:流的协议(如 rtsp 或 rtmp)。
app:应用名称(如 live)。
stream:流 ID。
3、日志记录
logger.info("[ZLM HOOK]流无人观看:{}->{}->{}/{}", param.getMediaServerId(), param.getSchema(), param.getApp(), param.getStream());
使用日志记录工具 logger,打印出当前触发无人观看事件的流的相关信息。
日志内容:
[ZLM HOOK]流无人观看:固定的日志前缀,标识该日志来源于 ZLMediaKit 的 Hook 回调。
{}:占位符,按顺序填充参数。
日志中打印的信息:
param.getMediaServerId():媒体服务器 ID。
param.getSchema():流协议(如 rtsp 或 rtmp)。
param.getApp():应用名称。
param.getStream():流 ID。
4、调用业务逻辑
boolean close = mediaService.closeStreamOnNoneReader(param.getMediaServerId(), param.getApp(), param.getStream(), param.getSchema());
调用 mediaService.closeStreamOnNoneReader(…) 方法,执行业务逻辑,决定是否关闭无人观看的流。
mediaService 是一个服务对象(通常是 @Service 注解的 Spring Bean)。
传入参数:
param.getMediaServerId():媒体服务器 ID。
param.getApp():应用名称。
param.getStream():流 ID。
param.getSchema():流协议(如 rtsp 或 rtmp)。
返回值:
close 是布尔值,表示是否成功关闭流。
5、构造返回值
ret.put("code", close);
return ret;
创建一个 JSONObject 实例(依赖于 com.alibaba.fastjson.JSONObject 或类似的 JSON 库)。
将 close 结果存入 JSON 对象中,键为 “code”,值为布尔值 close。
返回构造的 JSON 对象,作为 API 的响应。
6、功能和使用场景
1、功能描述:
该接口用于处理 ZLMediaKit 的回调事件,当某个流没有观看者时,调用该接口。
接口会根据传入的流信息,调用业务逻辑(通过 mediaService),决定是否关闭无人观看的流。
2、典型使用场景:
直播流管理:
如果一个直播流长时间没有观众,可以自动关闭以释放资源。
自动化流销毁:
当无人观看时,根据业务逻辑关闭流,避免无效流占用系统资源。