From c1b3f2beb4b76e89d4938d2f7d5b31ff0f10220d Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期日, 24 一月 2021 20:46:06 +0800
Subject: [PATCH] 国标级联--点播-未完成
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java | 175 +++++++++++++++++++++++++++++--------------
src/main/java/com/genersoft/iot/vmp/storager/dao/PatformChannelMapper.java | 4 +
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java | 5 +
src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java | 3
web_src/.postcssrc.js | 2
5 files changed, 128 insertions(+), 61 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
index f4e4928..d48cae5 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
@@ -10,6 +10,7 @@
import javax.sip.message.Response;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
+import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.alibaba.fastjson.JSON;
import com.genersoft.iot.vmp.gb28181.transmit.response.impl.*;
@@ -107,6 +108,9 @@
@Autowired
private IPlayService playService;
+ @Autowired
+ private ZLMRTPServerFactory zlmrtpServerFactory;
+
// 娉細杩欓噷浣跨敤娉ㄨВ浼氬鑷村惊鐜緷璧栨敞鍏ワ紝鏆傜敤springBean
private SipProvider tcpSipProvider;
@@ -128,6 +132,7 @@
processor.setCmderFroPlatform(cmderFroPlatform);
processor.setPlayService(playService);
processor.setStorager(storager);
+ processor.setZlmrtpServerFactory(zlmrtpServerFactory);
return processor;
} else if (Request.REGISTER.equals(method)) {
RegisterRequestProcessor processor = new RegisterRequestProcessor();
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java
index 58e11ad..9d0a9a3 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java
@@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.gb28181.transmit.request.impl;
+import javax.sdp.*;
import javax.sip.InvalidArgumentException;
import javax.sip.RequestEvent;
import javax.sip.SipException;
@@ -11,20 +12,18 @@
import javax.sip.message.Response;
import com.alibaba.fastjson.JSONObject;
+import com.genersoft.iot.vmp.conf.MediaServerConfig;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.sdp.Codec;
-import com.genersoft.iot.vmp.gb28181.sdp.MediaDescription;
-import com.genersoft.iot.vmp.gb28181.sdp.SdpParser;
-import com.genersoft.iot.vmp.gb28181.sdp.SessionDescription;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
-import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommanderFroPlatform;
import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor;
+import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
+import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import com.genersoft.iot.vmp.vmanager.play.bean.PlayResult;
import com.genersoft.iot.vmp.vmanager.service.IPlayService;
+import gov.nist.javax.sdp.fields.SDPFormat;
import gov.nist.javax.sip.address.AddressImpl;
import gov.nist.javax.sip.address.SipUri;
import org.slf4j.Logger;
@@ -34,6 +33,8 @@
import java.io.IOException;
import java.text.ParseException;
import java.util.List;
+import java.util.UUID;
+import java.util.Vector;
/**
* @Description:澶勭悊INVITE璇锋眰
@@ -48,9 +49,21 @@
private IVideoManagerStorager storager;
+ private IRedisCatchStorage redisCatchStorage;
+
private SIPCommander cmder;
private IPlayService playService;
+
+ private ZLMRTPServerFactory zlmrtpServerFactory;
+
+ public ZLMRTPServerFactory getZlmrtpServerFactory() {
+ return zlmrtpServerFactory;
+ }
+
+ public void setZlmrtpServerFactory(ZLMRTPServerFactory zlmrtpServerFactory) {
+ this.zlmrtpServerFactory = zlmrtpServerFactory;
+ }
/**
* 澶勭悊invite璇锋眰
@@ -98,64 +111,105 @@
}else {
response100Ack(evt); // 閫氶亾瀛樺湪锛屽彂100锛宼rying
}
- // 瑙f瀽sdp娑堟伅
- SessionDescription sdp = new SdpParser().parse(request.getRawContent());
+ // 瑙f瀽sdp娑堟伅, 浣跨敤jainsip 鑷甫鐨剆dp瑙f瀽鏂瑰紡
+ String contentString = new String(request.getRawContent());
+ SessionDescription sdp = SdpFactory.getInstance().createSessionDescription(contentString);
+
+ // TODO 鍖哄垎TCP鍙戞祦杩樻槸udp锛� 褰撳墠榛樿udp
// 鑾峰彇鏀寔鐨勬牸寮�
- List<MediaDescription> mediaDescriptions = sdp.getMediaDescriptions();
+ Vector mediaDescriptions = sdp.getMediaDescriptions(true);
// 鏌ョ湅鏄惁鏀寔PS 璐熻浇96
String ip = null;
int port = -1;
- for (MediaDescription mediaDescription : mediaDescriptions) {
-
- List<Codec> codecs = mediaDescription.getCodecs();
- for (Codec codec : codecs) {
- if("96".equals(codec.getPayloadType()) || "PS".equals(codec.getName()) || "ps".equals(codec.getName())) {
- ip = mediaDescription.getIpAddress().getHostName();
- port = mediaDescription.getPort();
- break;
- }
- }
+ for (int i = 0; i < mediaDescriptions.size(); i++) {
+ MediaDescription mediaDescription = (MediaDescription)mediaDescriptions.get(i);
+ Media media = mediaDescription.getMedia();
+ port = media.getMediaPort();
}
- if (ip == null || port == -1) { // TODO 娌℃湁鍚堥�傜殑瑙嗛娴佹牸寮忥紝 鍙厤缃槸鍚︿娇鐢ㄧ涓�涓猰edia淇℃伅
- if (mediaDescriptions.size() > 0) {
- ip = mediaDescriptions.get(0).getIpAddress().getHostName();
- port = mediaDescriptions.get(0).getPort();
- }
- }
-
- if (ip == null || port == -1) {
- response488Ack(evt);
- return;
- }
-
-
- String ssrc = sdp.getSsrc();
-
- Device device = storager.queryVideoDeviceByPlatformIdAndChannelId(platformId, channelId);
- if (device == null) {
- logger.warn("鐐规挱骞冲彴{}鐨勯�氶亾{}鏃舵湭鎵惧埌璁惧淇℃伅", platformId, channel);
- response500Ack(evt);
- return;
- }
-
- // 閫氱煡涓嬬骇鎺ㄦ祦锛�
- PlayResult playResult = playService.play(device.getDeviceId(), channelId, (response)->{
- // 鏀跺埌鎺ㄦ祦锛� 鍥炲200OK
-
- },(event -> {
- // 鏈煡閿欒銆傜洿鎺ヨ浆鍙戣澶囩偣鎾殑閿欒
- Response response = null;
- try {
- response = getMessageFactory().createResponse(event.getResponse().getStatusCode(), evt.getRequest());
- getServerTransaction(evt).sendResponse(response);
-
- } catch (ParseException | SipException | InvalidArgumentException e) {
- e.printStackTrace();
- }
- }));
- playResult.getResult();
+// for (MediaDescription mediaDescription : mediaDescriptions) {
+//
+// List<Codec> codecs = mediaDescription.getCodecs();
+// for (Codec codec : codecs) {
+// if("96".equals(codec.getPayloadType()) || "PS".equals(codec.getName()) || "ps".equals(codec.getName())) {
+// // TODO 杩欓噷寰堟參
+// ip = mediaDescription.getIpAddress().getHostName();
+// port = mediaDescription.getPort();
+// break;
+// }
+// }
+// }
+// if (ip == null || port == -1) { // TODO 娌℃湁鍚堥�傜殑瑙嗛娴佹牸寮忥紝 鍙厤缃槸鍚︿娇鐢ㄧ涓�涓猰edia淇℃伅
+// if (mediaDescriptions.size() > 0) {
+// ip = mediaDescriptions.get(0).getIpAddress().getHostName();
+// port = mediaDescriptions.get(0).getPort();
+// }
+// }
+//
+// if (ip == null || port == -1) {
+// response488Ack(evt);
+// return;
+// }
+//
+//
+// String ssrc = sdp.getSsrc();
+//
+// Device device = storager.queryVideoDeviceByPlatformIdAndChannelId(platformId, channelId);
+// if (device == null) {
+// logger.warn("鐐规挱骞冲彴{}鐨勯�氶亾{}鏃舵湭鎵惧埌璁惧淇℃伅", platformId, channel);
+// response500Ack(evt);
+// return;
+// }
+//
+// // 閫氱煡涓嬬骇鎺ㄦ祦锛�
+// PlayResult playResult = playService.play(device.getDeviceId(), channelId, (responseJSON)->{
+// // 鏀跺埌鎺ㄦ祦锛� 鍥炲200OK
+// UUID uuid = UUID.randomUUID();
+// int rtpServer = zlmrtpServerFactory.createRTPServer(uuid.toString());
+// if (rtpServer == -1) {
+// logger.error("涓鸿幏鍙栧埌鍙敤绔彛");
+// return;
+// }else {
+// zlmrtpServerFactory.closeRTPServer(uuid.toString());
+// }
+// // TODO 娣诲姞瀵箃cp鐨勬敮鎸�
+// MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo();
+// StringBuffer content = new StringBuffer(200);
+// content.append("v=0\r\n");
+// content.append("o="+"00000"+" 0 0 IN IP4 "+mediaInfo.getWanIp()+"\r\n");
+// content.append("s=Play\r\n");
+// content.append("c=IN IP4 "+mediaInfo.getWanIp()+"\r\n");
+// content.append("t=0 0\r\n");
+// content.append("m=video "+ rtpServer+" RTP/AVP 96\r\n");
+// content.append("a=sendonly\r\n");
+// content.append("a=rtpmap:96 PS/90000\r\n");
+// content.append("y="+ ssrc + "\r\n");
+// content.append("f=\r\n");
+//
+// try {
+// responseAck(evt, content.toString());
+// } catch (SipException e) {
+// e.printStackTrace();
+// } catch (InvalidArgumentException e) {
+// e.printStackTrace();
+// } catch (ParseException e) {
+// e.printStackTrace();
+// }
+//
+// // 鍐欏叆redis锛� 瓒呮椂鏃跺洖澶�
+//// redisCatchStorage.waiteAck()
+// },(event -> {
+// // 鏈煡閿欒銆傜洿鎺ヨ浆鍙戣澶囩偣鎾殑閿欒
+// Response response = null;
+// try {
+// response = getMessageFactory().createResponse(event.getResponse().getStatusCode(), evt.getRequest());
+// getServerTransaction(evt).sendResponse(response);
+//
+// } catch (ParseException | SipException | InvalidArgumentException e) {
+// e.printStackTrace();
+// }
+// }));
+// playResult.getResult();
// 鏌ユ壘鍚堥�傜殑绔彛鎺ㄦ祦锛�
- // 鍙戦�� 200ok
// 鏀跺埌ack鍚庤皟鐢ㄦ帹娴佹帴鍙�
@@ -163,9 +217,12 @@
} catch (SipException | InvalidArgumentException | ParseException e) {
e.printStackTrace();
- } catch (IOException e) {
logger.warn("sdp瑙f瀽閿欒");
e.printStackTrace();
+ } catch (SdpParseException e) {
+ e.printStackTrace();
+ } catch (SdpException e) {
+ e.printStackTrace();
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/PatformChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/PatformChannelMapper.java
index a5ee275..50eb3e3 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/PatformChannelMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/PatformChannelMapper.java
@@ -1,5 +1,6 @@
package com.genersoft.iot.vmp.storager.dao;
+import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce;
import org.apache.ibatis.annotations.Delete;
@@ -45,4 +46,7 @@
@Select("SELECT * FROM device_channel WHERE deviceId = (SELECT deviceId FROM platform_gb_channel WHERE " +
"platformId='${platformId}' AND channelId='${channelId}' ) AND channelId='${channelId}'")
DeviceChannel queryChannelInParentPlatform(String platformId, String channelId);
+
+ @Select("SELECT * FROM device WHERE deviceId = (SELECT deviceId FROM platform_gb_channel WHERE platformId='${platformId}' AND channelId='${channelId}')")
+ Device queryVideoDeviceByPlatformIdAndChannelId(String platformId, String channelId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
index dac0aa2..7417935 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
@@ -338,6 +338,7 @@
@Override
public Device queryVideoDeviceByPlatformIdAndChannelId(String platformId, String channelId) {
- return null;
+ Device device = patformChannelMapper.queryVideoDeviceByPlatformIdAndChannelId(platformId, channelId);
+ return device;
}
}
diff --git a/web_src/.postcssrc.js b/web_src/.postcssrc.js
index 406b4d2..f98d56a 100644
--- a/web_src/.postcssrc.js
+++ b/web_src/.postcssrc.js
@@ -7,7 +7,7 @@
// to edit target browsers: use "browserslist" field in package.json
"autoprefixer": {},
'postcss-pxtorem': {
- rootValue: 24,
+ rootValue: 16,
propList: ['font-size'] // 鍙浆鍖杅ont-size
}
}
--
Gitblit v1.8.0