From 00fdc6281c7cd20409b6b28bcbcad9ebb11b5432 Mon Sep 17 00:00:00 2001
From: Lawrence <1934378145@qq.com>
Date: 星期一, 26 十月 2020 16:51:31 +0800
Subject: [PATCH] 添加新功能说明
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 142 ++++++++++++++++++++++++++++-------------------
1 files changed, 84 insertions(+), 58 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
index 481bb43..e2c11cb 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -19,6 +19,7 @@
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.conf.MediaServerConfig;
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
+import com.genersoft.iot.vmp.media.zlm.ZLMUtils;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -59,6 +60,13 @@
@Autowired
@Qualifier(value="udpSipProvider")
private SipProvider udpSipProvider;
+
+ @Autowired
+ private ZLMUtils zlmUtils;
+
+ @Value("${media.rtp.enable}")
+ private boolean rtpEnable;
+
/**
@@ -173,15 +181,15 @@
try {
String cmdStr= cmdString(leftRight, upDown, inOut, moveSpeed, zoomSpeed);
StringBuffer ptzXml = new StringBuffer(200);
- ptzXml.append("<?xml version=\"1.0\" ?>");
- ptzXml.append("<Control>");
- ptzXml.append("<CmdType>DeviceControl</CmdType>");
- ptzXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>");
- ptzXml.append("<DeviceID>" + channelId + "</DeviceID>");
- ptzXml.append("<PTZCmd>" + cmdStr + "</PTZCmd>");
- ptzXml.append("<Info>");
- ptzXml.append("</Info>");
- ptzXml.append("</Control>");
+ ptzXml.append("<?xml version=\"1.0\" ?>\r\n");
+ ptzXml.append("<Control>\r\n");
+ ptzXml.append("<CmdType>DeviceControl</CmdType>\r\n");
+ ptzXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ ptzXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ ptzXml.append("<PTZCmd>" + cmdStr + "</PTZCmd>\r\n");
+ ptzXml.append("<Info>\r\n");
+ ptzXml.append("</Info>\r\n");
+ ptzXml.append("</Control>\r\n");
Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtzTag", "ToPtzTag");
@@ -202,10 +210,17 @@
@Override
public StreamInfo playStreamCmd(Device device, String channelId) {
try {
-
+
String ssrc = streamSession.createPlaySsrc();
- String transport = device.getTransport();
+ String streamMode = device.getStreamMode().toUpperCase();
MediaServerConfig mediaInfo = storager.getMediaInfo();
+ String mediaPort = null;
+ // 浣跨敤鍔ㄦ�乽dp绔彛
+ if (rtpEnable) {
+ mediaPort = zlmUtils.getNewRTPPort(ssrc) + "";
+ }else {
+ mediaPort = mediaInfo.getRtpProxyPort();
+ }
//
StringBuffer content = new StringBuffer(200);
content.append("v=0\r\n");
@@ -213,20 +228,24 @@
content.append("s=Play\r\n");
content.append("c=IN IP4 "+mediaInfo.getLocalIP()+"\r\n");
content.append("t=0 0\r\n");
- if("TCP".equals(transport)) {
- content.append("m=video "+mediaInfo.getRtpProxyPort()+" TCP/RTP/AVP 96 98 97\r\n");
- }
- if("UDP".equals(transport)) {
- content.append("m=video "+mediaInfo.getRtpProxyPort()+" RTP/AVP 96 98 97\r\n");
+ if("TCP-PASSIVE".equals(streamMode)) {
+ content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 98 97\r\n");
+ }else if ("TCP-ACTIVE".equals(streamMode)) {
+ content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 98 97\r\n");
+ }else if("UDP".equals(streamMode)) {
+ content.append("m=video "+ mediaPort +" RTP/AVP 96 98 97\r\n");
}
content.append("a=recvonly\r\n");
content.append("a=rtpmap:96 PS/90000\r\n");
content.append("a=rtpmap:98 H264/90000\r\n");
content.append("a=rtpmap:97 MPEG4/90000\r\n");
- if("TCP".equals(transport)){
- content.append("a=setup:passive\r\n");
- content.append("a=connection:new\r\n");
- }
+ if("TCP-PASSIVE".equals(streamMode)){ // tcp琚姩妯″紡
+ content.append("a=setup:passive\r\n");
+ content.append("a=connection:new\r\n");
+ }else if ("TCP-ACTIVE".equals(streamMode)) { // tcp涓诲姩妯″紡
+ content.append("a=setup:active\r\n");
+ content.append("a=connection:new\r\n");
+ }
content.append("y="+ssrc+"\r\n");//ssrc
Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "live", null);
@@ -241,13 +260,6 @@
StreamInfo streamInfo = new StreamInfo();
streamInfo.setSsrc(ssrc);
-// String streamId = Integer.toHexString(Integer.parseInt(streamInfo.getSsrc()));
-// String streamId = String.format("%08x", Integer.parseInt(streamInfo.getSsrc())).toUpperCase(); // ZLM 瑕佹眰澶у啓涓旈浣嶈ˉ闆�
-// streamInfo.setFlv(String.format("http://%s:%s/rtp/%s.flv", mediaInfo.getLocalIP(), mediaInfo.getHttpPort(), streamId));
-// streamInfo.setWS_FLV(String.format("ws://%s:%s/rtp/%s.flv", mediaInfo.getLocalIP(), mediaInfo.getHttpPort(), streamId));
-// streamInfo.setRTMP(String.format("rtmp://%s:%s/rtp/%s", mediaInfo.getLocalIP(), mediaInfo.getRtmpPort(), streamId));
-// streamInfo.setHLS(String.format("http://%s:%s/rtp/%s/hls.m3u8", mediaInfo.getLocalIP(), mediaInfo.getHttpPort(), streamId));
-// streamInfo.setRTSP(String.format("rtsp://%s:%s/rtp/%s", mediaInfo.getLocalIP(), mediaInfo.getRtspPort(), streamId));
streamInfo.setCahnnelId(channelId);
streamInfo.setDeviceID(device.getDeviceId());
storager.startPlay(streamInfo);
@@ -278,21 +290,34 @@
content.append("s=Playback\r\n");
content.append("u="+channelId+":0\r\n");
content.append("c=IN IP4 "+mediaInfo.getLocalIP()+"\r\n");
- content.append("t="+DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(startTime)+" "+DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(endTime) +"\r\n");
- if(device.getTransport().equals("TCP")) {
- content.append("m=video "+mediaInfo.getRtpProxyPort()+" TCP/RTP/AVP 96 98 97\r\n");
+ content.append("t="+DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(startTime)+" "
+ +DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(endTime) +"\r\n");
+ String mediaPort = null;
+ // 浣跨敤鍔ㄦ�乽dp绔彛
+ if (rtpEnable) {
+ mediaPort = zlmUtils.getNewRTPPort(ssrc) + "";
+ }else {
+ mediaPort = mediaInfo.getRtpProxyPort();
}
- if(device.getTransport().equals("UDP")) {
- content.append("m=video "+mediaInfo.getRtpProxyPort()+" RTP/AVP 96 98 97\r\n");
+ String streamMode = device.getStreamMode().toUpperCase();
+ if("TCP-PASSIVE".equals(streamMode)) {
+ content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 98 97\r\n");
+ }else if ("TCP-ACTIVE".equals(streamMode)) {
+ content.append("m=video "+ mediaPort +" TCP/RTP/AVP 96 98 97\r\n");
+ }else if("UDP".equals(streamMode)) {
+ content.append("m=video "+ mediaPort +" RTP/AVP 96 98 97\r\n");
}
content.append("a=recvonly\r\n");
content.append("a=rtpmap:96 PS/90000\r\n");
content.append("a=rtpmap:98 H264/90000\r\n");
content.append("a=rtpmap:97 MPEG4/90000\r\n");
- if(device.getTransport().equals("TCP")){
- content.append("a=setup:passive\r\n");
- content.append("a=connection:new\r\n");
- }
+ if("TCP-PASSIVE".equals(streamMode)){ // tcp琚姩妯″紡
+ content.append("a=setup:passive\r\n");
+ content.append("a=connection:new\r\n");
+ }else if ("TCP-ACTIVE".equals(streamMode)) { // tcp涓诲姩妯″紡
+ content.append("a=setup:active\r\n");
+ content.append("a=connection:new\r\n");
+ }
content.append("y="+ssrc+"\r\n");//ssrc
Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "playback", null);
@@ -450,12 +475,12 @@
public boolean deviceInfoQuery(Device device) {
try {
StringBuffer catalogXml = new StringBuffer(200);
- catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>");
- catalogXml.append("<Query>");
- catalogXml.append("<CmdType>DeviceInfo</CmdType>");
- catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>");
- catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>");
- catalogXml.append("</Query>");
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
+ catalogXml.append("<Query>\r\n");
+ catalogXml.append("<CmdType>DeviceInfo</CmdType>\r\n");
+ catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ catalogXml.append("</Query>\r\n");
Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaDeviceInfoBranch", "FromDeviceInfoTag", "ToDeviceInfoTag");
transmitRequest(device, request);
@@ -478,12 +503,12 @@
storager.cleanChannelsForDevice(device.getDeviceId());
try {
StringBuffer catalogXml = new StringBuffer(200);
- catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>");
- catalogXml.append("<Query>");
- catalogXml.append("<CmdType>Catalog</CmdType>");
- catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>");
- catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>");
- catalogXml.append("</Query>");
+ catalogXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
+ catalogXml.append("<Query>\r\n");
+ catalogXml.append("<CmdType>Catalog</CmdType>\r\n");
+ catalogXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
+ catalogXml.append("</Query>\r\n");
Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), "ViaCatalogBranch", "FromCatalogTag", "ToCatalogTag");
transmitRequest(device, request);
@@ -506,17 +531,17 @@
try {
StringBuffer recordInfoXml = new StringBuffer(200);
- recordInfoXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>");
- recordInfoXml.append("<Query>");
- recordInfoXml.append("<CmdType>RecordInfo</CmdType>");
- recordInfoXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>");
- recordInfoXml.append("<DeviceID>" + channelId + "</DeviceID>");
- recordInfoXml.append("<StartTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(startTime) + "</StartTime>");
- recordInfoXml.append("<EndTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(endTime) + "</EndTime>");
- recordInfoXml.append("<Secrecy>0</Secrecy>");
+ recordInfoXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
+ recordInfoXml.append("<Query>\r\n");
+ recordInfoXml.append("<CmdType>RecordInfo</CmdType>\r\n");
+ recordInfoXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n");
+ recordInfoXml.append("<DeviceID>" + channelId + "</DeviceID>\r\n");
+ recordInfoXml.append("<StartTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(startTime) + "</StartTime>\r\n");
+ recordInfoXml.append("<EndTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(endTime) + "</EndTime>\r\n");
+ recordInfoXml.append("<Secrecy>0</Secrecy>\r\n");
// 澶у崕NVR瑕佹眰蹇呴』澧炲姞涓�涓�间负all鐨勬枃鏈厓绱犺妭鐐筎ype
- recordInfoXml.append("<Type>all</Type>");
- recordInfoXml.append("</Query>");
+ recordInfoXml.append("<Type>all</Type>\r\n");
+ recordInfoXml.append("</Query>\r\n");
Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), "ViaRecordInfoBranch", "FromRecordInfoTag", "ToRecordInfoTag");
transmitRequest(device, request);
@@ -582,4 +607,5 @@
return clientTransaction;
}
+
}
--
Gitblit v1.8.0