1078-添加录像上传

This commit is contained in:
648540858
2024-06-02 00:50:45 +08:00
parent e8d832d0a5
commit 3728219177
7 changed files with 240 additions and 77 deletions

View File

@@ -21,7 +21,7 @@ public class FtpServerConfig {
private UserManager userManager;
@Autowired
private FtpPlet ftpPlet;
private ftplet ftpPlet;
/**
* ftp server init

View File

@@ -0,0 +1,61 @@
package com.genersoft.iot.vmp.conf.ftpServer;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
* 配置文件 user-settings 映射的配置信息
*/
@Component
@ConfigurationProperties(prefix = "ftp", ignoreInvalidFields = true)
@Order(0)
public class FtpSetting {
private Boolean enable = Boolean.FALSE;
private String ip;
private int port = 21;
private String username = "admin";
private String password = "admin";
public Boolean getEnable() {
return enable;
}
public void setEnable(Boolean enable) {
this.enable = enable;
}
public String getIp() {
return ip;
}
public void setIp(String ip) {
this.ip = ip;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}

View File

@@ -2,7 +2,8 @@ package com.genersoft.iot.vmp.conf.ftpServer;
import com.genersoft.iot.vmp.jt1078.event.FtpUploadEvent;
import org.apache.ftpserver.ftplet.*;
import org.apache.ftpserver.impl.DefaultFtpSession;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.ApplicationEventPublisher;
@@ -12,9 +13,9 @@ import java.io.IOException;
@Component
public class FtpPlet extends DefaultFtplet {
public class ftplet extends DefaultFtplet {
private FtpletContext ftpletContext;
private final Logger logger = LoggerFactory.getLogger(ftplet.class);
@Value("${ftp.username}")
private String username;
@@ -28,22 +29,26 @@ public class FtpPlet extends DefaultFtplet {
return FtpletResult.DISCONNECT;
}
super.beforeCommand(session, request);
// if (request.getCommand().equalsIgnoreCase("STOR") ) {
// FtpUploadEvent ftpUploadEvent = new FtpUploadEvent(this);
// ftpUploadEvent.setFileName(request.getArgument());
// applicationEventPublisher.publishEvent(ftpUploadEvent);
// }
return FtpletResult.DEFAULT;
}
@Override
public FtpletResult onUploadStart(FtpSession session, FtpRequest request) throws FtpException, IOException {
DefaultFtpSession ftpSession = (DefaultFtpSession) session;
return super.onUploadStart(session, request);
public FtpletResult onUploadEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
FtpUploadEvent event = new FtpUploadEvent(this);
event.setFileName(session.getFileSystemView().getFile(request.getArgument()).getAbsolutePath());
applicationEventPublisher.publishEvent(event);
logger.info("[文件已上传]: {}", session.getFileSystemView().getFile(request.getArgument()).getAbsolutePath());
return super.onUploadEnd(session, request);
}
@Override
public FtpletResult onUploadEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
public FtpletResult onAppendEnd(FtpSession session, FtpRequest request) throws FtpException, IOException {
FtpUploadEvent event = new FtpUploadEvent(this);
event.setFileName(session.getFileSystemView().getFile(request.getArgument()).getAbsolutePath());
applicationEventPublisher.publishEvent(event);
logger.info("[文件已上传]: {}", session.getFileSystemView().getFile(request.getArgument()).getAbsolutePath());
return super.onUploadEnd(session, request);
}

View File

@@ -1,6 +1,8 @@
package com.genersoft.iot.vmp.jt1078.controller;
import com.genersoft.iot.vmp.conf.ftpServer.FtpSetting;
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.conf.security.JwtUtils;
import com.genersoft.iot.vmp.jt1078.bean.*;
import com.genersoft.iot.vmp.jt1078.controller.bean.*;
@@ -29,8 +31,11 @@ import org.springframework.web.bind.annotation.*;
import org.springframework.web.context.request.async.DeferredResult;
import javax.annotation.Resource;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
@@ -53,6 +58,9 @@ public class JT1078Controller {
@Autowired
UserSetting userSetting;
@Autowired
private FtpSetting ftpSetting;
@Qualifier("taskExecutor")
@Autowired
private ThreadPoolTaskExecutor taskExecutor;
@@ -252,7 +260,7 @@ public class JT1078Controller {
return WVPResult.success(recordList);
}
}
@Operation(summary = "1078-开始回放", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Operation(summary = "1078-录像-开始回放", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "deviceId", description = "设备国标编号", required = true)
@Parameter(name = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
@Parameter(name = "startTime", description = "开始时间,格式: yyyy-MM-dd HH:mm:ss", required = true)
@@ -321,7 +329,7 @@ public class JT1078Controller {
return result;
}
@Operation(summary = "1078-回放控制", security = @SecurityRequirement(name = JwtUtils.HEADER))
@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)
@@ -338,7 +346,7 @@ public class JT1078Controller {
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 = "channelId", description = "通道国标编号, 一般为从1开始的数字", required = true)
@GetMapping("/playback/stop")
@@ -351,6 +359,33 @@ public class JT1078Controller {
service.stopPlayback(deviceId, channelId);
}
@Operation(summary = "1078-录像-下载", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "deviceId", description = "设备国标编号", required = true)
@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)
@GetMapping("/playback/download")
public void recordDownload(HttpServletRequest request,
HttpServletResponse response,
@Parameter(required = true) String deviceId,
@Parameter(required = false) String channelId,
@Parameter(required = true) String startTime,
@Parameter(required = true) String endTime,
@Parameter(required = false) Integer type,
@Parameter(required = false) Integer rate
) throws IOException {
logger.info("[1078-录像] 下载,设备:{} 通道: {} 开始时间: {} 结束时间: {} 音视频类型: {} 码流类型: {} ",
deviceId, channelId, startTime, endTime, type, rate);
if (!ftpSetting.getEnable()) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "未启用ftp服务无法下载录像");
}
ServletOutputStream outputStream = response.getOutputStream();
service.recordDownload(deviceId, channelId, startTime, endTime, type, rate, outputStream);
}
@Operation(summary = "1078-分页查询部标设备", security = @SecurityRequirement(name = JwtUtils.HEADER))
@Parameter(name = "page", description = "当前页", required = true)
@Parameter(name = "count", description = "每页查询数量", required = true)

View File

@@ -4,7 +4,6 @@ import com.genersoft.iot.vmp.jt1078.annotation.MsgId;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.ByteBufUtil;
import io.netty.buffer.Unpooled;
import io.netty.util.CharsetUtil;
import java.nio.charset.Charset;
@@ -20,7 +19,7 @@ public class J9206 extends Rs {
// 服务器端口
private int port;
// 用户名
private String user;
private String username;
// 密码
private String password;
// 文件上传路径
@@ -62,9 +61,9 @@ public class J9206 extends Rs {
buffer.writeByte(serverIp.getBytes(Charset.forName("GBK")).length);
buffer.writeCharSequence(serverIp, Charset.forName("GBK"));
buffer.writeByte(port);
buffer.writeByte(user.getBytes(Charset.forName("GBK")).length);
buffer.writeCharSequence(user, Charset.forName("GBK"));
buffer.writeShort(port);
buffer.writeByte(username.getBytes(Charset.forName("GBK")).length);
buffer.writeCharSequence(username, Charset.forName("GBK"));
buffer.writeByte(password.getBytes(Charset.forName("GBK")).length);
buffer.writeCharSequence(password, Charset.forName("GBK"));
buffer.writeByte(path.getBytes(Charset.forName("GBK")).length);
@@ -77,7 +76,6 @@ public class J9206 extends Rs {
buffer.writeByte(streamType);
buffer.writeByte(storageType);
buffer.writeByte(taskConditions);
return buffer;
}
@@ -98,12 +96,12 @@ public class J9206 extends Rs {
this.port = port;
}
public String getUser() {
return user;
public String getUsername() {
return username;
}
public void setUser(String user) {
this.user = user;
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
@@ -187,7 +185,7 @@ public class J9206 extends Rs {
return "J9206{" +
"serverIp='" + serverIp + '\'' +
", port=" + port +
", user='" + user + '\'' +
", user='" + username + '\'' +
", password='" + password + '\'' +
", path='" + path + '\'' +
", channelId=" + channelId +

View File

@@ -6,6 +6,7 @@ import com.genersoft.iot.vmp.jt1078.bean.*;
import com.genersoft.iot.vmp.jt1078.proc.request.J1205;
import com.github.pagehelper.PageInfo;
import javax.servlet.ServletOutputStream;
import java.util.List;
public interface Ijt1078Service {
@@ -115,4 +116,6 @@ public interface Ijt1078Service {
void changeStreamType(String deviceId, String channelId, Integer streamType);
void playbackControl(String deviceId, String channelId, Integer command, Integer playbackSpeed, String time);
void recordDownload(String deviceId, String channelId, String startTime, String endTime, Integer type, Integer rate, ServletOutputStream outputStream);
}

View File

@@ -5,19 +5,19 @@ import com.genersoft.iot.vmp.common.GeneralCallback;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.common.VideoManagerConstants;
import com.genersoft.iot.vmp.conf.DynamicTask;
import com.genersoft.iot.vmp.conf.ftpServer.FtpSetting;
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.conf.exception.ControllerException;
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem;
import com.genersoft.iot.vmp.jt1078.bean.*;
import com.genersoft.iot.vmp.jt1078.bean.common.ConfigAttribute;
import com.genersoft.iot.vmp.jt1078.cmd.JT1078Template;
import com.genersoft.iot.vmp.jt1078.dao.JTDeviceMapper;
import com.genersoft.iot.vmp.jt1078.event.CallbackManager;
import com.genersoft.iot.vmp.jt1078.event.FtpUploadEvent;
import com.genersoft.iot.vmp.jt1078.proc.request.J1205;
import com.genersoft.iot.vmp.jt1078.proc.response.*;
import com.genersoft.iot.vmp.jt1078.service.Ijt1078Service;
import com.genersoft.iot.vmp.jt1078.util.SSRCUtil;
import com.genersoft.iot.vmp.media.bean.MediaInfo;
import com.genersoft.iot.vmp.media.bean.MediaServer;
import com.genersoft.iot.vmp.media.event.hook.Hook;
@@ -35,22 +35,19 @@ import com.genersoft.iot.vmp.utils.DateUtil;
import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.apache.commons.compress.utils.IOUtils;
import org.apache.commons.lang3.ObjectUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.event.EventListener;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Service;
import javax.sip.InvalidArgumentException;
import javax.sip.SipException;
import javax.servlet.ServletOutputStream;
import java.io.*;
import java.lang.reflect.Field;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.ConcurrentHashMap;
@Service
@@ -91,6 +88,9 @@ public class jt1078ServiceImpl implements Ijt1078Service {
@Autowired
private IRedisCatchStorage redisCatchStorage;
@Autowired
private FtpSetting ftpSetting;
@Override
public JTDevice getDevice(String terminalId) {
@@ -136,14 +136,14 @@ public class jt1078ServiceImpl implements Ijt1078Service {
String playKey = VideoManagerConstants.INVITE_INFO_1078_PLAY + deviceId + ":" + channelId;
List<GeneralCallback<StreamInfo>> errorCallbacks = inviteErrorCallbackMap.computeIfAbsent(playKey, k -> new ArrayList<>());
errorCallbacks.add(callback);
StreamInfo streamInfo = (StreamInfo)redisTemplate.opsForValue().get(playKey);
StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey);
if (streamInfo != null) {
String mediaServerId = streamInfo.getMediaServerId();
MediaServer mediaServer = mediaServerService.getOne(mediaServerId);
if (mediaServer != null) {
// 查询流是否存在,不存在则删除缓存数据
JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(mediaServer, "rtp", "rtsp", streamInfo.getStream());
if (mediaInfo != null && mediaInfo.getInteger("code") == 0 ) {
if (mediaInfo != null && mediaInfo.getInteger("code") == 0) {
Boolean online = mediaInfo.getBoolean("online");
if (online != null && online) {
logger.info("[1078-点播] 点播已经存在,直接返回, deviceId {} channelId {}", deviceId, channelId);
@@ -190,7 +190,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
}, userSetting.getPlayTimeout());
// 开启收流端口
SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServer, stream, null, false, false, 0, false, false, false,1);
SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServer, stream, null, false, false, 0, false, false, false, 1);
logger.info("[1078-点播] deviceId {} channelId {} 端口: {}", deviceId, channelId, ssrcInfo.getPort());
J9101 j9101 = new J9101();
j9101.setChannel(Integer.valueOf(channelId));
@@ -291,7 +291,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
return null;
}
logger.info("[1078-查询录像列表] deviceId {} channelId {} startTime {} endTime {}, 结果: {}条"
, deviceId, channelId, startTime, endTime, JRecordItemList.size() );
, deviceId, channelId, startTime, endTime, JRecordItemList.size());
return JRecordItemList;
}
@@ -305,14 +305,14 @@ public class jt1078ServiceImpl implements Ijt1078Service {
List<GeneralCallback<StreamInfo>> errorCallbacks = inviteErrorCallbackMap.computeIfAbsent(playbackKey, k -> new ArrayList<>());
errorCallbacks.add(callback);
String logInfo = String.format("deviceId:%s, channelId:%s, startTime:%s, endTime:%s", deviceId, channelId, startTime, endTime);
StreamInfo streamInfo = (StreamInfo)redisTemplate.opsForValue().get(playbackKey);
StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playbackKey);
if (streamInfo != null) {
String mediaServerId = streamInfo.getMediaServerId();
MediaServer mediaServer = mediaServerService.getOne(mediaServerId);
if (mediaServer != null) {
// 查询流是否存在,不存在则删除缓存数据
JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(mediaServer, "rtp", "rtsp", streamInfo.getStream());
if (mediaInfo != null && mediaInfo.getInteger("code") == 0 ) {
if (mediaInfo != null && mediaInfo.getInteger("code") == 0) {
Boolean online = mediaInfo.getBoolean("online");
if (online != null && online) {
logger.info("[1078-回放] 回放已经存在,直接返回, logInfo {}", logInfo);
@@ -424,6 +424,67 @@ public class jt1078ServiceImpl implements Ijt1078Service {
playbackControl(deviceId, channelId, 2, null, String.valueOf(0));
}
private Map<String, ServletOutputStream> fileUploadMap = new ConcurrentHashMap<>();
@EventListener
public void onApplicationEvent(FtpUploadEvent event) {
if (fileUploadMap.isEmpty()) {
return;
}
fileUploadMap.keySet().forEach(key -> {
if (!event.getFileName().contains(key)) {
return;
}
ServletOutputStream servletOutputStream = fileUploadMap.get(event.getFileName());
String filePath = "ftp" + event.getFileName();
File file = new File(filePath);
if (!file.exists()) {
logger.warn("[下载录像] 收到通知时未找到录像文件: {}", filePath);
return;
}
try {
FileInputStream fileInputStream = new FileInputStream(file);
IOUtils.copy(fileInputStream, servletOutputStream);
fileInputStream.close();
servletOutputStream.close();
} catch (IOException e) {
logger.warn("[下载录像] 读取文件异常: {}", filePath, e);
return;
} finally {
try {
servletOutputStream.close();
} catch (IOException ignored) {
}
}
});
}
@Override
public void recordDownload(String deviceId, String channelId, String startTime, String endTime, Integer type, Integer rate, ServletOutputStream outputStream) {
String filePath = UUID.randomUUID().toString();
fileUploadMap.put(filePath, outputStream);
logger.info("[1078-录像] 下载,设备:{} 通道: {} 开始时间: {} 结束时间: {},等待上传文件路径: {} ",
deviceId, channelId, startTime, endTime, filePath);
// 发送停止命令
J9206 j92026 = new J9206();
j92026.setChannelId(Integer.parseInt(channelId));
j92026.setStartTime(DateUtil.yyyy_MM_dd_HH_mm_ssTo1078(startTime));
j92026.setEndTime(DateUtil.yyyy_MM_dd_HH_mm_ssTo1078(endTime));
j92026.setServerIp(ftpSetting.getIp());
j92026.setPort(ftpSetting.getPort());
j92026.setUsername(ftpSetting.getUsername());
j92026.setPassword(ftpSetting.getPassword());
j92026.setPath(filePath);
if (type != null) {
j92026.setMediaType(type);
}
if (rate != null) {
j92026.setStreamType(rate);
}
jt1078Template.fileUpload(deviceId, j92026, 7200);
}
@Override
public void ptzControl(String deviceId, String channelId, String command, int speed) {
// 发送停止命令
@@ -467,7 +528,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
j9306.setChannel(Integer.parseInt(channelId));
if (command.equals("zoomin")) {
j9306.setZoom(0);
}else {
} else {
j9306.setZoom(1);
}
jt1078Template.ptzZoom(deviceId, j9306, 6);
@@ -478,7 +539,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
j9303.setChannel(Integer.parseInt(channelId));
if (command.equals("irisin")) {
j9303.setIris(0);
}else {
} else {
j9303.setIris(1);
}
jt1078Template.ptzIris(deviceId, j9303, 6);
@@ -489,7 +550,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
j9302.setChannel(Integer.parseInt(channelId));
if (command.equals("focusfar")) {
j9302.setFocalDirection(0);
}else {
} else {
j9302.setFocalDirection(1);
}
jt1078Template.ptzFocal(deviceId, j9302, 6);
@@ -504,7 +565,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
j9305.setChannel(Integer.parseInt(channelId));
if (command.equalsIgnoreCase("on")) {
j9305.setOn(1);
}else {
} else {
j9305.setOn(0);
}
jt1078Template.ptzSupplementaryLight(deviceId, j9305, 6);
@@ -516,7 +577,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
j9304.setChannel(Integer.parseInt(channelId));
if (command.equalsIgnoreCase("on")) {
j9304.setOn(1);
}else {
} else {
j9304.setOn(0);
}
jt1078Template.ptzWiper(deviceId, j9304, 6);
@@ -529,13 +590,13 @@ public class jt1078ServiceImpl implements Ijt1078Service {
}
if (params == null || params.length == 0) {
J8104 j8104 = new J8104();
return (JTDeviceConfig)jt1078Template.getDeviceConfig(deviceId, j8104, 20);
}else {
return (JTDeviceConfig) jt1078Template.getDeviceConfig(deviceId, j8104, 20);
} else {
long[] paramBytes = new long[params.length];
for (int i = 0; i < params.length; i++) {
try {
Field field = JTDeviceConfig.class.getDeclaredField(params[i]);
if (field.isAnnotationPresent(ConfigAttribute.class) ) {
if (field.isAnnotationPresent(ConfigAttribute.class)) {
ConfigAttribute configAttribute = field.getAnnotation(ConfigAttribute.class);
long id = configAttribute.id();
String description = configAttribute.description();
@@ -548,7 +609,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
}
J8106 j8106 = new J8106();
j8106.setParams(paramBytes);
return (JTDeviceConfig)jt1078Template.getDeviceSpecifyConfig(deviceId, j8106, 20);
return (JTDeviceConfig) jt1078Template.getDeviceSpecifyConfig(deviceId, j8106, 20);
}
}
@@ -583,13 +644,13 @@ public class jt1078ServiceImpl implements Ijt1078Service {
@Override
public JTDeviceAttribute attribute(String deviceId) {
J8107 j8107 = new J8107();
return (JTDeviceAttribute)jt1078Template.deviceAttribute(deviceId, j8107, 20);
return (JTDeviceAttribute) jt1078Template.deviceAttribute(deviceId, j8107, 20);
}
@Override
public JTPositionBaseInfo queryPositionInfo(String deviceId) {
J8201 j8201 = new J8201();
return (JTPositionBaseInfo)jt1078Template.queryPositionInfo(deviceId, j8201, 20);
return (JTPositionBaseInfo) jt1078Template.queryPositionInfo(deviceId, j8201, 20);
}
@Override
@@ -611,7 +672,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
@Override
public int linkDetection(String deviceId) {
J8204 j8204 = new J8204();
return (int)jt1078Template.linkDetection(deviceId, j8204, 6);
return (int) jt1078Template.linkDetection(deviceId, j8204, 6);
}
@Override
@@ -620,7 +681,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
j8300.setSign(sign);
j8300.setTextType(textType);
j8300.setContent(content);
return (int)jt1078Template.textMessage(deviceId, j8300, 6);
return (int) jt1078Template.textMessage(deviceId, j8300, 6);
}
@Override
@@ -628,7 +689,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
J8400 j8400 = new J8400();
j8400.setSign(sign);
j8400.setPhoneNumber(phoneNumber);
return (int)jt1078Template.telephoneCallback(deviceId, j8400, 6);
return (int) jt1078Template.telephoneCallback(deviceId, j8400, 6);
}
@Override
@@ -638,16 +699,16 @@ public class jt1078ServiceImpl implements Ijt1078Service {
if (phoneBookContactList != null) {
j8401.setPhoneBookContactList(phoneBookContactList);
}
return (int)jt1078Template.setPhoneBook(deviceId, j8401, 6);
return (int) jt1078Template.setPhoneBook(deviceId, j8401, 6);
}
@Override
public JTPositionBaseInfo controlDoor(String deviceId, Boolean open) {
J8500 j8500 = new J8500();
JTVehicleControl jtVehicleControl = new JTVehicleControl();
jtVehicleControl.setControlCarDoor(open?1:0);
jtVehicleControl.setControlCarDoor(open ? 1 : 0);
j8500.setVehicleControl(jtVehicleControl);
return (JTPositionBaseInfo)jt1078Template.vehicleControl(deviceId, j8500, 20);
return (JTPositionBaseInfo) jt1078Template.vehicleControl(deviceId, j8500, 20);
}
@Override
@@ -655,14 +716,14 @@ public class jt1078ServiceImpl implements Ijt1078Service {
J8600 j8600 = new J8600();
j8600.setAttribute(attribute);
j8600.setCircleAreaList(circleAreaList);
return (int)jt1078Template.setAreaForCircle(deviceId, j8600, 20);
return (int) jt1078Template.setAreaForCircle(deviceId, j8600, 20);
}
@Override
public int deleteAreaForCircle(String deviceId, List<Long> ids) {
J8601 j8601 = new J8601();
j8601.setIdList(ids);
return (int)jt1078Template.deleteAreaForCircle(deviceId, j8601, 20);
return (int) jt1078Template.deleteAreaForCircle(deviceId, j8601, 20);
}
@Override
@@ -670,7 +731,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
J8608 j8608 = new J8608();
j8608.setType(1);
j8608.setIdList(ids);
return (List<JTAreaOrRoute>)jt1078Template.queryAreaOrRoute(deviceId, j8608, 20);
return (List<JTAreaOrRoute>) jt1078Template.queryAreaOrRoute(deviceId, j8608, 20);
}
@Override
@@ -678,14 +739,14 @@ public class jt1078ServiceImpl implements Ijt1078Service {
J8602 j8602 = new J8602();
j8602.setAttribute(attribute);
j8602.setRectangleAreas(rectangleAreas);
return (int)jt1078Template.setAreaForRectangle(deviceId, j8602, 20);
return (int) jt1078Template.setAreaForRectangle(deviceId, j8602, 20);
}
@Override
public int deleteAreaForRectangle(String deviceId, List<Long> ids) {
J8603 j8603 = new J8603();
j8603.setIdList(ids);
return (int)jt1078Template.deleteAreaForRectangle(deviceId, j8603, 20);
return (int) jt1078Template.deleteAreaForRectangle(deviceId, j8603, 20);
}
@Override
@@ -693,21 +754,21 @@ public class jt1078ServiceImpl implements Ijt1078Service {
J8608 j8608 = new J8608();
j8608.setType(2);
j8608.setIdList(ids);
return (List<JTAreaOrRoute>)jt1078Template.queryAreaOrRoute(deviceId, j8608, 20);
return (List<JTAreaOrRoute>) jt1078Template.queryAreaOrRoute(deviceId, j8608, 20);
}
@Override
public int setAreaForPolygon(String deviceId, JTPolygonArea polygonArea) {
J8604 j8604 = new J8604();
j8604.setPolygonArea(polygonArea);
return (int)jt1078Template.setAreaForPolygon(deviceId, j8604, 20);
return (int) jt1078Template.setAreaForPolygon(deviceId, j8604, 20);
}
@Override
public int deleteAreaForPolygon(String deviceId, List<Long> ids) {
J8605 j8605 = new J8605();
j8605.setIdList(ids);
return (int)jt1078Template.deleteAreaForPolygon(deviceId, j8605, 20);
return (int) jt1078Template.deleteAreaForPolygon(deviceId, j8605, 20);
}
@Override
@@ -715,21 +776,21 @@ public class jt1078ServiceImpl implements Ijt1078Service {
J8608 j8608 = new J8608();
j8608.setType(3);
j8608.setIdList(ids);
return (List<JTAreaOrRoute>)jt1078Template.queryAreaOrRoute(deviceId, j8608, 20);
return (List<JTAreaOrRoute>) jt1078Template.queryAreaOrRoute(deviceId, j8608, 20);
}
@Override
public int setRoute(String deviceId, JTRoute route) {
J8606 j8606 = new J8606();
j8606.setRoute(route);
return (int)jt1078Template.setRoute(deviceId, j8606, 20);
return (int) jt1078Template.setRoute(deviceId, j8606, 20);
}
@Override
public int deleteRoute(String deviceId, List<Long> ids) {
J8607 j8607 = new J8607();
j8607.setIdList(ids);
return (int)jt1078Template.deleteRoute(deviceId, j8607, 20);
return (int) jt1078Template.deleteRoute(deviceId, j8607, 20);
}
@Override
@@ -737,27 +798,27 @@ public class jt1078ServiceImpl implements Ijt1078Service {
J8608 j8608 = new J8608();
j8608.setType(4);
j8608.setIdList(ids);
return (List<JTAreaOrRoute>)jt1078Template.queryAreaOrRoute(deviceId, j8608, 20);
return (List<JTAreaOrRoute>) jt1078Template.queryAreaOrRoute(deviceId, j8608, 20);
}
@Override
public JTDriverInformation queryDriverInformation(String deviceId) {
J8702 j8702 = new J8702();
return (JTDriverInformation)jt1078Template.queryDriverInformation(deviceId, j8702, 20);
return (JTDriverInformation) jt1078Template.queryDriverInformation(deviceId, j8702, 20);
}
@Override
public List<Long> shooting(String deviceId, JTShootingCommand shootingCommand) {
J8801 j8801 = new J8801();
j8801.setCommand(shootingCommand);
return (List<Long>)jt1078Template.shooting(deviceId, j8801, 300);
return (List<Long>) jt1078Template.shooting(deviceId, j8801, 300);
}
@Override
public List<JTMediaDataInfo> queryMediaData(String deviceId, JTQueryMediaDataCommand queryMediaDataCommand) {
J8802 j8802 = new J8802();
j8802.setCommand(queryMediaDataCommand);
return (List<JTMediaDataInfo>)jt1078Template.queryMediaData(deviceId, j8802, 300);
return (List<JTMediaDataInfo>) jt1078Template.queryMediaData(deviceId, j8802, 300);
}
@Override
@@ -788,7 +849,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
@Override
public JTMediaAttribute queryMediaAttribute(String deviceId) {
J9003 j9003 = new J9003();
return (JTMediaAttribute)jt1078Template.queryMediaAttribute(deviceId, j9003, 300);
return (JTMediaAttribute) jt1078Template.queryMediaAttribute(deviceId, j9003, 300);
}
/**
@@ -819,7 +880,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
String playKey = VideoManagerConstants.INVITE_INFO_1078_TALK + deviceId + ":" + channelId;
List<GeneralCallback<StreamInfo>> errorCallbacks = inviteErrorCallbackMap.computeIfAbsent(playKey, k -> new ArrayList<>());
errorCallbacks.add(callback);
StreamInfo streamInfo = (StreamInfo)redisTemplate.opsForValue().get(playKey);
StreamInfo streamInfo = (StreamInfo) redisTemplate.opsForValue().get(playKey);
if (streamInfo != null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "对讲进行中");
}
@@ -874,7 +935,7 @@ public class jt1078ServiceImpl implements Ijt1078Service {
});
Hook hookForDeparture = Hook.getInstance(HookType.on_media_departure, "rtp", receiveStream, mediaServer.getId());
subscribe.addSubscribe(hookForDeparture, (hookData) -> {
logger.info("[1078-对讲] 对讲时源流注销, app: {}. stream: {}, deviceId {} channelId {}",app, stream, deviceId, channelId);
logger.info("[1078-对讲] 对讲时源流注销, app: {}. stream: {}, deviceId {} channelId {}", app, stream, deviceId, channelId);
stopTalk(deviceId, channelId);
});
// 设置超时监听