| | |
| | | * 服务器定时上报时间,上报间隔可配置,默认10s上报一次
|
| | | */
|
| | | @ResponseBody
|
| | |
|
| | | @PostMapping(value = "/on_server_keepalive", produces = "application/json;charset=UTF-8")
|
| | | public HookResult onServerKeepalive(@RequestBody OnServerKeepaliveHookParam param) {
|
| | |
|
| | | logger.info("[ZLM HOOK] 收到zlm心跳:" + param.getMediaServerId());
|
| | | // logger.info("[ZLM HOOK] 收到zlm心跳:" + param.getMediaServerId());
|
| | |
|
| | | taskExecutor.execute(() -> {
|
| | | List<ZlmHttpHookSubscribe.Event> subscribes = this.subscribe.getSubscribes(HookType.on_server_keepalive);
|
| | |
| | | * 播放器鉴权事件,rtsp/rtmp/http-flv/ws-flv/hls的播放都将触发此鉴权事件。
|
| | | */
|
| | | @ResponseBody
|
| | |
|
| | | @PostMapping(value = "/on_play", produces = "application/json;charset=UTF-8")
|
| | | public HookResult onPlay(@RequestBody OnPlayHookParam param) {
|
| | | if (logger.isDebugEnabled()) {
|
| | |
| | | }
|
| | |
|
| | | }
|
| | | if (mediaInfo.getRecordAssistPort() > 0 && userSetting.getRecordPath() == null) {
|
| | | logger.info("推流时发现尚未设置录像路径,从assist服务中读取");
|
| | | JSONObject info = assistRESTfulUtils.getInfo(mediaInfo, null);
|
| | | if (info != null && info.getInteger("code") != null && info.getInteger("code") == 0 ) {
|
| | | JSONObject dataJson = info.getJSONObject("data");
|
| | | if (dataJson != null) {
|
| | | String recordPath = dataJson.getString("record");
|
| | | userSetting.setRecordPath(recordPath);
|
| | | result.setMp4_save_path(recordPath);
|
| | | // 修改zlm中的录像路径
|
| | | if (mediaInfo.isAutoConfig()) {
|
| | | taskExecutor.execute(() -> {
|
| | | mediaServerService.setZLMConfig(mediaInfo, false);
|
| | | });
|
| | | }
|
| | | }
|
| | | }
|
| | | }
|
| | | return result;
|
| | | }
|
| | |
|
| | |
|
| | | /**
|
| | | * rtsp/rtmp流注册或注销时触发此事件;此事件对回复不敏感。
|
| | |
| | | logger.info("[ZLM HOOK] 流注销, {}->{}->{}/{}", param.getMediaServerId(), param.getSchema(), param.getApp(), param.getStream());
|
| | | }
|
| | |
|
| | | JSONObject ret = new JSONObject();
|
| | | ret.put("code", 0);
|
| | | ret.put("msg", "success");
|
| | | MediaServerItem mediaInfo = mediaServerService.getOne(param.getMediaServerId());
|
| | | JSONObject json = (JSONObject) JSON.toJSON(param);
|
| | | taskExecutor.execute(() -> {
|
| | |
| | | subscribe.response(mediaInfo, json);
|
| | | }
|
| | | }
|
| | | // 流消失移除redis play
|
| | |
|
| | | List<OnStreamChangedHookParam.MediaTrack> tracks = param.getTracks();
|
| | | // TODO 重构此处逻辑
|
| | |
|
| | | if (param.isRegist()) {
|
| | | // 处理流注册的鉴权信息
|
| | | if (param.getOriginType() == OriginType.RTMP_PUSH.ordinal()
|
| | | || param.getOriginType() == OriginType.RTSP_PUSH.ordinal()
|
| | | || param.getOriginType() == OriginType.RTC_PUSH.ordinal()) {
|
| | |
| | | }
|
| | | }else if ("broadcast".equals(param.getApp())){
|
| | | // 语音对讲推流 stream需要满足格式deviceId_channelId
|
| | | if (param.getStream().indexOf("_") > 0) {
|
| | | String[] streamArray = param.getStream().split("_");
|
| | | if (streamArray.length == 2) {
|
| | | String deviceId = streamArray[0];
|
| | | String channelId = streamArray[1];
|
| | | Device device = deviceService.getDevice(deviceId);
|
| | | if (device != null) {
|
| | | if (param.isRegist()) {
|
| | | if (audioBroadcastManager.exit(deviceId, channelId)) {
|
| | | playService.stopAudioBroadcast(deviceId, channelId);
|
| | | }
|
| | | // 开启语音对讲通道
|
| | | try {
|
| | | playService.audioBroadcastCmd(device, channelId, 60, mediaInfo, param.getApp(), param.getStream(), (msg)->{
|
| | | logger.info("[语音对讲] 通道建立成功, device: {}, channel: {}", deviceId, channelId);
|
| | | });
|
| | | } catch (InvalidArgumentException | ParseException | SipException e) {
|
| | | logger.error("[命令发送失败] 语音对讲: {}", e.getMessage());
|
| | | }
|
| | | }else {
|
| | | // 流注销
|
| | | playService.stopAudioBroadcast(deviceId, channelId);
|
| | | }
|
| | | } else{
|
| | | logger.info("[语音对讲] 未找到设备:{}", deviceId);
|
| | | }
|
| | | }
|
| | | }
|
| | | if (param.getStream().indexOf("_") > 0) {
|
| | | String[] streamArray = param.getStream().split("_");
|
| | | if (streamArray.length == 2) {
|
| | | String deviceId = streamArray[0];
|
| | | String channelId = streamArray[1];
|
| | | Device device = deviceService.getDevice(deviceId);
|
| | | if (device != null) {
|
| | | if (param.isRegist()) {
|
| | | if (audioBroadcastManager.exit(deviceId, channelId)) {
|
| | | playService.stopAudioBroadcast(deviceId, channelId);
|
| | | }
|
| | | // 开启语音对讲通道
|
| | | try {
|
| | | playService.audioBroadcastCmd(device, channelId, mediaInfo, param.getApp(), param.getStream(), 60, false, (msg)->{
|
| | | logger.info("[语音对讲] 通道建立成功, device: {}, channel: {}", deviceId, channelId);
|
| | | });
|
| | | } catch (InvalidArgumentException | ParseException | SipException e) {
|
| | | logger.error("[命令发送失败] 语音对讲: {}", e.getMessage());
|
| | | }
|
| | | }else {
|
| | | // 流注销
|
| | | playService.stopAudioBroadcast(deviceId, channelId);
|
| | | }
|
| | | } else{
|
| | | logger.info("[语音对讲] 未找到设备:{}", deviceId);
|
| | | }
|
| | | }
|
| | | }
|
| | | }else if ("talk".equals(param.getApp())){
|
| | | // 语音对讲推流 stream需要满足格式deviceId_channelId
|
| | | if (param.getStream().indexOf("_") > 0) {
|