|
|
|
|
@ -67,7 +67,7 @@ public class SendCommandService { |
|
|
|
|
*/ |
|
|
|
|
public void restartSendToDevice() { |
|
|
|
|
if (sendCommandToDeviceThread != null && sendCommandToDeviceThread.isAlive()) { |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice : 停止原线程, 重新开启线程 "); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice : 停止原线程, 重新开启线程 "); |
|
|
|
|
sendCommandToDeviceThread.interrupt(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -80,26 +80,26 @@ public class SendCommandService { |
|
|
|
|
public void sendToDevice() { |
|
|
|
|
if (sessionManager.all() == null || sessionManager.all().size() == 0) { |
|
|
|
|
// 当前无在线设备, 直接返回, 通知给慢直播设备离线
|
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice : 当前无在线设备, 直接返回, 通知给慢直播设备离线 "); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice() : 当前无在线设备, 直接返回, 通知给慢直播设备离线 "); |
|
|
|
|
noticeCarStatus(null, null, BusinessConstant.LIVE_STATUS_OFFLINE); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice : 开始执行 "); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice() : 开始执行 "); |
|
|
|
|
|
|
|
|
|
if (sendCommandToDeviceThread != null && sendCommandToDeviceThread.isAlive()) { |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice : 已有线程执行推流, 直接返回 "); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice() : 已有线程执行推流, 直接返回 "); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
noticeCarStatus(null, BusinessConstant.DEFAULT_CHANNEL_NO, BusinessConstant.LIVE_STATUS_WAITING); |
|
|
|
|
|
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice : 启动线程, 开始执行发送推流命令 "); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice() : 启动线程, 开始执行发送推流命令 "); |
|
|
|
|
sendCommandToDeviceThread = new Thread(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
for (Session session : sessionManager.all()) { |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice : 调用推流方法开始 "); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice() : 调用推流方法开始 "); |
|
|
|
|
boolean result = sendCommand(session.getClientId(), BusinessConstant.DEFAULT_CHANNEL_NO); |
|
|
|
|
|
|
|
|
|
// 只要有一个设备发送推流命令成功, 直接返回, 不继续向其他设备发送推流命令
|
|
|
|
|
@ -123,7 +123,7 @@ public class SendCommandService { |
|
|
|
|
* @param channelNo |
|
|
|
|
*/ |
|
|
|
|
public boolean sendToDevice(String clientId, Integer channelNo) { |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice {} - {} : 开始执行 ", clientId, channelNo); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice(clientId, channelNo) {} - {} : 开始执行 ", clientId, channelNo); |
|
|
|
|
channelNo = channelNo == null ? BusinessConstant.DEFAULT_CHANNEL_NO : channelNo; |
|
|
|
|
|
|
|
|
|
if (StringUtil.isNullOrEmpty(clientId)) { |
|
|
|
|
@ -164,32 +164,28 @@ public class SendCommandService { |
|
|
|
|
boolean sendResult = resultObj.isSuccess(); |
|
|
|
|
// 若命令发送失败, 返回false
|
|
|
|
|
if (!sendResult) { |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 : 发送命令失败 "); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法-sendCommand : 发送命令失败 "); |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// step2: 由于延迟原因, 等待1s后调用jtt1078上传到缓存的推流车辆, 确认设备是否已推流
|
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 : 获取1078推流设备, 1s延迟开始 "); |
|
|
|
|
Thread.sleep(1000); |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 : 获取1078推流设备, 1s延迟结束 "); |
|
|
|
|
|
|
|
|
|
// step3: 调用3次, 失败后等待1s, 继续调用3次. 若仍然失败, 视为命令发送失败, 返回false
|
|
|
|
|
int times = 0; |
|
|
|
|
while (times < 3) { |
|
|
|
|
// 调用jtt1078流媒体接口
|
|
|
|
|
String clientId1078 = BusinessCacheUtil.get1078PushDevice(); |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 : 1078推流设备 = {} ", clientId1078); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法-sendCommand : 1078推流设备 = {} ", clientId1078); |
|
|
|
|
|
|
|
|
|
// 判断返回的推流设备是否为发送命令的设备, 如果是, 返回true, 否则继续下次循环
|
|
|
|
|
if (clientId.equals(clientId1078)) { |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 : 推流设备 = 发送命令的设备, 返回推流成功"); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法-sendCommand : 推流设备 = 发送命令的设备, 返回推流成功"); |
|
|
|
|
noticeCarStatus(clientId, channelNo, BusinessConstant.LIVE_STATUS_ONLINE); |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 : 重试1s延迟开始 "); |
|
|
|
|
Thread.sleep(1000); |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 : 重试1s延迟结束 "); |
|
|
|
|
|
|
|
|
|
times++; |
|
|
|
|
} |
|
|
|
|
@ -211,7 +207,7 @@ public class SendCommandService { |
|
|
|
|
public void noticeCarStatus(String clientId, Integer channelNo, String status) { |
|
|
|
|
// 若1078通知在线, 但此时无在线设备, 不再更新状态
|
|
|
|
|
if (BusinessConstant.LIVE_STATUS_ONLINE.equals(status) && (sessionManager.all() == null || sessionManager.all().size() == 0)) { |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 noticeCarStatus : 当前无在线设备, 将设备强制置为离线, 推送给慢直播服务"); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : noticeCarStatus(更新车辆状态缓存) : 当前无在线设备, 将设备强制置为离线, 推送给慢直播服务"); |
|
|
|
|
clientId = null; |
|
|
|
|
status = BusinessConstant.LIVE_STATUS_OFFLINE; |
|
|
|
|
} |
|
|
|
|
@ -219,7 +215,7 @@ public class SendCommandService { |
|
|
|
|
// 若当前推流状态为离线, 且要更新的状态为等待, 直接返回. 离线状态不用切换等待状态
|
|
|
|
|
if (BusinessConstant.LIVE_STATUS_OFFLINE.equals(BusinessCacheUtil.getPushStatus()) |
|
|
|
|
&& BusinessConstant.LIVE_STATUS_WAITING.equals(status)) { |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 noticeCarStatus : 离线状态不用切换等待状态"); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : noticeCarStatus(更新车辆状态缓存) : 离线状态不用切换等待状态"); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -235,8 +231,8 @@ public class SendCommandService { |
|
|
|
|
Map<String, String> params = new HashMap<>(); |
|
|
|
|
params.put("clientId", clientId); |
|
|
|
|
params.put("carStat", status); |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 调用慢直播服务接口 : 当前推流设备 = {} - {} - {}", clientId, channelNo, status); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 调用慢直播服务接口 : 当前推流设备 = {} - {} - {}", clientId, channelNo, status); |
|
|
|
|
String res = HttpClientUtils.doGet(url, params); |
|
|
|
|
log.info(BusinessConstant.LOGGER_PREFIX + " : 调用慢直播服务接口 : 返回结果 = {}", res); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 调用慢直播服务接口 : 返回结果 = {}", res); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|