|
|
|
|
@ -70,40 +70,51 @@ public class SendCommandService { |
|
|
|
|
thread.interrupt(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
sendToDevice(); |
|
|
|
|
sendToDevice(null, null); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 管理当前所有在线设备, 自动发送推流命令, 直到成功一个或全部失败, 通知慢直播平台当前推流车辆及推流状态 |
|
|
|
|
*/ |
|
|
|
|
public void sendToDevice() { |
|
|
|
|
public void sendToDevice(String clientId, Integer channelNo) { |
|
|
|
|
if (sessionManager.all() == null || sessionManager.all().size() == 0) { |
|
|
|
|
// 当前无在线设备, 直接返回, 通知给慢直播设备离线
|
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice() : 当前无在线设备, 直接返回, 通知给慢直播设备离线 "); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自动推流方法 : 当前无在线设备, 直接返回, 通知给慢直播设备离线 "); |
|
|
|
|
noticeCarStatus(null, null, BusinessConstant.LIVE_STATUS_OFFLINE); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice() : 开始执行 "); |
|
|
|
|
|
|
|
|
|
if (thread != null && thread.isAlive()) { |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice() : 已有线程执行推流, 直接返回 "); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自动推流方法 : 已有线程执行推流, 直接返回 "); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
noticeCarStatus(null, BusinessConstant.DEFAULT_CHANNEL_NO, BusinessConstant.LIVE_STATUS_WAITING); |
|
|
|
|
|
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice() : 启动线程, 开始执行发送推流命令 "); |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自动推流方法 : 启动线程, 开始执行发送推流命令 "); |
|
|
|
|
thread = new Thread(new Runnable() { |
|
|
|
|
@Override |
|
|
|
|
public void run() { |
|
|
|
|
for (Session session : sessionManager.all()) { |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice() : 调用推流方法开始 "); |
|
|
|
|
boolean result = sendCommand(session.getClientId(), BusinessConstant.DEFAULT_CHANNEL_NO); |
|
|
|
|
|
|
|
|
|
// 只要有一个设备发送推流命令成功, 直接返回, 不继续向其他设备发送推流命令
|
|
|
|
|
if (result == true) { |
|
|
|
|
return; |
|
|
|
|
if (!StringUtil.isNullOrEmpty(clientId)) { |
|
|
|
|
if (sessionManager.all().contains(clientId)) { |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自动推流方法 : 指定设备推流 : clientId = {}", clientId); |
|
|
|
|
boolean result = sendCommand(clientId, BusinessConstant.DEFAULT_CHANNEL_NO); |
|
|
|
|
|
|
|
|
|
// 只要有一个设备发送推流命令成功, 直接返回, 不继续向其他设备发送推流命令
|
|
|
|
|
if (result == true) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自动推流方法 : 指定设备推流 : clientId = {}, 设备不在线, 推流失败", clientId); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
for (Session session : sessionManager.all()) { |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自动推流方法 : 遍历设备推流 : clientId = {}", session.getClientId()); |
|
|
|
|
boolean result = sendCommand(session.getClientId(), BusinessConstant.DEFAULT_CHANNEL_NO); |
|
|
|
|
|
|
|
|
|
// 只要有一个设备发送推流命令成功, 直接返回, 不继续向其他设备发送推流命令
|
|
|
|
|
if (result == true) { |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -115,36 +126,36 @@ public class SendCommandService { |
|
|
|
|
thread.start(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* 指定车载机和通道发送推流命令, 若不传channelNo, 默认为9, 通知慢直播平台当前推流车辆及推流状态 |
|
|
|
|
* |
|
|
|
|
* @param clientId |
|
|
|
|
* @param channelNo |
|
|
|
|
*/ |
|
|
|
|
public boolean sendToDevice(String clientId, Integer channelNo) { |
|
|
|
|
log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice(clientId, channelNo) {} - {} : 开始执行 ", clientId, channelNo); |
|
|
|
|
channelNo = channelNo == null ? BusinessConstant.DEFAULT_CHANNEL_NO : channelNo; |
|
|
|
|
|
|
|
|
|
if (StringUtil.isNullOrEmpty(clientId)) { |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// 判断该设备是否为在线设备
|
|
|
|
|
Session session = sessionManager.get(clientId); |
|
|
|
|
if (session == null) { |
|
|
|
|
// 设备未在线, 直接返回
|
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
noticeCarStatus(clientId, channelNo, BusinessConstant.LIVE_STATUS_WAITING); |
|
|
|
|
if (!sendCommand(clientId, channelNo)) { |
|
|
|
|
// 若推流命令发送失败, 设备设置为离线
|
|
|
|
|
noticeCarStatus(null, channelNo, BusinessConstant.LIVE_STATUS_OFFLINE); |
|
|
|
|
} |
|
|
|
|
return true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private boolean sendCommand(String clientId, Integer channelNo) { |
|
|
|
|
// /**
|
|
|
|
|
// * 指定车载机和通道发送推流命令, 若不传channelNo, 默认为9, 通知慢直播平台当前推流车辆及推流状态
|
|
|
|
|
// *
|
|
|
|
|
// * @param clientId
|
|
|
|
|
// * @param channelNo
|
|
|
|
|
// */
|
|
|
|
|
// public boolean sendToDevice(String clientId, Integer channelNo) {
|
|
|
|
|
// log.warn(BusinessConstant.LOGGER_PREFIX + " : 自定义推流方法 sendToDevice(clientId, channelNo) {} - {} : 开始执行 ", clientId, channelNo);
|
|
|
|
|
// channelNo = channelNo == null ? BusinessConstant.DEFAULT_CHANNEL_NO : channelNo;
|
|
|
|
|
//
|
|
|
|
|
// if (StringUtil.isNullOrEmpty(clientId)) {
|
|
|
|
|
// return false;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// // 判断该设备是否为在线设备
|
|
|
|
|
// Session session = sessionManager.get(clientId);
|
|
|
|
|
// if (session == null) {
|
|
|
|
|
// // 设备未在线, 直接返回
|
|
|
|
|
// return false;
|
|
|
|
|
// }
|
|
|
|
|
//
|
|
|
|
|
// noticeCarStatus(clientId, channelNo, BusinessConstant.LIVE_STATUS_WAITING);
|
|
|
|
|
// if (!sendCommand(clientId, channelNo)) {
|
|
|
|
|
// // 若推流命令发送失败, 设备设置为离线
|
|
|
|
|
// noticeCarStatus(null, channelNo, BusinessConstant.LIVE_STATUS_OFFLINE);
|
|
|
|
|
// }
|
|
|
|
|
// return true;
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
private synchronized boolean sendCommand(String clientId, Integer channelNo) { |
|
|
|
|
channelNo = channelNo == null ? BusinessConstant.DEFAULT_CHANNEL_NO : channelNo; |
|
|
|
|
|
|
|
|
|
try { |
|
|
|
|
|