From 28b5cc39d0a2d9939f70b4c980a31d9b27fc1e4c Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 19 七月 2022 14:27:30 +0800 Subject: [PATCH] 修复更新推流状态sql错误 --- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java | 117 ++++++++++++++++++++++++++++++++++------------------------ 1 files changed, 69 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java index 5b7ba1c..693dda1 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java @@ -1,20 +1,19 @@ package com.genersoft.iot.vmp.media.zlm; import com.alibaba.fastjson.JSONObject; -import com.genersoft.iot.vmp.conf.UserSetup; +import com.genersoft.iot.vmp.conf.UserSetting; import com.genersoft.iot.vmp.gb28181.bean.GbStream; -import com.genersoft.iot.vmp.media.zlm.dto.MediaItem; -import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; -import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; -import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; +import com.genersoft.iot.vmp.media.zlm.dto.*; import com.genersoft.iot.vmp.service.IStreamProxyService; import com.genersoft.iot.vmp.service.IStreamPushService; import com.genersoft.iot.vmp.service.bean.ThirdPartyGB; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; -import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import com.genersoft.iot.vmp.storager.dao.GbStreamMapper; import com.genersoft.iot.vmp.storager.dao.PlatformGbStreamMapper; import com.genersoft.iot.vmp.storager.dao.StreamPushMapper; +import com.genersoft.iot.vmp.utils.DateUtil; +import org.checkerframework.checker.units.qual.C; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -22,9 +21,13 @@ import org.springframework.util.StringUtils; import java.util.*; +import java.util.concurrent.ConcurrentHashMap; import java.util.regex.Matcher; import java.util.regex.Pattern; +/** + * @author lin + */ @Component public class ZLMMediaListManager { @@ -37,7 +40,7 @@ private IRedisCatchStorage redisCatchStorage; @Autowired - private IVideoManagerStorager storager; + private IVideoManagerStorage storager; @Autowired private GbStreamMapper gbStreamMapper; @@ -58,7 +61,9 @@ private ZLMHttpHookSubscribe subscribe; @Autowired - private UserSetup userSetup; + private UserSetting userSetting; + + private Map<String, ChannelOnlineEvent> channelOnlineEvents = new ConcurrentHashMap<>(); public void updateMediaList(MediaServerItem mediaServerItem) { @@ -66,7 +71,9 @@ // 浣跨敤寮傛鐨勫綋鏃舵洿鏂板獟浣撴祦鍒楄〃 zlmresTfulUtils.getMediaList(mediaServerItem, (mediaList ->{ - if (mediaList == null) return; + if (mediaList == null) { + return; + } String dataStr = mediaList.getString("data"); Integer code = mediaList.getInteger("code"); @@ -105,43 +112,46 @@ updateMedia(mediaServerItem, app, streamId); } - public void addPush(MediaItem mediaItem) { + public StreamPushItem addPush(MediaItem mediaItem) { // 鏌ユ壘姝ょ洿鎾祦鏄惁瀛樺湪redis棰勮gbId StreamPushItem transform = streamPushService.transform(mediaItem); - // 浠巗treamId鍙栧嚭鏌ヨ鍏抽敭鍊� - Pattern pattern = Pattern.compile(userSetup.getThirdPartyGBIdReg()); - Matcher matcher = pattern.matcher(mediaItem.getStream());// 鎸囧畾瑕佸尮閰嶇殑瀛楃涓� - String queryKey = null; - if (matcher.find()) { //姝ゅfind锛堬級姣忔琚皟鐢ㄥ悗锛屼細鍋忕Щ鍒颁笅涓�涓尮閰� - queryKey = matcher.group(); + StreamPushItem pushInDb = streamPushService.getPush(mediaItem.getApp(), mediaItem.getStream()); + transform.setUpdateTime(DateUtil.getNow()); + transform.setPushTime(DateUtil.getNow()); + if (pushInDb == null) { + transform.setCreateTime(DateUtil.getNow()); + streamPushMapper.add(transform); + }else { + streamPushMapper.update(transform); + + +// if (!StringUtils.isEmpty(pushInDb.getGbId())) { +// List<GbStream> gbStreamList = gbStreamMapper.selectByGBId(transform.getGbId()); +// if (gbStreamList != null && gbStreamList.size() == 1) { +// transform.setGbStreamId(gbStreamList.get(0).getGbStreamId()); +// transform.setPlatformId(gbStreamList.get(0).getPlatformId()); +// transform.setCatalogId(gbStreamList.get(0).getCatalogId()); +// transform.setGbId(gbStreamList.get(0).getGbId()); +// gbStreamMapper.update(transform); +// streamPushMapper.del(gbStreamList.get(0).getApp(), gbStreamList.get(0).getStream()); +// }else { +// transform.setCreateTime(DateUtil.getNow()); +// transform.setUpdateTime(DateUtil.getNow()); +// gbStreamMapper.add(transform); +// } + // 閫氱煡閫氶亾涓婄嚎 +// if (transform != null) { +// if (channelOnlineEvents.get(transform.getGbId()) != null) { +// channelOnlineEvents.get(transform.getGbId()).run(transform.getApp(), transform.getStream(), transform.getServerId()); +// channelOnlineEvents.remove(transform.getGbId()); +// } +// } +// } } - if (queryKey != null) { - ThirdPartyGB thirdPartyGB = redisCatchStorage.queryMemberNoGBId(queryKey); - if (thirdPartyGB != null && !StringUtils.isEmpty(thirdPartyGB.getNationalStandardNo())) { - transform.setGbId(thirdPartyGB.getNationalStandardNo()); - transform.setName(thirdPartyGB.getName()); - } - } - storager.updateMedia(transform); - if (!StringUtils.isEmpty(transform.getGbId())) { - // 濡傛灉杩欎釜鍥芥爣ID宸茬粡缁欎簡鍏朵粬鎺ㄦ祦涓旀祦宸茬绾匡紝鍒欑Щ闄ゅ叾浠栨帹娴� - List<GbStream> gbStreams = gbStreamMapper.selectByGBId(transform.getGbId()); - if (gbStreams.size() > 0) { - for (GbStream gbStream : gbStreams) { - // 鍑虹幇浣跨敤鐩稿悓鍥芥爣Id鐨勮棰戞祦鏃讹紝浣跨敤鏂版祦鏇挎崲鏃ф祦锛� - gbStreamMapper.del(gbStream.getApp(), gbStream.getStream()); - platformGbStreamMapper.delByAppAndStream(gbStream.getApp(), gbStream.getStream()); - if (!gbStream.isStatus()) { - streamPushMapper.del(gbStream.getApp(), gbStream.getStream()); - } - } - } - if (gbStreamMapper.selectOne(transform.getApp(), transform.getStream()) != null) { - gbStreamMapper.update(transform); - }else { - gbStreamMapper.add(transform); - } - } + + + + return transform; } @@ -149,7 +159,9 @@ //浣跨敤寮傛鏇存柊鎺ㄦ祦 zlmresTfulUtils.getMediaList(mediaServerItem, app, streamId, "rtmp", json->{ - if (json == null) return; + if (json == null) { + return; + } String dataStr = json.getString("data"); Integer code = json.getInteger("code"); @@ -172,16 +184,25 @@ public int removeMedia(String app, String streamId) { // 鏌ユ壘鏄惁鍏宠仈浜嗗浗鏍囷紝 鍏宠仈浜嗕笉鍒犻櫎锛� 缃负绂荤嚎 - StreamProxyItem streamProxyItem = gbStreamMapper.selectOne(app, streamId); - int result = 0; - if (streamProxyItem == null) { + GbStream gbStream = gbStreamMapper.selectOne(app, streamId); + int result; + if (gbStream == null) { result = storager.removeMedia(app, streamId); }else { - result =storager.mediaOutline(app, streamId); + // TODO 鏆備笉璁剧疆涓虹绾� + result =storager.mediaOffline(app, streamId); } return result; } + public void addChannelOnlineEventLister(String key, ChannelOnlineEvent callback) { + this.channelOnlineEvents.put(key,callback); + } + + public void removedChannelOnlineEventLister(String key) { + this.channelOnlineEvents.remove(key); + } + // public void clearAllSessions() { -- Gitblit v1.8.0