New file |
| | |
| | | alter table wvp_device_channel |
| | | change stream_id stream_id varying(255) |
| | |
| | | custom_longitude double precision, |
| | | latitude double precision, |
| | | custom_latitude double precision, |
| | | stream_id character varying(50), |
| | | stream_id character varying(255), |
| | | device_id character varying(50) not null, |
| | | parental character varying(50), |
| | | has_audio bool default false, |
| | |
| | | // æªæ³¨åç设å¤ä¸åå¤ç |
| | | return; |
| | | } |
| | | logger.info("[æ¶å°å¿è·³]ï¼ device: {}", device.getDeviceId()); |
| | | SIPRequest request = (SIPRequest) evt.getRequest(); |
| | | // åå¤200 OK |
| | | try { |
| | |
| | | import com.genersoft.iot.vmp.media.zlm.dto.hook.*;
|
| | | import com.genersoft.iot.vmp.service.*;
|
| | | import com.genersoft.iot.vmp.service.bean.MessageForPushChannel;
|
| | | import com.genersoft.iot.vmp.service.bean.SSRCInfo;
|
| | | import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
|
| | | import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
|
| | | import com.genersoft.iot.vmp.utils.DateUtil;
|
| | | import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
|
| | | import com.genersoft.iot.vmp.vmanager.bean.OtherRtpSendInfo;
|
| | | import com.genersoft.iot.vmp.vmanager.bean.StreamContent;
|
| | |
| | |
|
| | | if ("rtp".equals(param.getApp())) {
|
| | | String[] s = param.getStream().split("_");
|
| | | if (!mediaInfo.isRtpEnable() || s.length != 2) {
|
| | | if (!mediaInfo.isRtpEnable() || (s.length != 2 && s.length != 4)) {
|
| | | defaultResult.setResult(HookResult.SUCCESS());
|
| | | return defaultResult;
|
| | | }
|
| | |
| | | defaultResult.setResult(new HookResult(ErrorCode.ERROR404.getCode(), ErrorCode.ERROR404.getMsg()));
|
| | | return defaultResult;
|
| | | }
|
| | | logger.info("[ZLM HOOK] æµæªæ¾å°, åèµ·èªå¨ç¹æï¼{}->{}->{}/{}", param.getMediaServerId(), param.getSchema(), param.getApp(), param.getStream());
|
| | | if (s.length == 2) {
|
| | | logger.info("[ZLM HOOK] é¢è§æµæªæ¾å°, åèµ·èªå¨ç¹æï¼{}->{}->{}/{}", param.getMediaServerId(), param.getSchema(), param.getApp(), param.getStream());
|
| | |
|
| | | RequestMessage msg = new RequestMessage();
|
| | | String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId;
|
| | | boolean exist = resultHolder.exist(key, null);
|
| | | msg.setKey(key);
|
| | | String uuid = UUID.randomUUID().toString();
|
| | | msg.setId(uuid);
|
| | | DeferredResult<HookResult> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
|
| | | RequestMessage msg = new RequestMessage();
|
| | | String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId;
|
| | | boolean exist = resultHolder.exist(key, null);
|
| | | msg.setKey(key);
|
| | | String uuid = UUID.randomUUID().toString();
|
| | | msg.setId(uuid);
|
| | | DeferredResult<HookResult> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
|
| | |
|
| | | result.onTimeout(() -> {
|
| | | logger.info("[ZLM HOOK] èªå¨ç¹æ, çå¾
è¶
æ¶");
|
| | | // éæ¾rtpserver
|
| | | msg.setData(new HookResult(ErrorCode.ERROR100.getCode(), "ç¹æè¶
æ¶"));
|
| | | resultHolder.invokeResult(msg);
|
| | | });
|
| | |
|
| | | // å½åæ¥è¯¢ä»¥channelIdä½ä¸ºdeviceIdæ¥è¯¢
|
| | | resultHolder.put(key, uuid, result);
|
| | |
|
| | | if (!exist) {
|
| | | playService.play(mediaInfo, deviceId, channelId, null, (code, message, data) -> {
|
| | | msg.setData(new HookResult(code, message));
|
| | | result.onTimeout(() -> {
|
| | | logger.info("[ZLM HOOK] é¢è§æµèªå¨ç¹æ, çå¾
è¶
æ¶");
|
| | | // éæ¾rtpserver
|
| | | msg.setData(new HookResult(ErrorCode.ERROR100.getCode(), "ç¹æè¶
æ¶"));
|
| | | resultHolder.invokeResult(msg);
|
| | | });
|
| | |
|
| | | resultHolder.put(key, uuid, result);
|
| | |
|
| | | if (!exist) {
|
| | | playService.play(mediaInfo, deviceId, channelId, null, (code, message, data) -> {
|
| | | msg.setData(new HookResult(code, message));
|
| | | resultHolder.invokeResult(msg);
|
| | | });
|
| | | }
|
| | | return result;
|
| | | }else if(s.length == 4){
|
| | | // æ¤æ¶ä¸ºå½ååæ¾ï¼ å½ååæ¾æ ¼å¼ä¸º> 设å¤ID_ééID_å¼å§æ¶é´_ç»ææ¶é´
|
| | | String startTimeStr = s[2];
|
| | | String endTimeStr = s[3];
|
| | | if (startTimeStr == null || endTimeStr == null || startTimeStr.length() != 14 || endTimeStr.length() != 14) {
|
| | | defaultResult.setResult(HookResult.SUCCESS());
|
| | | return defaultResult;
|
| | | }
|
| | | String startTime = DateUtil.urlToyyyy_MM_dd_HH_mm_ss(startTimeStr);
|
| | | String endTime = DateUtil.urlToyyyy_MM_dd_HH_mm_ss(endTimeStr);
|
| | | logger.info("[ZLM HOOK] åæ¾æµæªæ¾å°, åèµ·èªå¨ç¹æï¼{}->{}->{}/{}-{}-{}",
|
| | | param.getMediaServerId(), param.getSchema(),
|
| | | param.getApp(), param.getStream(),
|
| | | startTime, endTime
|
| | | );
|
| | | RequestMessage msg = new RequestMessage();
|
| | | String key = DeferredResultHolder.CALLBACK_CMD_PLAYBACK + deviceId + channelId;
|
| | | boolean exist = resultHolder.exist(key, null);
|
| | | msg.setKey(key);
|
| | | String uuid = UUID.randomUUID().toString();
|
| | | msg.setId(uuid);
|
| | | DeferredResult<HookResult> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
|
| | |
|
| | | result.onTimeout(() -> {
|
| | | logger.info("[ZLM HOOK] åæ¾æµèªå¨ç¹æ, çå¾
è¶
æ¶");
|
| | | // éæ¾rtpserver
|
| | | msg.setData(new HookResult(ErrorCode.ERROR100.getCode(), "ç¹æè¶
æ¶"));
|
| | | resultHolder.invokeResult(msg);
|
| | | });
|
| | |
|
| | | resultHolder.put(key, uuid, result);
|
| | |
|
| | | if (!exist) {
|
| | | SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaInfo, param.getStream(), null,
|
| | | device.isSsrcCheck(), true, 0, false, device.getStreamModeForParam());
|
| | | playService.playBack(mediaInfo, ssrcInfo, deviceId, channelId, startTime, endTime, (code, message, data) -> {
|
| | | msg.setData(new HookResult(code, message));
|
| | | resultHolder.invokeResult(msg);
|
| | | });
|
| | | }
|
| | | return result;
|
| | | }else {
|
| | | defaultResult.setResult(HookResult.SUCCESS());
|
| | | return defaultResult;
|
| | | }
|
| | | return result;
|
| | |
|
| | | } else {
|
| | | // ææµä»£ç
|
| | | StreamProxyItem streamProxyByAppAndStream = streamProxyService.getStreamProxyByAppAndStream(param.getApp(), param.getStream());
|
| | |
| | | |
| | | void playBack(String deviceId, String channelId, String startTime, String endTime, ErrorCallback<Object> callback); |
| | | void playBack(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, String deviceId, String channelId, String startTime, String endTime, ErrorCallback<Object> callback); |
| | | |
| | | void zlmServerOffline(String mediaServerId); |
| | | |
| | | void download(String deviceId, String channelId, String startTime, String endTime, int downloadSpeed, ErrorCallback<Object> callback); |
| | |
| | | void resumeRtp(String streamId) throws ServiceException, InvalidArgumentException, ParseException, SipException; |
| | | |
| | | void getSnap(String deviceId, String channelId, String fileName, ErrorCallback errorCallback); |
| | | |
| | | |
| | | } |
| | |
| | | return; |
| | | } |
| | | MediaServerItem newMediaServerItem = getNewMediaServerItem(device); |
| | | SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, null, null, device.isSsrcCheck(), true, 0, false, device.getStreamModeForParam()); |
| | | String stream = null; |
| | | if (newMediaServerItem.isRtpEnable()) { |
| | | String startTimeStr = startTime.replace("-", "") |
| | | .replace(":", "") |
| | | .replace(" ", ""); |
| | | System.out.println(startTimeStr); |
| | | String endTimeTimeStr = endTime.replace("-", "") |
| | | .replace(":", "") |
| | | .replace(" ", ""); |
| | | System.out.println(endTimeTimeStr); |
| | | stream = deviceId + "_" + channelId + "_" + startTimeStr + "_" + endTimeTimeStr; |
| | | } |
| | | SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, stream, null, device.isSsrcCheck(), true, 0, false, device.getStreamModeForParam()); |
| | | playBack(newMediaServerItem, ssrcInfo, deviceId, channelId, startTime, endTime, callback); |
| | | } |
| | | |
| | |
| | | return formatter.format(formatterCompatibleISO8601.parse(formatTime)); |
| | | } |
| | | |
| | | public static String urlToyyyy_MM_dd_HH_mm_ss(String formatTime) { |
| | | return formatter.format(urlFormatter.parse(formatTime)); |
| | | } |
| | | |
| | | /** |
| | | * yyyy_MM_dd_HH_mm_ss 转æ¶é´æ³ |
| | | * @param formatTime |
| | |
| | | return urlFormatter.format(nowDateTime); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * æ ¼å¼æ ¡éª |
| | | * @param timeStr æ¶é´å符串 |