[1078] 支持无人观看自动停流
This commit is contained in:
@@ -234,8 +234,6 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 设置超时监听
|
||||
dynamicTask.startDelay(playKey, () -> {
|
||||
log.info("[JT-点播] 超时, phoneNumber: {}, channelId: {}", phoneNumber, channelId);
|
||||
@@ -382,7 +380,8 @@ public class jt1078PlayServiceImpl implements Ijt1078PlayService {
|
||||
}
|
||||
|
||||
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);
|
||||
if (mediaServer == null) {
|
||||
for (CommonCallback<WVPResult<StreamInfo>> errorCallback : errorCallbacks) {
|
||||
|
||||
@@ -100,15 +100,12 @@ public class jt1078ServiceImpl implements Ijt1078Service {
|
||||
*/
|
||||
@Override
|
||||
public JTMediaStreamType checkStreamFromJt(String stream) {
|
||||
if (!stream.startsWith("jt_")) {
|
||||
return null;
|
||||
}
|
||||
String[] streamParamArray = stream.split("_");
|
||||
if (streamParamArray.length == 3) {
|
||||
if (streamParamArray.length == 2) {
|
||||
return JTMediaStreamType.PLAY;
|
||||
}else if (streamParamArray.length == 5) {
|
||||
return JTMediaStreamType.PLAYBACK;
|
||||
}else if (streamParamArray.length == 4) {
|
||||
return JTMediaStreamType.PLAYBACK;
|
||||
}else if (streamParamArray.length == 5) {
|
||||
return JTMediaStreamType.TALK;
|
||||
}else {
|
||||
return null;
|
||||
|
||||
@@ -249,7 +249,7 @@ public class ABLHttpHookListener {
|
||||
@PostMapping(value = "/on_stream_none_reader", produces = "application/json;charset=UTF-8")
|
||||
public JSONObject onStreamNoneReader(@RequestBody ABLHookParam param) {
|
||||
|
||||
logger.info("[ZLM HOOK]流无人观看:{}->{}/{}", param.getMediaServerId(),
|
||||
logger.info("[ABL HOOK]流无人观看:{}->{}/{}", param.getMediaServerId(),
|
||||
param.getApp(), param.getStream());
|
||||
JSONObject ret = new JSONObject();
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
|
||||
|
||||
@Override
|
||||
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
|
||||
@@ -48,7 +48,7 @@ public class ZLMMediaNodeServerService implements IMediaNodeServerService {
|
||||
|
||||
@Override
|
||||
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
|
||||
|
||||
@@ -28,7 +28,7 @@ public class ZLMServerFactory {
|
||||
* @param tcpMode 0/null udp 模式,1 tcp 被动模式, 2 tcp 主动模式。
|
||||
* @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;
|
||||
// 查询此rtp server 是否已经存在
|
||||
JSONObject rtpInfo = zlmresTfulUtils.getRtpInfo(mediaServerItem, streamId);
|
||||
@@ -43,7 +43,7 @@ public class ZLMServerFactory {
|
||||
JSONObject jsonObject = zlmresTfulUtils.closeRtpServer(mediaServerItem, param);
|
||||
if (jsonObject != null ) {
|
||||
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 {
|
||||
log.warn("[开启rtpServer], 重启RtpServer错误");
|
||||
}
|
||||
@@ -61,6 +61,7 @@ public class ZLMServerFactory {
|
||||
tcpMode = 0;
|
||||
}
|
||||
param.put("tcp_mode", tcpMode);
|
||||
param.put("app", app);
|
||||
param.put("stream_id", streamId);
|
||||
if (disableAudio != null) {
|
||||
param.put("only_track", disableAudio?2:0);
|
||||
|
||||
@@ -251,21 +251,21 @@ public class MediaServiceImpl implements IMediaService {
|
||||
}
|
||||
}
|
||||
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;
|
||||
} else {
|
||||
// 非国标流 推流/拉流代理
|
||||
|
||||
@@ -75,6 +75,10 @@ public class DateUtil {
|
||||
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) {
|
||||
// 三种日期格式都尝试,为了兼容不同厂家的日期格式
|
||||
if (verification(formatTime, formatterCompatibleISO8601)) {
|
||||
|
||||
Reference in New Issue
Block a user