1078-录像回放控制
This commit is contained in:
@@ -257,12 +257,22 @@ public class JT1078Controller {
|
||||
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", 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 = "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")
|
||||
public DeferredResult<WVPResult<StreamContent>> recordLive(HttpServletRequest request,
|
||||
@Parameter(required = true) String deviceId,
|
||||
@Parameter(required = false) String channelId,
|
||||
@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());
|
||||
if (ObjectUtils.isEmpty(channelId)) {
|
||||
channelId = "1";
|
||||
@@ -278,7 +288,7 @@ public class JT1078Controller {
|
||||
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<>();
|
||||
if (code == InviteErrorCode.SUCCESS.getCode()) {
|
||||
wvpResult.setCode(ErrorCode.SUCCESS.getCode());
|
||||
@@ -311,6 +321,23 @@ public class JT1078Controller {
|
||||
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))
|
||||
@Parameter(name = "deviceId", description = "设备国标编号", 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 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);
|
||||
|
||||
@@ -112,4 +113,6 @@ public interface Ijt1078Service {
|
||||
void stopTalk(String deviceId, String channelId);
|
||||
|
||||
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
|
||||
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;
|
||||
List<GeneralCallback<StreamInfo>> errorCallbacks = inviteErrorCallbackMap.computeIfAbsent(playbackKey, k -> new ArrayList<>());
|
||||
@@ -363,12 +365,12 @@ public class jt1078ServiceImpl implements Ijt1078Service {
|
||||
J9201 j9201 = new J9201();
|
||||
j9201.setChannel(Integer.parseInt(channelId));
|
||||
j9201.setIp(mediaServer.getSdpIp());
|
||||
j9201.setRate(0);
|
||||
j9201.setPlaybackType(0);
|
||||
j9201.setPlaybackSpeed(0);
|
||||
j9201.setRate(rate);
|
||||
j9201.setPlaybackType(playbackType);
|
||||
j9201.setPlaybackSpeed(playbackSpeed);
|
||||
j9201.setTcpPort(ssrcInfo.getPort());
|
||||
j9201.setUdpPort(ssrcInfo.getPort());
|
||||
j9201.setType(0);
|
||||
j9201.setType(type);
|
||||
j9201.setStartTime(DateUtil.yyyy_MM_dd_HH_mm_ssTo1078(startTime));
|
||||
j9201.setEndTime(DateUtil.yyyy_MM_dd_HH_mm_ssTo1078(endTime));
|
||||
jt1078Template.startBackLive(deviceId, j9201, 20);
|
||||
@@ -376,30 +378,43 @@ public class jt1078ServiceImpl implements Ijt1078Service {
|
||||
}
|
||||
|
||||
@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;
|
||||
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.setChannel(Integer.parseInt(channelId));
|
||||
j9202.setPlaybackType(0);
|
||||
j9202.setPlaybackSpeed(0);
|
||||
j9202.setPlaybackTime("");
|
||||
j9202.setPlaybackType(command);
|
||||
if (playbackSpeed != null) {
|
||||
j9202.setPlaybackSpeed(playbackSpeed);
|
||||
}
|
||||
if (!ObjectUtils.isEmpty(time)) {
|
||||
j9202.setPlaybackTime(DateUtil.yyyy_MM_dd_HH_mm_ssTo1078(time));
|
||||
}
|
||||
jt1078Template.controlBackLive(deviceId, j9202, 6);
|
||||
logger.info("[1078-停止回放] deviceId: {}, channelId: {}", deviceId, channelId);
|
||||
// 删除缓存数据
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopPlayback(String deviceId, String channelId) {
|
||||
playbackControl(deviceId, channelId, 2, null, String.valueOf(0));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user