From b0080159d98cd441175ddaf90a77d30b8264003d Mon Sep 17 00:00:00 2001
From: panlinlin <648540858@qq.com>
Date: 星期六, 19 十二月 2020 21:52:20 +0800
Subject: [PATCH] 去除ssrc作为流ID传递,ssrc只作为sdp消息使用。动态端口的情况下支持固定流地址,同时支持未点播时直接播放流地址,代码自动发起点播
---
src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java | 27 ++--
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 23 ++-
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMUtils.java | 6
src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java | 9 -
web_src/src/components/gb28181/devicePlayer.vue | 13 +-
src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java | 27 ++---
src/main/java/com/genersoft/iot/vmp/vmanager/playback/PlaybackController.java | 2
src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java | 4
src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java | 10 +-
src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java | 11 +-
web_src/src/components/channelList.vue | 6
src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java | 18 +-
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 80 ++++++++--------
src/main/java/com/genersoft/iot/vmp/vmanager/service/impl/PlayServiceImpl.java | 2
src/main/java/com/genersoft/iot/vmp/web/ApiDeviceController.java | 2
src/main/resources/application-dev.yml | 2
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 2
17 files changed, 117 insertions(+), 127 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
index 53bda91..0fb76b9 100644
--- a/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
+++ b/src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
@@ -4,7 +4,6 @@
public class StreamInfo {
- private String ssrc;
private String streamId;
private String deviceID;
private String cahnnelId;
@@ -19,14 +18,6 @@
private String rtmp;
private String rtsp;
private JSONArray tracks;
-
- public String getSsrc() {
- return ssrc;
- }
-
- public void setSsrc(String ssrc) {
- this.ssrc = ssrc;
- }
public String getDeviceID() {
return deviceID;
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java
index 810feab..19e9eda 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/DeviceChannel.java
@@ -141,7 +141,7 @@
/**
* 娴佸敮涓�缂栧彿锛屽瓨鍦ㄨ〃绀烘鍦ㄧ洿鎾�
*/
- private String ssrc;
+ private String streamId;
/**
* 鏄惁鍚湁闊抽
@@ -379,14 +379,6 @@
this.subCount = subCount;
}
- public String getSsrc() {
- return ssrc;
- }
-
- public void setSsrc(String ssrc) {
- this.ssrc = ssrc;
- }
-
public boolean isHasAudio() {
return hasAudio;
}
@@ -402,4 +394,12 @@
public void setPlay(boolean play) {
this.play = play;
}
+
+ public String getStreamId() {
+ return streamId;
+ }
+
+ public void setStreamId(String streamId) {
+ this.streamId = streamId;
+ }
}
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 3d5aacc..097d2b7 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
@@ -277,17 +277,22 @@
try {
String ssrc = streamSession.createPlaySsrc();
+ String streamId = null;
+ if (rtpEnable) {
+ streamId = String.format("gb_play_%s_%s", device.getDeviceId(), channelId);
+ }else {
+ streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
+ }
String streamMode = device.getStreamMode().toUpperCase();
MediaServerConfig mediaInfo = storager.getMediaInfo();
String mediaPort = null;
// 浣跨敤鍔ㄦ�乽dp绔彛
if (rtpEnable) {
- mediaPort = zlmUtils.getNewRTPPort(ssrc) + "";
+ mediaPort = zlmUtils.getNewRTPPort(streamId) + "";
}else {
mediaPort = mediaInfo.getRtpProxyPort();
}
- String streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
// 娣诲姞璁㈤槄
JSONObject subscribeKey = new JSONObject();
subscribeKey.put("app", "rtp");
@@ -330,10 +335,10 @@
Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), null, "live", null, ssrc);
ClientTransaction transaction = transmitRequest(device, request);
- streamSession.put(ssrc, transaction);
+ streamSession.put(streamId, transaction);
DeviceChannel deviceChannel = storager.queryChannel(device.getDeviceId(), channelId);
if (deviceChannel != null) {
- deviceChannel.setSsrc(ssrc);
+ deviceChannel.setStreamId(streamId);
storager.updateChannel(device.getDeviceId(), deviceChannel);
}
@@ -378,7 +383,7 @@
String mediaPort = null;
// 浣跨敤鍔ㄦ�乽dp绔彛
if (rtpEnable) {
- mediaPort = zlmUtils.getNewRTPPort(ssrc) + "";
+ mediaPort = zlmUtils.getNewRTPPort(streamId) + "";
}else {
mediaPort = mediaInfo.getRtpProxyPort();
}
@@ -412,7 +417,7 @@
Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "playback", null);
ClientTransaction transaction = transmitRequest(device, request);
- streamSession.put(ssrc, transaction);
+ streamSession.put(streamId, transaction);
} catch ( SipException | ParseException | InvalidArgumentException e) {
e.printStackTrace();
@@ -424,10 +429,10 @@
*
*/
@Override
- public void streamByeCmd(String ssrc) {
+ public void streamByeCmd(String streamId) {
try {
- ClientTransaction transaction = streamSession.get(ssrc);
+ ClientTransaction transaction = streamSession.get(streamId);
if (transaction == null) {
return;
}
@@ -453,7 +458,7 @@
clientTransaction = udpSipProvider.getNewClientTransaction(byeRequest);
}
dialog.sendRequest(clientTransaction);
- streamSession.remove(ssrc);
+ streamSession.remove(streamId);
} catch (TransactionDoesNotExistException e) {
e.printStackTrace();
} catch (SipException e) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
index c987f5e..3c90e8e 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java
@@ -450,7 +450,7 @@
StreamInfo streamInfo = storager.queryPlaybackByDevice(deviceId, "*");
if (streamInfo != null) {
storager.stopPlayback(streamInfo);
- cmder.streamByeCmd(streamInfo.getSsrc());
+ cmder.streamByeCmd(streamInfo.getStreamId());
}
}
} catch (ParseException | SipException | InvalidArgumentException | DocumentException e) {
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 99da624..03031f0 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -4,13 +4,16 @@
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
+import java.util.UUID;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.conf.MediaServerConfig;
+import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import com.genersoft.iot.vmp.utils.IpUtil;
+import com.genersoft.iot.vmp.vmanager.service.IPlayService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -44,6 +47,9 @@
private SIPCommander cmder;
@Autowired
+ private IPlayService playService;
+
+ @Autowired
private IVideoManagerStorager storager;
@Autowired
@@ -51,6 +57,9 @@
@Autowired
private ZLMHttpHookSubscribe subscribe;
+
+ @Value("${media.autoApplyPlay}")
+ private boolean autoApplyPlay;
@Value("${media.ip}")
private String mediaIp;
@@ -135,34 +144,6 @@
ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_publish, json);
if (subscribe != null) subscribe.response(json);
-// if ("rtp".equals(app)) {
-// String ssrc = new DecimalFormat("0000000000").format(Integer.parseInt(streamId, 16));
-// StreamInfo streamInfoForPlay = storager.queryPlayBySSRC(ssrc);
-// if ("rtp".equals(app) && streamInfoForPlay != null ) {
-// MediaServerConfig mediaInfo = storager.getMediaInfo();
-// streamInfoForPlay.setFlv(String.format("http://%s:%s/rtp/%s.flv", mediaInfo.getWanIp(), mediaInfo.getHttpPort(), streamId));
-// streamInfoForPlay.setWs_flv(String.format("ws://%s:%s/rtp/%s.flv", mediaInfo.getWanIp(), mediaInfo.getHttpPort(), streamId));
-// streamInfoForPlay.setFmp4(String.format("http://%s:%s/rtp/%s.live.mp4", mediaInfo.getWanIp(), mediaInfo.getHttpPort(), streamId));
-// streamInfoForPlay.setWs_fmp4(String.format("ws://%s:%s/rtp/%s.live.mp4", mediaInfo.getWanIp(), mediaInfo.getHttpPort(), streamId));
-// streamInfoForPlay.setRtmp(String.format("rtmp://%s:%s/rtp/%s", mediaInfo.getWanIp(), mediaInfo.getRtmpPort(), streamId));
-// streamInfoForPlay.setHls(String.format("http://%s:%s/rtp/%s/hls.m3u8", mediaInfo.getWanIp(), mediaInfo.getHttpPort(), streamId));
-// streamInfoForPlay.setRtsp(String.format("rtsp://%s:%s/rtp/%s", mediaInfo.getWanIp(), mediaInfo.getRtspPort(), streamId));
-// storager.startPlay(streamInfoForPlay);
-// }
-//
-// StreamInfo streamInfoForPlayBack = storager.queryPlaybackBySSRC(ssrc);
-// if ("rtp".equals(app) && streamInfoForPlayBack != null ) {
-// MediaServerConfig mediaInfo = storager.getMediaInfo();
-// streamInfoForPlayBack.setFlv(String.format("http://%s:%s/rtp/%s.flv", mediaInfo.getWanIp(), mediaInfo.getHttpPort(), streamId));
-// streamInfoForPlayBack.setWs_flv(String.format("ws://%s:%s/rtp/%s.flv", mediaInfo.getWanIp(), mediaInfo.getHttpPort(), streamId));
-// streamInfoForPlayBack.setFmp4(String.format("http://%s:%s/rtp/%s.live.mp4", mediaInfo.getWanIp(), mediaInfo.getHttpPort(), streamId));
-// streamInfoForPlayBack.setWs_fmp4(String.format("ws://%s:%s/rtp/%s.live.mp4", mediaInfo.getWanIp(), mediaInfo.getHttpPort(), streamId));
-// streamInfoForPlayBack.setRtmp(String.format("rtmp://%s:%s/rtp/%s", mediaInfo.getWanIp(), mediaInfo.getRtmpPort(), streamId));
-// streamInfoForPlayBack.setHls(String.format("http://%s:%s/rtp/%s/hls.m3u8", mediaInfo.getWanIp(), mediaInfo.getHttpPort(), streamId));
-// streamInfoForPlayBack.setRtsp(String.format("rtsp://%s:%s/rtp/%s", mediaInfo.getWanIp(), mediaInfo.getRtspPort(), streamId));
-// storager.startPlayback(streamInfoForPlayBack);
-// }
-// }
// TODO Auto-generated method stub
@@ -268,14 +249,12 @@
String app = json.getString("app");
String streamId = json.getString("stream");
boolean regist = json.getBoolean("regist");
-// String ssrc = String.format("%10d", Integer.parseInt(streamId, 16)); // ZLM 瑕佹眰澶у啓涓旈浣嶈ˉ闆�
- String ssrc = new DecimalFormat("0000000000").format(Integer.parseInt(streamId, 16));
- StreamInfo streamInfo = storager.queryPlayBySSRC(ssrc);
+ StreamInfo streamInfo = storager.queryPlayByStreamId(streamId);
if ("rtp".equals(app) && !regist ) {
if (streamInfo!=null){
storager.stopPlay(streamInfo);
}else{
- streamInfo = storager.queryPlaybackBySSRC(ssrc);
+ streamInfo = storager.queryPlaybackByStreamId(streamId);
storager.stopPlayback(streamInfo);
}
}
@@ -299,16 +278,14 @@
logger.debug("ZLM HOOK on_stream_none_reader API璋冪敤锛屽弬鏁帮細" + json.toString());
}
- BigInteger bigint=new BigInteger(json.getString("stream"), 16);
- int numb=bigint.intValue();
- String ssrc = String.format("%010d", numb);
-
- cmder.streamByeCmd(ssrc);
- StreamInfo streamInfo = storager.queryPlayBySSRC(ssrc);
+ String streamId = json.getString("stream");
+
+ cmder.streamByeCmd(streamId);
+ StreamInfo streamInfo = storager.queryPlayByStreamId(streamId);
if (streamInfo!=null){
storager.stopPlay(streamInfo);
}else{
- streamInfo = storager.queryPlaybackBySSRC(ssrc);
+ streamInfo = storager.queryPlaybackByStreamId(streamId);
storager.stopPlayback(streamInfo);
}
@@ -330,7 +307,30 @@
logger.debug("ZLM HOOK on_stream_not_found API璋冪敤锛屽弬鏁帮細" + json.toString());
}
// TODO Auto-generated method stub
-
+
+ if (autoApplyPlay) {
+ String app = json.getString("app");
+ String streamId = json.getString("stream");
+ if ("rtp".equals(app) && streamId.indexOf("gb_play") > -1) {
+ String[] s = streamId.split("_");
+ if (s.length == 4) {
+ String deviceId = s[2];
+ String channelId = s[3];
+ Device device = storager.queryVideoDevice(deviceId);
+ if (device != null) {
+ UUID uuid = UUID.randomUUID();
+ cmder.playStreamCmd(device, channelId, (JSONObject response) -> {
+ logger.info("鏀跺埌璁㈤槄娑堟伅锛� " + response.toJSONString());
+ playService.onPublishHandlerForPlay(response, deviceId, channelId, uuid.toString());
+ });
+ }
+
+ }
+
+ }
+
+ }
+
JSONObject ret = new JSONObject();
ret.put("code", 0);
ret.put("msg", "success");
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMUtils.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMUtils.java
index 8195b65..132e1e1 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMUtils.java
@@ -21,8 +21,8 @@
private int currentPort = 0;
- public int getNewRTPPort(String ssrc) {
- String streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
+ public int getNewRTPPort(String streamId) {
+// String streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
Map<String, Object> param = new HashMap<>();
int newPort = getPortFromUdpPortRange();
param.put("port", newPort);
@@ -32,7 +32,7 @@
if (jsonObject != null && jsonObject.getInteger("code") == 0) {
return newPort;
} else {
- return getNewRTPPort(ssrc);
+ return getNewRTPPort(streamId);
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
index fdf4bc3..f427e5e 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -178,7 +178,7 @@
*/
void cleanChannelsForDevice(String deviceId);
- StreamInfo queryPlayBySSRC(String ssrc);
+ StreamInfo queryPlayByStreamId(String streamId);
StreamInfo queryPlayByDevice(String deviceId, String code);
@@ -190,5 +190,5 @@
StreamInfo queryPlaybackByDevice(String deviceId, String channelId);
- StreamInfo queryPlaybackBySSRC(String ssrc);
+ StreamInfo queryPlaybackByStreamId(String streamId);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java
index 75b9c92..3302aa3 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java
@@ -178,10 +178,6 @@
return false;
}
- @Override
- public StreamInfo queryPlayBySSRC(String ssrc) {
- return null;
- }
@Override
public StreamInfo queryPlayByDevice(String deviceId, String code) {
@@ -210,7 +206,12 @@
}
@Override
- public StreamInfo queryPlaybackBySSRC(String ssrc) {
+ public StreamInfo queryPlayByStreamId(String streamId) {
+ return null;
+ }
+
+ @Override
+ public StreamInfo queryPlaybackByStreamId(String streamId) {
return null;
}
}
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
index fe7b8e6..00d41fc 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
@@ -151,7 +151,6 @@
"_" + queryOnline + // 鎼滅储鏄惁鍦ㄧ嚎
"_" + queryHasSubChannel + // 鎼滅储鏄惁鍚湁瀛愯妭鐐�
"_" + "*";
-// List<Object> deviceChannelList = redis.keys(queryStr);
List<Object> deviceChannelList = redis.scan(queryStr);
//瀵规煡璇㈢粨鏋滄帓搴忥紝閬垮厤鍑虹幇閫氶亾鎺掑垪椤哄簭涔卞簭鐨勬儏鍐�
Collections.sort(deviceChannelList,new Comparator<Object>(){
@@ -169,7 +168,7 @@
DeviceChannel deviceChannel = (DeviceChannel)redis.get((String)deviceChannelList.get(i));
StreamInfo streamInfo = stringStreamInfoMap.get(deviceId + "_" + deviceChannel.getChannelId());
deviceChannel.setPlay(streamInfo != null);
- if (streamInfo != null) deviceChannel.setSsrc(streamInfo.getSsrc());
+ if (streamInfo != null) deviceChannel.setStreamId(streamInfo.getStreamId());
result.add(deviceChannel);
}
pageResult.setData(result);
@@ -384,7 +383,7 @@
*/
@Override
public boolean startPlay(StreamInfo stream) {
- return redis.set(String.format("%S_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, stream.getSsrc(),stream.getDeviceID(), stream.getCahnnelId()),
+ return redis.set(String.format("%S_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX, stream.getStreamId(),stream.getDeviceID(), stream.getCahnnelId()),
stream);
}
@@ -398,12 +397,12 @@
if (streamInfo == null) return false;
DeviceChannel deviceChannel = queryChannel(streamInfo.getDeviceID(), streamInfo.getCahnnelId());
if (deviceChannel != null) {
- deviceChannel.setSsrc(null);
+ deviceChannel.setStreamId(null);
deviceChannel.setPlay(false);
updateChannel(streamInfo.getDeviceID(), deviceChannel);
}
return redis.del(String.format("%S_%s_%s_%s", VideoManagerConstants.PLAYER_PREFIX,
- streamInfo.getSsrc(),
+ streamInfo.getStreamId(),
streamInfo.getDeviceID(),
streamInfo.getCahnnelId()));
}
@@ -416,22 +415,20 @@
public StreamInfo queryPlay(StreamInfo streamInfo) {
return (StreamInfo)redis.get(String.format("%S_%s_%s_%s",
VideoManagerConstants.PLAYER_PREFIX,
- streamInfo.getSsrc(),
+ streamInfo.getStreamId(),
streamInfo.getDeviceID(),
streamInfo.getCahnnelId()));
}
@Override
- public StreamInfo queryPlayBySSRC(String ssrc) {
-// List<Object> playLeys = redis.keys(String.format("%S_%s_*", VideoManagerConstants.PLAYER_PREFIX, ssrc));
- List<Object> playLeys = redis.scan(String.format("%S_%s_*", VideoManagerConstants.PLAYER_PREFIX, ssrc));
+ public StreamInfo queryPlayByStreamId(String steamId) {
+ List<Object> playLeys = redis.scan(String.format("%S_%s_*", VideoManagerConstants.PLAYER_PREFIX, steamId));
if (playLeys == null || playLeys.size() == 0) return null;
return (StreamInfo)redis.get(playLeys.get(0).toString());
}
@Override
- public StreamInfo queryPlaybackBySSRC(String ssrc) {
-// List<Object> playLeys = redis.keys(String.format("%S_%s_*", VideoManagerConstants.PLAYER_PREFIX, ssrc));
- List<Object> playLeys = redis.scan(String.format("%S_%s_*", VideoManagerConstants.PLAY_BLACK_PREFIX, ssrc));
+ public StreamInfo queryPlaybackByStreamId(String steamId) {
+ List<Object> playLeys = redis.scan(String.format("%S_%s_*", VideoManagerConstants.PLAY_BLACK_PREFIX, steamId));
if (playLeys == null || playLeys.size() == 0) return null;
return (StreamInfo)redis.get(playLeys.get(0).toString());
}
@@ -526,7 +523,7 @@
@Override
public boolean startPlayback(StreamInfo stream) {
- return redis.set(String.format("%S_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, stream.getSsrc(),stream.getDeviceID(), stream.getCahnnelId()),
+ return redis.set(String.format("%S_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, stream.getStreamId(),stream.getDeviceID(), stream.getCahnnelId()),
stream);
}
@@ -536,12 +533,12 @@
if (streamInfo == null) return false;
DeviceChannel deviceChannel = queryChannel(streamInfo.getDeviceID(), streamInfo.getCahnnelId());
if (deviceChannel != null) {
- deviceChannel.setSsrc(null);
+ deviceChannel.setStreamId(null);
deviceChannel.setPlay(false);
updateChannel(streamInfo.getDeviceID(), deviceChannel);
}
return redis.del(String.format("%S_%s_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX,
- streamInfo.getSsrc(),
+ streamInfo.getStreamId(),
streamInfo.getDeviceID(),
streamInfo.getCahnnelId()));
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java
index e741b5a..3da666a 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java
@@ -80,7 +80,7 @@
playService.onPublishHandlerForPlay(response, deviceId, channelId, uuid.toString());
});
} else {
- String streamId = String.format("%08x", Integer.parseInt(streamInfo.getSsrc())).toUpperCase();
+ String streamId = streamInfo.getStreamId();
JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(streamId);
if (rtpInfo.getBoolean("exist")) {
RequestMessage msg = new RequestMessage();
@@ -99,21 +99,21 @@
return result;
}
- @PostMapping("/play/{ssrc}/stop")
- public ResponseEntity<String> playStop(@PathVariable String ssrc) {
+ @PostMapping("/play/{streamId}/stop")
+ public ResponseEntity<String> playStop(@PathVariable String streamId) {
- cmder.streamByeCmd(ssrc);
- StreamInfo streamInfo = storager.queryPlayBySSRC(ssrc);
+ cmder.streamByeCmd(streamId);
+ StreamInfo streamInfo = storager.queryPlayByStreamId(streamId);
if (streamInfo == null)
- return new ResponseEntity<String>("ssrc not found", HttpStatus.OK);
+ return new ResponseEntity<String>("streamId not found", HttpStatus.OK);
storager.stopPlay(streamInfo);
if (logger.isDebugEnabled()) {
- logger.debug(String.format("璁惧棰勮鍋滄API璋冪敤锛宻src锛�%s", ssrc));
+ logger.debug(String.format("璁惧棰勮鍋滄API璋冪敤锛宻treamId锛�%s", streamId));
}
- if (ssrc != null) {
+ if (streamId != null) {
JSONObject json = new JSONObject();
- json.put("ssrc", ssrc);
+ json.put("streamId", streamId);
return new ResponseEntity<String>(json.toString(), HttpStatus.OK);
} else {
logger.warn("璁惧棰勮鍋滄API璋冪敤澶辫触锛�");
@@ -123,17 +123,16 @@
/**
* 灏嗕笉鏄痟264鐨勮棰戦�氳繃ffmpeg 杞爜涓篽264 + aac
- * @param ssrc
+ * @param streamId 娴両D
* @return
*/
- @PostMapping("/play/{ssrc}/convert")
- public ResponseEntity<String> playConvert(@PathVariable String ssrc) {
- StreamInfo streamInfo = storager.queryPlayBySSRC(ssrc);
+ @PostMapping("/play/{streamId}/convert")
+ public ResponseEntity<String> playConvert(@PathVariable String streamId) {
+ StreamInfo streamInfo = storager.queryPlayByStreamId(streamId);
if (streamInfo == null) {
logger.warn("瑙嗛杞爜API璋冪敤澶辫触锛�, 瑙嗛娴佸凡缁忓仠姝�!");
return new ResponseEntity<String>("鏈壘鍒拌棰戞祦淇℃伅, 瑙嗛娴佸彲鑳藉凡缁忓仠姝�", HttpStatus.OK);
}
- String streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(streamId);
if (!rtpInfo.getBoolean("exist")) {
logger.warn("瑙嗛杞爜API璋冪敤澶辫触锛�, 瑙嗛娴佸凡鍋滄鎺ㄦ祦!");
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/playback/PlaybackController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/playback/PlaybackController.java
index 2e32b1b..5fbaabf 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/playback/PlaybackController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/playback/PlaybackController.java
@@ -72,7 +72,7 @@
StreamInfo streamInfo = storager.queryPlaybackByDevice(deviceId, channelId);
if (streamInfo != null) {
// 鍋滄涔嬪墠鐨勫洖鏀�
- cmder.streamByeCmd(streamInfo.getSsrc());
+ cmder.streamByeCmd(streamInfo.getStreamId());
}
resultHolder.put(DeferredResultHolder.CALLBACK_CMD_PlAY + uuid, result);
cmder.playbackStreamCmd(device, channelId, startTime, endTime, (JSONObject response) -> {
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/service/impl/PlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/vmanager/service/impl/PlayServiceImpl.java
index e9528d1..2800882 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/service/impl/PlayServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/service/impl/PlayServiceImpl.java
@@ -61,9 +61,7 @@
public StreamInfo onPublishHandler(JSONObject resonse, String deviceId, String channelId, String uuid) {
String streamId = resonse.getString("id");
- String ssrc = new DecimalFormat("0000000000").format(Integer.parseInt(streamId, 16));
StreamInfo streamInfo = new StreamInfo();
- streamInfo.setSsrc(ssrc);
streamInfo.setStreamId(streamId);
streamInfo.setDeviceID(deviceId);
streamInfo.setCahnnelId(channelId);
diff --git a/src/main/java/com/genersoft/iot/vmp/web/ApiDeviceController.java b/src/main/java/com/genersoft/iot/vmp/web/ApiDeviceController.java
index ce3b7ec..fdb6778 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/ApiDeviceController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/ApiDeviceController.java
@@ -159,7 +159,7 @@
deviceJOSNChannel.put("PTZType ", deviceChannel.getPTZType()); // 浜戝彴绫诲瀷, 0 - 鏈煡, 1 - 鐞冩満, 2 - 鍗婄悆,
// 3 - 鍥哄畾鏋満, 4 - 閬ユ帶鏋満
deviceJOSNChannel.put("CustomPTZType", "");
- deviceJOSNChannel.put("StreamID", deviceChannel.getSsrc()); // StreamID 鐩存挱娴両D, 鏈夊�艰〃绀烘鍦ㄧ洿鎾�
+ deviceJOSNChannel.put("StreamID", deviceChannel.getStreamId()); // StreamID 鐩存挱娴両D, 鏈夊�艰〃绀烘鍦ㄧ洿鎾�
deviceJOSNChannel.put("NumOutputs ", -1); // 鐩存挱鍦ㄧ嚎浜烘暟
channleJSONList.add(deviceJOSNChannel);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java b/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
index 6180fbb..b3fc247 100644
--- a/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
+++ b/src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
@@ -96,12 +96,12 @@
// streamInfo = cmder.playStreamCmd(device, code);
}else {
logger.debug("streamInfo 涓嶇瓑浜巒ull, 鍚戞祦濯掍綋鏌ヨ鏄惁姝e湪鎺ㄦ祦");
- String streamId = String.format("%08x", Integer.parseInt(streamInfo.getSsrc())).toUpperCase();
+ String streamId = streamInfo.getStreamId();
JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(streamId);
if (rtpInfo.getBoolean("exist")) {
logger.debug("鍚戞祦濯掍綋鏌ヨ姝e湪鎺ㄦ祦, 鐩存帴杩斿洖: " + streamInfo.getRtsp());
JSONObject result = new JSONObject();
- result.put("StreamID", streamInfo.getSsrc());
+ result.put("StreamID", streamInfo.getStreamId());
result.put("DeviceID", device.getDeviceId());
result.put("ChannelID", code);
result.put("ChannelName", deviceChannel.getName());
@@ -141,7 +141,7 @@
if (logger.isDebugEnabled()) {
logger.debug(String.format("璁惧棰勮 API璋冪敤锛宒eviceId锛�%s 锛宑hannelId锛�%s",serial, code));
- logger.debug("璁惧棰勮 API璋冪敤锛宻src锛�"+streamInfo.getSsrc()+",ZLMedia streamId:"+Integer.toHexString(Integer.parseInt(streamInfo.getSsrc())));
+ logger.debug("璁惧棰勮 API璋冪敤锛宻treamId锛�"+streamInfo.getStreamId());
}
boolean lockFlag = true;
long startTime = System.currentTimeMillis();
@@ -173,7 +173,7 @@
}
if(streamInfo!=null) {
JSONObject result = new JSONObject();
- result.put("StreamID", streamInfo.getSsrc());
+ result.put("StreamID", streamInfo.getStreamId());
result.put("DeviceID", device.getDeviceId());
result.put("ChannelID", code);
result.put("ChannelName", deviceChannel.getName());
@@ -234,7 +234,7 @@
result.put("error","鏈壘鍒版祦淇℃伅");
return result;
}
- cmder.streamByeCmd(streamInfo.getSsrc());
+ cmder.streamByeCmd(streamInfo.getStreamId());
storager.stopPlay(streamInfo);
return null;
}
diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml
index b58c063..868298a 100644
--- a/src/main/resources/application-dev.yml
+++ b/src/main/resources/application-dev.yml
@@ -74,6 +74,8 @@
# 璁句负false鍙互鑾峰緱鏇村ソ鐨勫吋瀹规��,淇濊瘉杩斿洖鍚庢祦灏卞彲浠ユ挱鏀�,
# 璁句负true鍙互蹇�熸墦寮�鎾斁绐楀彛,鍙互鑾峰緱鏇村ソ鐨勪綋楠�
closeWaitRTPInfo: false
+ # [鍙�塢 鑷姩鐐规挱锛� 浣跨敤鍥哄畾娴佸湴鍧�杩涜鎾斁鏃讹紝濡傛灉鏈偣鎾垯鑷姩杩涜鐐规挱
+ autoApplyPlay: true
# 鍚敤udp澶氱鍙fā寮�, 璇︾粏瑙i噴鍙傝��: https://github.com/xia-chu/ZLMediaKit/wiki/GB28181%E6%8E%A8%E6%B5%81 涓嬬殑楂橀樁浣跨敤
rtp:
# [鍙�塢 鏄惁鍚敤udp澶氱鍙fā寮�, 寮�鍚悗浼氬湪udpPortRange鑼冨洿鍐呴�夋嫨绔彛鐢ㄤ簬濯掍綋娴佷紶杈�
diff --git a/web_src/src/components/channelList.vue b/web_src/src/components/channelList.vue
index 4c39a3f..738012d 100644
--- a/web_src/src/components/channelList.vue
+++ b/web_src/src/components/channelList.vue
@@ -187,9 +187,9 @@
url: '/api/play/' + deviceId + '/' + channelId + '?getEncoding=' + getEncoding
}).then(function (res) {
console.log(res.data)
- let ssrc = res.data.ssrc;
+ let streamId = res.data.streamId;
that.isLoging = false;
- if (!!ssrc) {
+ if (!!streamId) {
// that.$refs.devicePlayer.play(res.data, deviceId, channelId, itemData.hasAudio);
that.$refs.devicePlayer.openDialog("media", deviceId, channelId, {
streamInfo: res.data,
@@ -212,7 +212,7 @@
var that = this;
this.$axios({
method: 'post',
- url: '/api/play/' + itemData.ssrc + '/stop'
+ url: '/api/play/' + itemData.streamId + '/stop'
}).then(function (res) {
console.log(JSON.stringify(res));
that.initData();
diff --git a/web_src/src/components/gb28181/devicePlayer.vue b/web_src/src/components/gb28181/devicePlayer.vue
index 8442a82..ed8464a 100644
--- a/web_src/src/components/gb28181/devicePlayer.vue
+++ b/web_src/src/components/gb28181/devicePlayer.vue
@@ -158,7 +158,6 @@
searchHistoryResult: [] //濯掍綋娴佸巻鍙茶褰曟悳绱㈢粨鏋�
},
showVideoDialog: false,
- ssrc: '',
streamId: '',
convertKey: '',
deviceId: '',
@@ -210,7 +209,6 @@
this.tabActiveName = tab;
this.channelId = channelId;
this.deviceId = deviceId;
- this.ssrc = "";
this.streamId = "";
this.videoUrl = ""
if (!!this.$refs.videoPlayer) {
@@ -238,7 +236,6 @@
this.hasaudio = hasAudio;
this.isLoging = false;
this.videoUrl = streamInfo.ws_flv;
- this.ssrc = streamInfo.ssrc;
this.streamId = streamInfo.streamId;
this.playFromStreamInfo(false, streamInfo)
},
@@ -248,7 +245,7 @@
this.$refs.videoPlayer.pause()
that.$axios({
method: 'post',
- url: '/api/play/' + that.ssrc + '/convert'
+ url: '/api/play/' + that.streamId + '/convert'
}).then(function (res) {
if (res.data.code == 0) {
that.convertKey = res.data.key;
@@ -368,9 +365,9 @@
},
playRecord: function (row) {
let that = this;
- if (that.ssrc != "") {
+ if (that.streamId != "") {
that.stopPlayRecord(function () {
- that.ssrc = "",
+ that.streamId = "",
that.playRecord(row);
})
} else {
@@ -380,7 +377,7 @@
row.endTime
}).then(function (res) {
var streamInfo = res.data;
- that.ssrc = streamInfo.ssrc;
+ that.streamId = streamInfo.streamId;
that.videoUrl = streamInfo.ws_flv;
});
}
@@ -390,7 +387,7 @@
this.videoUrl = '';
this.$axios({
method: 'get',
- url: '/api/playback/' + this.ssrc + '/stop'
+ url: '/api/playback/' + this.streamId + '/stop'
}).then(function (res) {
if (callback) callback()
});
--
Gitblit v1.8.0