mirror of
https://gitee.com/pan648540858/wvp-GB28181-pro.git
synced 2026-05-24 05:57:49 +08:00
[1078] 支持无人观看自动停流
This commit is contained in:
parent
be04660de8
commit
44ed06bcbe
@ -234,8 +234,6 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// 设置超时监听
|
// 设置超时监听
|
||||||
dynamicTask.startDelay(playKey, () -> {
|
dynamicTask.startDelay(playKey, () -> {
|
||||||
log.info("[JT-点播] 超时, phoneNumber: {}, channelId: {}", phoneNumber, channelId);
|
log.info("[JT-点播] 超时, phoneNumber: {}, channelId: {}", phoneNumber, channelId);
|
||||||
@ -382,7 +380,8 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
String app = "1078";
|
String app = "1078";
|
||||||
String stream = phoneNumber + "_" + channelId;
|
String stream = String.format("%s_%s_%s_%s", phoneNumber, channelId,
|
||||||
|
DateUtil.yyyy_MM_dd_HH_mm_ssToUrl(startTime), DateUtil.yyyy_MM_dd_HH_mm_ssToUrl(endTime));
|
||||||
MediaServer mediaServer = mediaServerService.getMediaServerForMinimumLoad(null);
|
MediaServer mediaServer = mediaServerService.getMediaServerForMinimumLoad(null);
|
||||||
if (mediaServer == null) {
|
if (mediaServer == null) {
|
||||||
for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) {
|
for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) {
|
||||||
|
|||||||
@ -100,15 +100,12 @@ public class jt1078ServiceImpl implements Ijt1078Service {
|
|||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public JTMediaStreamType checkStreamFromJt(String stream) {
|
public JTMediaStreamType checkStreamFromJt(String stream) {
|
||||||
if (!stream.startsWith("jt_")) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
String[] streamParamArray = stream.split("_");
|
String[] streamParamArray = stream.split("_");
|
||||||
if (streamParamArray.length == 3) {
|
if (streamParamArray.length == 2) {
|
||||||
return JTMediaStreamType.PLAY;
|
return JTMediaStreamType.PLAY;
|
||||||
}else if (streamParamArray.length == 5) {
|
|
||||||
return JTMediaStreamType.PLAYBACK;
|
|
||||||
}else if (streamParamArray.length == 4) {
|
}else if (streamParamArray.length == 4) {
|
||||||
|
return JTMediaStreamType.PLAYBACK;
|
||||||
|
}else if (streamParamArray.length == 5) {
|
||||||
return JTMediaStreamType.TALK;
|
return JTMediaStreamType.TALK;
|
||||||
}else {
|
}else {
|
||||||
return null;
|
return null;
|
||||||
|
|||||||
@ -249,7 +249,7 @@ public class ABLHttpHookListener {
|
|||||||
@PostMapping(value = "/on_stream_none_reader", produces = "application/json;charset=UTF-8")
|
@PostMapping(value = "/on_stream_none_reader", produces = "application/json;charset=UTF-8")
|
||||||
public JSONObject onStreamNoneReader(@RequestBody ABLHookParam param) {
|
public JSONObject onStreamNoneReader(@RequestBody ABLHookParam param) {
|
||||||
|
|
||||||
logger.info("[ZLM HOOK]流无人观看:{}->{}/{}", param.getMediaServerId(),
|
logger.info("[ABL HOOK]流无人观看:{}->{}/{}", param.getMediaServerId(),
|
||||||
param.getApp(), param.getStream());
|
param.getApp(), param.getStream());
|
||||||
JSONObject ret = new JSONObject();
|
JSONObject ret = new JSONObject();
|
||||||
|
|
||||||
|
|||||||
@ -38,7 +38,7 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int createRTPServer(MediaServer mediaServer, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) {
|
public int createRTPServer(MediaServer mediaServer, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) {
|
||||||
return zlmServerFactory.createRTPServer(mediaServer, streamId, ssrc, port, onlyAuto, disableAudio, reUsePort, tcpMode);
|
return zlmServerFactory.createRTPServer(mediaServer, "rtp", streamId, ssrc, port, onlyAuto, disableAudio, reUsePort, tcpMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -48,7 +48,7 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int createJTTServer(MediaServer mediaServer, String streamId, Integer port, Boolean disableVideo, Boolean disableAudio, Integer tcpMode) {
|
public int createJTTServer(MediaServer mediaServer, String streamId, Integer port, Boolean disableVideo, Boolean disableAudio, Integer tcpMode) {
|
||||||
return zlmServerFactory.createRTPServer(mediaServer, streamId, 0, port, disableVideo, disableAudio, false, tcpMode);
|
return zlmServerFactory.createRTPServer(mediaServer, "1078", streamId, 0, port, disableVideo, disableAudio, false, tcpMode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@ -28,7 +28,7 @@ public class ZLMServerFactory {
|
|||||||
* @param tcpMode 0/null udp 模式,1 tcp 被动模式, 2 tcp 主动模式。
|
* @param tcpMode 0/null udp 模式,1 tcp 被动模式, 2 tcp 主动模式。
|
||||||
* @return
|
* @return
|
||||||
*/
|
*/
|
||||||
public int createRTPServer(MediaServer mediaServerItem, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) {
|
public int createRTPServer(MediaServer mediaServerItem, String app, String streamId, long ssrc, Integer port, Boolean onlyAuto, Boolean disableAudio, Boolean reUsePort, Integer tcpMode) {
|
||||||
int result = -1;
|
int result = -1;
|
||||||
// 查询此rtp server 是否已经存在
|
// 查询此rtp server 是否已经存在
|
||||||
JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(mediaServerItem, streamId);
|
JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(mediaServerItem, streamId);
|
||||||
@ -43,7 +43,7 @@ public class ZLMServerFactory {
|
|||||||
JSONObject jsonObject = zlmresTfulUtils.closeRtpServer(mediaServerItem, param);
|
JSONObject jsonObject = zlmresTfulUtils.closeRtpServer(mediaServerItem, param);
|
||||||
if (jsonObject != null ) {
|
if (jsonObject != null ) {
|
||||||
if (jsonObject.getInteger("code") == 0) {
|
if (jsonObject.getInteger("code") == 0) {
|
||||||
return createRTPServer(mediaServerItem, streamId, ssrc, port,onlyAuto, reUsePort,disableAudio, tcpMode);
|
return createRTPServer(mediaServerItem, streamId, app, ssrc, port,onlyAuto, reUsePort,disableAudio, tcpMode);
|
||||||
}else {
|
}else {
|
||||||
log.warn("[开启rtpServer], 重启RtpServer错误");
|
log.warn("[开启rtpServer], 重启RtpServer错误");
|
||||||
}
|
}
|
||||||
@ -61,6 +61,7 @@ public class ZLMServerFactory {
|
|||||||
tcpMode = 0;
|
tcpMode = 0;
|
||||||
}
|
}
|
||||||
param.put("tcp_mode", tcpMode);
|
param.put("tcp_mode", tcpMode);
|
||||||
|
param.put("app", app);
|
||||||
param.put("stream_id", streamId);
|
param.put("stream_id", streamId);
|
||||||
if (disableAudio != null) {
|
if (disableAudio != null) {
|
||||||
param.put("only_track", disableAudio?2:0);
|
param.put("only_track", disableAudio?2:0);
|
||||||
|
|||||||
@ -251,21 +251,21 @@ public class MediaServiceImpl implements IMediaService {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}else {
|
|
||||||
// 判断是否是1078点播
|
|
||||||
JTMediaStreamType jtMediaStreamType = ijt1078Service.checkStreamFromJt(stream);
|
|
||||||
if (jtMediaStreamType != null) {
|
|
||||||
String[] streamParamArray = stream.split("_");
|
|
||||||
if (jtMediaStreamType.equals(JTMediaStreamType.PLAY)) {
|
|
||||||
jt1078PlayService.stopPlay(streamParamArray[1], Integer.parseInt(streamParamArray[2]));
|
|
||||||
}else if (jtMediaStreamType.equals(JTMediaStreamType.PLAYBACK)) {
|
|
||||||
jt1078PlayService.stopPlayback(streamParamArray[1], Integer.parseInt(streamParamArray[2]));
|
|
||||||
}
|
|
||||||
}else {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if ("talk".equals(app) || "broadcast".equals(app)) {
|
}else if ("1078".equals(app)) {
|
||||||
|
// 判断是否是1078播放类型
|
||||||
|
JTMediaStreamType jtMediaStreamType = ijt1078Service.checkStreamFromJt(stream);
|
||||||
|
if (jtMediaStreamType != null) {
|
||||||
|
String[] streamParamArray = stream.split("_");
|
||||||
|
if (jtMediaStreamType.equals(JTMediaStreamType.PLAY)) {
|
||||||
|
jt1078PlayService.stopPlay(streamParamArray[0], Integer.parseInt(streamParamArray[1]));
|
||||||
|
}else if (jtMediaStreamType.equals(JTMediaStreamType.PLAYBACK)) {
|
||||||
|
jt1078PlayService.stopPlayback(streamParamArray[0], Integer.parseInt(streamParamArray[1]));
|
||||||
|
}
|
||||||
|
}else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}else if ("talk".equals(app) || "broadcast".equals(app)) {
|
||||||
return false;
|
return false;
|
||||||
} else {
|
} else {
|
||||||
// 非国标流 推流/拉流代理
|
// 非国标流 推流/拉流代理
|
||||||
|
|||||||
@ -75,6 +75,10 @@ public class DateUtil {
|
|||||||
return formatterISO8601.format(formatter.parse(formatTime));
|
return formatterISO8601.format(formatter.parse(formatTime));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String yyyy_MM_dd_HH_mm_ssToUrl(@NotNull String formatTime) {
|
||||||
|
return urlFormatter.format(formatter.parse(formatTime));
|
||||||
|
}
|
||||||
|
|
||||||
public static String ISO8601Toyyyy_MM_dd_HH_mm_ss(String formatTime) {
|
public static String ISO8601Toyyyy_MM_dd_HH_mm_ss(String formatTime) {
|
||||||
// 三种日期格式都尝试,为了兼容不同厂家的日期格式
|
// 三种日期格式都尝试,为了兼容不同厂家的日期格式
|
||||||
if (verification(formatTime, formatterCompatibleISO8601)) {
|
if (verification(formatTime, formatterCompatibleISO8601)) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user