From e8770eec36cb7294899ee96f0f66028e9358caf8 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 22 一月 2024 16:02:28 +0800
Subject: [PATCH] Merge branch '2.6.9' into wvp-28181-2.0
---
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 90 +++++++++++++++++++++++++++-----------------
1 files changed, 55 insertions(+), 35 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
index 605a383..ed26bda 100755
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -111,6 +111,9 @@
private IUserService userService;
@Autowired
+ private ICloudRecordService cloudRecordService;
+
+ @Autowired
private VideoStreamSessionManager sessionManager;
@Autowired
@@ -231,12 +234,6 @@
streamAuthorityInfo.setSign(sign);
// 閴存潈閫氳繃
redisCatchStorage.updateStreamAuthorityInfo(param.getApp(), param.getStream(), streamAuthorityInfo);
- // 閫氱煡assist鏂扮殑callId
- if (mediaInfo != null && mediaInfo.getRecordAssistPort() > 0) {
- taskExecutor.execute(() -> {
- assistRESTfulUtils.addStreamCallInfo(mediaInfo, param.getApp(), param.getStream(), callId, null);
- });
- }
}
} else {
zlmMediaListManager.sendStreamEvent(param.getApp(), param.getStream(), param.getMediaServerId());
@@ -244,6 +241,7 @@
HookResultForOnPublish result = HookResultForOnPublish.SUCCESS();
+ result.setEnable_audio(true);
taskExecutor.execute(() -> {
ZlmHttpHookSubscribe.Event subscribe = this.subscribe.sendNotify(HookType.on_publish, json);
if (subscribe != null) {
@@ -261,7 +259,6 @@
} else {
result.setEnable_mp4(userSetting.isRecordPushLive());
}
-
// 鍥芥爣娴�
if ("rtp".equals(param.getApp()) ) {
@@ -278,9 +275,17 @@
}
// 璁剧疆闊抽淇℃伅鍙婂綍鍒朵俊鎭�
- List<SsrcTransaction> ssrcTransactionForAll = (inviteInfo == null ? null :
- sessionManager.getSsrcTransactionForAll(inviteInfo.getDeviceId(), inviteInfo.getChannelId(), null, null));
+ List<SsrcTransaction> ssrcTransactionForAll = sessionManager.getSsrcTransactionForAll(null, null, null, param.getStream());
if (ssrcTransactionForAll != null && ssrcTransactionForAll.size() == 1) {
+
+ // 涓哄綍鍒跺浗鏍囨ā鎷熶竴涓壌鏉冧俊鎭�, 鏂逛究鍚庣画鍐欏叆褰曞儚鏂囦欢鏃朵娇鐢�
+ StreamAuthorityInfo streamAuthorityInfo = StreamAuthorityInfo.getInstanceByHook(param);
+ streamAuthorityInfo.setApp(param.getApp());
+ streamAuthorityInfo.setStream(ssrcTransactionForAll.get(0).getStream());
+ streamAuthorityInfo.setCallId(ssrcTransactionForAll.get(0).getSipTransactionInfo().getCallId());
+
+ redisCatchStorage.updateStreamAuthorityInfo(param.getApp(), ssrcTransactionForAll.get(0).getStream(), streamAuthorityInfo);
+
String deviceId = ssrcTransactionForAll.get(0).getDeviceId();
String channelId = ssrcTransactionForAll.get(0).getChannelId();
DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId);
@@ -289,26 +294,16 @@
}
// 濡傛灉鏄綍鍍忎笅杞藉氨璁剧疆瑙嗛闂撮殧鍗佺
if (ssrcTransactionForAll.get(0).getType() == InviteSessionType.DOWNLOAD) {
- result.setMp4_max_second(10);
- result.setEnable_mp4(true);
- }
- }
- }
-
- if (mediaInfo.getRecordAssistPort() > 0 && userSetting.getRecordPath() == null) {
- logger.info("鎺ㄦ祦鏃跺彂鐜板皻鏈缃綍鍍忚矾寰勶紝浠巃ssist鏈嶅姟涓鍙�");
- 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);
- });
+ // 鑾峰彇褰曞儚鐨勬�绘椂闀匡紝鐒跺悗璁剧疆涓鸿繖涓棰戠殑鏃堕暱
+ InviteInfo inviteInfoForDownload = inviteStreamService.getInviteInfo(InviteSessionType.DOWNLOAD, deviceId, channelId, param.getStream());
+ if (inviteInfoForDownload != null && inviteInfoForDownload.getStreamInfo() != null) {
+ String startTime = inviteInfoForDownload.getStreamInfo().getStartTime();
+ String endTime = inviteInfoForDownload.getStreamInfo().getEndTime();
+ long difference = DateUtil.getDifference(startTime, endTime) / 1000;
+ result.setMp4_max_second((int) difference);
+ result.setEnable_mp4(true);
+ // 璁剧疆涓�2淇濊瘉寰楀埌鐨刴p4鐨勬椂闀挎槸姝e父鐨�
+ result.setModify_stamp(2);
}
}
}
@@ -356,13 +351,11 @@
List<OnStreamChangedHookParam.MediaTrack> tracks = param.getTracks();
// TODO 閲嶆瀯姝ゅ閫昏緫
- boolean isPush = false;
if (param.isRegist()) {
- // 澶勭悊娴佹敞鍐岀殑閴存潈淇℃伅
+ // 澶勭悊娴佹敞鍐岀殑閴存潈淇℃伅锛� 娴佹敞閿�杩欓噷涓嶅啀鍒犻櫎閴存潈淇℃伅锛屼笅娆℃潵浜嗘柊鐨勯壌鏉冧俊鎭細瀵瑰氨鐨勮繘琛岃鐩�
if (param.getOriginType() == OriginType.RTMP_PUSH.ordinal()
|| param.getOriginType() == OriginType.RTSP_PUSH.ordinal()
|| param.getOriginType() == OriginType.RTC_PUSH.ordinal()) {
- isPush = true;
StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo(param.getApp(), param.getStream());
if (streamAuthorityInfo == null) {
streamAuthorityInfo = StreamAuthorityInfo.getInstanceByHook(param);
@@ -372,8 +365,6 @@
}
redisCatchStorage.updateStreamAuthorityInfo(param.getApp(), param.getStream(), streamAuthorityInfo);
}
- } else {
- redisCatchStorage.removeStreamAuthorityInfo(param.getApp(), param.getStream());
}
if ("rtsp".equals(param.getSchema())) {
@@ -414,6 +405,9 @@
|| param.getOriginType() == OriginType.RTC_PUSH.ordinal()) {
param.setSeverId(userSetting.getServerId());
zlmMediaListManager.addPush(param);
+
+ // 鍐椾綑鏁版嵁锛岃嚜宸辩郴缁熶腑鑷敤
+ redisCatchStorage.addPushListItem(param.getApp(), param.getStream(), param);
}
} else {
// 鍏煎娴佹敞閿�鏃剁被鍨嬩粠redis璁板綍鑾峰彇
@@ -422,6 +416,10 @@
if (onStreamChangedHookParam != null) {
type = OriginType.values()[onStreamChangedHookParam.getOriginType()].getType();
redisCatchStorage.removeStream(mediaInfo.getId(), type, param.getApp(), param.getStream());
+ if ("PUSH".equalsIgnoreCase(type)) {
+ // 鍐椾綑鏁版嵁锛岃嚜宸辩郴缁熶腑鑷敤
+ redisCatchStorage.removePushListItem(param.getApp(), param.getStream(), param.getMediaServerId());
+ }
}
GbStream gbStream = storager.getGbStream(param.getApp(), param.getStream());
if (gbStream != null) {
@@ -770,7 +768,7 @@
taskExecutor.execute(() -> {
JSONObject json = (JSONObject) JSON.toJSON(param);
List<ZlmHttpHookSubscribe.Event> subscribes = this.subscribe.getSubscribes(HookType.on_rtp_server_timeout);
- if (subscribes != null && subscribes.size() > 0) {
+ if (subscribes != null && !subscribes.isEmpty()) {
for (ZlmHttpHookSubscribe.Event subscribe : subscribes) {
subscribe.response(null, param);
}
@@ -780,6 +778,28 @@
return HookResult.SUCCESS();
}
+ /**
+ * 褰曞儚瀹屾垚浜嬩欢
+ */
+ @ResponseBody
+ @PostMapping(value = "/on_record_mp4", produces = "application/json;charset=UTF-8")
+ public HookResult onRecordMp4(HttpServletRequest request, @RequestBody OnRecordMp4HookParam param) {
+ logger.info("[ZLM HOOK] 褰曞儚瀹屾垚浜嬩欢锛歿}->{}", param.getMediaServerId(), param.getFile_path());
+
+ taskExecutor.execute(() -> {
+ List<ZlmHttpHookSubscribe.Event> subscribes = this.subscribe.getSubscribes(HookType.on_record_mp4);
+ if (subscribes != null && !subscribes.isEmpty()) {
+ for (ZlmHttpHookSubscribe.Event subscribe : subscribes) {
+ subscribe.response(null, param);
+ }
+ }
+ cloudRecordService.addRecord(param);
+
+ });
+
+ return HookResult.SUCCESS();
+ }
+
private Map<String, String> urlParamToMap(String params) {
HashMap<String, String> map = new HashMap<>();
if (ObjectUtils.isEmpty(params)) {
--
Gitblit v1.8.0