mirror of
https://gitee.com/pan648540858/wvp-GB28181-pro.git
synced 2026-05-24 22:17:49 +08:00
1078-录像回放控制
This commit is contained in:
parent
15a551d983
commit
74c98c8636
@ -257,12 +257,22 @@ public class JT1078Controller {
|
|||||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||||
@Parameter(name = "startTime", description = "开始时间,格式: yyyy-MM-dd HH:mm:ss", required = true)
|
@Parameter(name = "startTime", description = "开始时间,格式: yyyy-MM-dd HH:mm:ss", required = true)
|
||||||
@Parameter(name = "endTime", description = "结束时间,格式: yyyy-MM-dd HH:mm:ss", required = true)
|
@Parameter(name = "endTime", description = "结束时间,格式: yyyy-MM-dd HH:mm:ss", required = true)
|
||||||
|
@Parameter(name = "type", description = "0.音视频 1.音频 2.视频 3.视频或音视频", required = true)
|
||||||
|
@Parameter(name = "rate", description = "0.所有码流 1.主码流 2.子码流(如果此通道只传输音频,此字段置0)", required = true)
|
||||||
|
@Parameter(name = "playbackType", description = "0.正常回放 1.快进回放 2.关键帧快退回放 3.关键帧播放 4.单帧上传", required = true)
|
||||||
|
@Parameter(name = "playbackSpeed", description = "0.无效 1.1倍 2.2倍 3.4倍 4.8倍 5.16倍 (回放控制为1和2时,此字段内容有效,否则置0)", required = true)
|
||||||
@GetMapping("/playback/start")
|
@GetMapping("/playback/start")
|
||||||
public DeferredResult<WVPResult<StreamContent>> recordLive(HttpServletRequest request,
|
public DeferredResult<WVPResult<StreamContent>> recordLive(HttpServletRequest request,
|
||||||
@Parameter(required = true) String deviceId,
|
@Parameter(required = true) String deviceId,
|
||||||
@Parameter(required = false) String channelId,
|
@Parameter(required = false) String channelId,
|
||||||
@Parameter(required = true) String startTime,
|
@Parameter(required = true) String startTime,
|
||||||
@Parameter(required = true) String endTime) {
|
@Parameter(required = true) String endTime,
|
||||||
|
@Parameter(required = false) Integer type,
|
||||||
|
@Parameter(required = false) Integer rate,
|
||||||
|
@Parameter(required = false) Integer playbackType,
|
||||||
|
@Parameter(required = false) Integer playbackSpeed
|
||||||
|
|
||||||
|
) {
|
||||||
DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
|
DeferredResult<WVPResult<StreamContent>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
|
||||||
if (ObjectUtils.isEmpty(channelId)) {
|
if (ObjectUtils.isEmpty(channelId)) {
|
||||||
channelId = "1";
|
channelId = "1";
|
||||||
@ -278,7 +288,7 @@ public class JT1078Controller {
|
|||||||
service.stopPlay(deviceId, finalChannelId);
|
service.stopPlay(deviceId, finalChannelId);
|
||||||
});
|
});
|
||||||
|
|
||||||
service.playback(deviceId, channelId, startTime, endTime, (code, msg, streamInfo) -> {
|
service.playback(deviceId, channelId, startTime, endTime,type, rate, playbackType, playbackSpeed, (code, msg, streamInfo) -> {
|
||||||
WVPResult<StreamContent> wvpResult = new WVPResult<>();
|
WVPResult<StreamContent> wvpResult = new WVPResult<>();
|
||||||
if (code == InviteErrorCode.SUCCESS.getCode()) {
|
if (code == InviteErrorCode.SUCCESS.getCode()) {
|
||||||
wvpResult.setCode(ErrorCode.SUCCESS.getCode());
|
wvpResult.setCode(ErrorCode.SUCCESS.getCode());
|
||||||
@ -311,6 +321,23 @@ public class JT1078Controller {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Operation(summary = "1078-回放控制", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||||
|
@Parameter(name = "deviceId", description = "设备国标编号", required = true)
|
||||||
|
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||||
|
@Parameter(name = "command", description = "0:开始回放; 1:暂停回放; 2:结束回放; 3:快进回放; 4:关键帧快退回放; 5:拖动回放; 6:关键帧播放", required = true)
|
||||||
|
@Parameter(name = "playbackSpeed", description = "0.无效 1.1倍 2.2倍 3.4倍 4.8倍 5.16倍 (回放控制为1和2时,此字段内容有效,否则置0)", required = true)
|
||||||
|
@Parameter(name = "time", description = "拖动回放位置(时间)", required = true)
|
||||||
|
@GetMapping("/playback/control")
|
||||||
|
public void recordControl(@Parameter(required = true) String deviceId,
|
||||||
|
@Parameter(required = true) String channelId,
|
||||||
|
@Parameter(required = false) Integer command,
|
||||||
|
@Parameter(required = false) String time,
|
||||||
|
@Parameter(required = false) Integer playbackSpeed
|
||||||
|
|
||||||
|
) {
|
||||||
|
service.playbackControl(deviceId, channelId, command, playbackSpeed,time);
|
||||||
|
}
|
||||||
|
|
||||||
@Operation(summary = "1078-结束回放", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
@Operation(summary = "1078-结束回放", security = @SecurityRequirement(name = JwtUtils.HEADER))
|
||||||
@Parameter(name = "deviceId", description = "设备国标编号", required = true)
|
@Parameter(name = "deviceId", description = "设备国标编号", required = true)
|
||||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
|
||||||
|
|||||||
@ -23,7 +23,8 @@ public interface Ijt1078Service {
|
|||||||
|
|
||||||
void play(String deviceId, String channelId, int type, GeneralCallback<StreamInfo> callback);
|
void play(String deviceId, String channelId, int type, GeneralCallback<StreamInfo> callback);
|
||||||
|
|
||||||
void playback(String deviceId, String channelId, String startTime, String endTime, GeneralCallback<StreamInfo> callback);
|
void playback(String deviceId, String channelId, String startTime, String endTime, Integer type,
|
||||||
|
Integer rate, Integer playbackType, Integer playbackSpeed, GeneralCallback<StreamInfo> callback);
|
||||||
|
|
||||||
void stopPlay(String deviceId, String channelId);
|
void stopPlay(String deviceId, String channelId);
|
||||||
|
|
||||||
@ -112,4 +113,6 @@ public interface Ijt1078Service {
|
|||||||
void stopTalk(String deviceId, String channelId);
|
void stopTalk(String deviceId, String channelId);
|
||||||
|
|
||||||
void changeStreamType(String deviceId, String channelId, Integer streamType);
|
void changeStreamType(String deviceId, String channelId, Integer streamType);
|
||||||
|
|
||||||
|
void playbackControl(String deviceId, String channelId, Integer command, Integer playbackSpeed, String time);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -296,8 +296,10 @@ public class jt1078ServiceImpl implements Ijt1078Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void playback(String deviceId, String channelId, String startTime, String endTime, GeneralCallback<StreamInfo> callback) {
|
public void playback(String deviceId, String channelId, String startTime, String endTime, Integer type,
|
||||||
|
Integer rate, Integer playbackType, Integer playbackSpeed, GeneralCallback<StreamInfo> callback) {
|
||||||
|
logger.info("[1078-回放] 回放,设备:{}, 通道: {}, 开始时间: {}, 结束时间: {}, 音视频类型: {}, 码流类型: {}, " +
|
||||||
|
"回放方式: {}, 快进或快退倍数: {}", deviceId, channelId, startTime, endTime, type, rate, playbackType, playbackSpeed);
|
||||||
// 检查流是否已经存在,存在则返回
|
// 检查流是否已经存在,存在则返回
|
||||||
String playbackKey = VideoManagerConstants.INVITE_INFO_1078_PLAYBACK + deviceId + ":" + channelId;
|
String playbackKey = VideoManagerConstants.INVITE_INFO_1078_PLAYBACK + deviceId + ":" + channelId;
|
||||||
List<GeneralCallback<StreamInfo>> errorCallbacks = inviteErrorCallbackMap.computeIfAbsent(playbackKey, k -> new ArrayList<>());
|
List<GeneralCallback<StreamInfo>> errorCallbacks = inviteErrorCallbackMap.computeIfAbsent(playbackKey, k -> new ArrayList<>());
|
||||||
@ -363,12 +365,12 @@ public class jt1078ServiceImpl implements Ijt1078Service {
|
|||||||
J9201 j9201 = new J9201();
|
J9201 j9201 = new J9201();
|
||||||
j9201.setChannel(Integer.parseInt(channelId));
|
j9201.setChannel(Integer.parseInt(channelId));
|
||||||
j9201.setIp(mediaServer.getSdpIp());
|
j9201.setIp(mediaServer.getSdpIp());
|
||||||
j9201.setRate(0);
|
j9201.setRate(rate);
|
||||||
j9201.setPlaybackType(0);
|
j9201.setPlaybackType(playbackType);
|
||||||
j9201.setPlaybackSpeed(0);
|
j9201.setPlaybackSpeed(playbackSpeed);
|
||||||
j9201.setTcpPort(ssrcInfo.getPort());
|
j9201.setTcpPort(ssrcInfo.getPort());
|
||||||
j9201.setUdpPort(ssrcInfo.getPort());
|
j9201.setUdpPort(ssrcInfo.getPort());
|
||||||
j9201.setType(0);
|
j9201.setType(type);
|
||||||
j9201.setStartTime(DateUtil.yyyy_MM_dd_HH_mm_ssTo1078(startTime));
|
j9201.setStartTime(DateUtil.yyyy_MM_dd_HH_mm_ssTo1078(startTime));
|
||||||
j9201.setEndTime(DateUtil.yyyy_MM_dd_HH_mm_ssTo1078(endTime));
|
j9201.setEndTime(DateUtil.yyyy_MM_dd_HH_mm_ssTo1078(endTime));
|
||||||
jt1078Template.startBackLive(deviceId, j9201, 20);
|
jt1078Template.startBackLive(deviceId, j9201, 20);
|
||||||
@ -376,30 +378,43 @@ public class jt1078ServiceImpl implements Ijt1078Service {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void stopPlayback(String deviceId, String channelId) {
|
public void playbackControl(String deviceId, String channelId, Integer command, Integer playbackSpeed, String time) {
|
||||||
|
logger.info("[1078-回放控制] deviceId: {}, channelId: {}, command: {}, playbackSpeed: {}, time: {}",
|
||||||
|
deviceId, channelId, command, playbackSpeed, time);
|
||||||
String playKey = VideoManagerConstants.INVITE_INFO_1078_PLAYBACK + deviceId + ":" + channelId;
|
String playKey = VideoManagerConstants.INVITE_INFO_1078_PLAYBACK + deviceId + ":" + channelId;
|
||||||
dynamicTask.stop(playKey);
|
dynamicTask.stop(playKey);
|
||||||
StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey);
|
if (command == 2) {
|
||||||
|
// 结束回放
|
||||||
|
StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey);
|
||||||
|
// 删除缓存数据
|
||||||
|
if (streamInfo != null) {
|
||||||
|
// 关闭rtpServer
|
||||||
|
mediaServerService.closeRTPServer(streamInfo.getMediaServerId(), streamInfo.getStream());
|
||||||
|
}
|
||||||
|
// 清理回调
|
||||||
|
List<GeneralCallback<StreamInfo>> generalCallbacks = inviteErrorCallbackMap.get(playKey);
|
||||||
|
if (generalCallbacks != null && !generalCallbacks.isEmpty()) {
|
||||||
|
for (GeneralCallback<StreamInfo> callback : generalCallbacks) {
|
||||||
|
callback.run(InviteErrorCode.ERROR_FOR_FINISH.getCode(), InviteErrorCode.ERROR_FOR_FINISH.getMsg(), null);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
// 发送停止命令
|
// 发送停止命令
|
||||||
J9202 j9202 = new J9202();
|
J9202 j9202 = new J9202();
|
||||||
j9202.setChannel(Integer.parseInt(channelId));
|
j9202.setChannel(Integer.parseInt(channelId));
|
||||||
j9202.setPlaybackType(0);
|
j9202.setPlaybackType(command);
|
||||||
j9202.setPlaybackSpeed(0);
|
if (playbackSpeed != null) {
|
||||||
j9202.setPlaybackTime("");
|
j9202.setPlaybackSpeed(playbackSpeed);
|
||||||
|
}
|
||||||
|
if (!ObjectUtils.isEmpty(time)) {
|
||||||
|
j9202.setPlaybackTime(DateUtil.yyyy_MM_dd_HH_mm_ssTo1078(time));
|
||||||
|
}
|
||||||
jt1078Template.controlBackLive(deviceId, j9202, 6);
|
jt1078Template.controlBackLive(deviceId, j9202, 6);
|
||||||
logger.info("[1078-停止回放] deviceId: {}, channelId: {}", deviceId, channelId);
|
}
|
||||||
// 删除缓存数据
|
|
||||||
if (streamInfo != null) {
|
@Override
|
||||||
// 关闭rtpServer
|
public void stopPlayback(String deviceId, String channelId) {
|
||||||
mediaServerService.closeRTPServer(streamInfo.getMediaServerId(), streamInfo.getStream());
|
playbackControl(deviceId, channelId, 2, null, String.valueOf(0));
|
||||||
}
|
|
||||||
// 清理回调
|
|
||||||
List<GeneralCallback<StreamInfo>> generalCallbacks = inviteErrorCallbackMap.get(playKey);
|
|
||||||
if (generalCallbacks != null && !generalCallbacks.isEmpty()) {
|
|
||||||
for (GeneralCallback<StreamInfo> callback : generalCallbacks) {
|
|
||||||
callback.run(InviteErrorCode.ERROR_FOR_FINISH.getCode(), InviteErrorCode.ERROR_FOR_FINISH.getMsg(), null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user