| | |
| | | import com.ard.vtdu.domain.ArdVtdu; |
| | | import com.ard.vtdu.service.IArdMediaService; |
| | | import com.ard.vtdu.service.IArdVtduService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | |
| | | * @version 0.1 |
| | | * @date 2021/11/22 |
| | | */ |
| | | @Slf4j |
| | | @Service |
| | | @Transactional |
| | | public class LiveStreamServiceImpl implements ILiveStreamService { |
| | |
| | | ServiceReply receiveReply = this.publishLiveStart(respTopic, liveParam); |
| | | |
| | | if (ResponseResult.CODE_SUCCESS != receiveReply.getResult()) { |
| | | return ResponseResult.error(LiveErrorEnum.find(receiveReply.getResult())); |
| | | return ResponseResult.error(receiveReply.getResult(), LiveErrorEnum.find(receiveReply.getResult()).getErrorMsg()); |
| | | } |
| | | |
| | | LiveUrlTypeEnum urlType = LiveUrlTypeEnum.find(liveParam.getUrlType()); |
| | |
| | | // 如果没有,插入新的记录 |
| | | ArdVtdu vtdu = |
| | | ArdVtdu.builder().name(name).rtspSource("publisher").rtspUrl(rtspUrl).rtmpUrl(rtmpUrl).webrtcUrl(webrtcUrl).build(); |
| | | int i = ardVtduService.insertArdVtdu(vtdu); // 保存到媒体表 |
| | | if (i > 0) { |
| | | live.setRtmpUrl(rtmpUrl); |
| | | live.setRtspUrl(rtspUrl); |
| | | live.setWebrtcUrl(webrtcUrl); |
| | | // 在停止直播时不删除Vtdu表记录,所以在开启直播时再插入会报错, |
| | | // 所以要先查询是否存在该记录,如果已经存在记录,直接返回直播地址 |
| | | // 查询是否已经存在该记录 |
| | | ArdVtdu ardVtdu = ardVtduService.selectArdVtduByName(vtdu.getName()); |
| | | int i = 0; |
| | | log.info("机场视频插入前vtdu:{}",vtdu); |
| | | if(ardVtdu == null){ |
| | | i = ardVtduService.insertArdVtdu(vtdu); // 保存到媒体表 |
| | | log.info("机场视频插入后 i:{}",i); |
| | | if (i > 0) { |
| | | live.setRtmpUrl(rtmpUrl); |
| | | live.setRtspUrl(rtspUrl); |
| | | live.setWebrtcUrl(webrtcUrl); |
| | | } |
| | | } |
| | | else{ |
| | | i = ardVtduService.updateArdVtdu(vtdu); |
| | | log.info("机场视频更新后 i:{}",i); |
| | | if (i > 0) { |
| | | live.setRtmpUrl(rtmpUrl); |
| | | live.setRtspUrl(rtspUrl); |
| | | live.setWebrtcUrl(webrtcUrl); |
| | | } |
| | | } |
| | | //int i = ardVtduService.insertArdVtdu(vtdu); // 保存到媒体表 |
| | | // if (i > 0) { |
| | | // live.setRtmpUrl(rtmpUrl); |
| | | // live.setRtspUrl(rtspUrl); |
| | | // live.setWebrtcUrl(webrtcUrl); |
| | | // } |
| | | |
| | | break; |
| | | case RTSP: |
| | |
| | | return ResponseResult.error(LiveErrorEnum.URL_TYPE_NOT_SUPPORTED); |
| | | } |
| | | |
| | | // 开始直播时发送机场相机摄像头默认信息(舱外)到所有在线用户,只取机场sn,发机场的摄像头信息 |
| | | if(data.getChildDeviceSn()!=null) { |
| | | String sn = data.getDeviceSn(); |
| | | deviceService.setRedisCameraPosition(sn, 1); |
| | | } |
| | | return ResponseResult.success(live); |
| | | } |
| | | |
| | |
| | | ServiceReply receiveReply = this.publishLiveLensChange(respTopic, liveParam); |
| | | |
| | | if (ResponseResult.CODE_SUCCESS != receiveReply.getResult()) { |
| | | Integer code = receiveReply.getResult(); |
| | | if(code == 325003) { |
| | | // 指令响应失败,请重试. 经查询官网,机场3为低配,飞行器不支持红外 |
| | | return ResponseResult.error(325003000,LiveErrorEnum.COMMAND_FAILED.getErrorMsg()+"请确认无人机是否支持此功能!"); |
| | | } |
| | | return ResponseResult.error(LiveErrorEnum.find(receiveReply.getResult())); |
| | | } |
| | | |
| | |
| | | if (ResponseResult.CODE_SUCCESS != receiveReply.getResult()) { |
| | | return ResponseResult.error(LiveErrorEnum.find(receiveReply.getResult())); |
| | | } |
| | | // 将切换相机摄像头信息到redis |
| | | Integer camera_position = liveParam.getCameraPosition(); |
| | | String sn = responseResult.getData().getDeviceSn(); |
| | | deviceService.setRedisCameraPosition(sn, camera_position); |
| | | |
| | | return ResponseResult.success(); |
| | | } |