Browse Source

自动播放直播流

pull/6/head
吴远 3 months ago
parent
commit
80d7e72bcb
  1. 2
      dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/TakeoffToPointParam.java
  2. 4
      dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java
  3. 61
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java
  4. 20
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java
  5. 11
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java
  6. 10
      dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java
  7. 7
      dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java

2
dk-modules/sample/src/main/java/org/dromara/sample/control/model/param/TakeoffToPointParam.java

@ -39,7 +39,7 @@ public class TakeoffToPointParam {
@Range(min = 2, max = 1500)
@NotNull
private Double rthAltitude;
private Integer rthAltitude;
@NotNull
private RcLostActionEnum rcLostAction;

4
dk-modules/sample/src/main/java/org/dromara/sample/control/service/impl/ControlServiceImpl.java

@ -196,9 +196,9 @@ public class ControlServiceImpl implements IControlService {
waylineJobEntity.setBeginTime(new Date());
waylineJobEntity.setStatus(WaylineJobStatusEnum.PENDING.getVal());
waylineJobEntity.setOutOfControlAction(OutOfControlActionEnum.RETURN_TO_HOME.getAction());
waylineJobEntity.setRthAltitude(Integer.parseInt(param.getRthAltitude().toString()));
waylineJobEntity.setRthAltitude(param.getRthAltitude());
waylineJobEntity.setMediaCount(0);
waylineJobEntity.setJobType(WaylineJobTypeEnum.PEOPLE_TASK.getType());
waylineJobEntity.setJobType(WaylineJobTypeEnum.INSTRUCT.getType());
TopicServicesResponse<ServicesReplyData> response = abstractControlService.takeoffToPoint(
SDKManager.getDeviceSDK(sn), mapper.convertValue(param, TakeoffToPointRequest.class));
ServicesReplyData reply = response.getData();

61
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/LiveStreamServiceImpl.java

@ -1,23 +1,28 @@
package org.dromara.sample.manage.service.impl;
import org.dromara.common.rocketmq.producer.MessageProducerUtil;
import org.dromara.common.sdk.cloudapi.device.DeviceDomainEnum;
import org.dromara.common.sdk.cloudapi.device.VideoId;
import org.dromara.common.sdk.cloudapi.livestream.*;
import org.dromara.common.sdk.cloudapi.livestream.api.AbstractLivestreamService;
import org.dromara.common.sdk.cloudapi.wayline.FlighttaskProgress;
import org.dromara.common.sdk.common.HttpResultResponse;
import org.dromara.common.sdk.common.SDKManager;
import org.dromara.common.sdk.mqtt.services.ServicesReplyData;
import org.dromara.common.sdk.mqtt.services.TopicServicesResponse;
import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.manage.model.dto.*;
import org.dromara.sample.manage.model.entity.DeviceEntity;
import org.dromara.sample.manage.model.param.DeviceQueryParam;
import org.dromara.sample.manage.service.*;
import org.dromara.sample.wayline.model.dto.WaylineJobDTO;
import org.dromara.sample.wayline.service.IWaylineJobService;
import org.dromara.sample.wayline.service.IWaylineRedisService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -44,6 +49,16 @@ public class LiveStreamServiceImpl implements ILiveStreamService {
@Autowired
private AbstractLivestreamService abstractLivestreamService;
@Autowired
private IPlayTextService playTextService;
@Autowired
private IWaylineRedisService waylineRedisService;
@Autowired
private IWaylineJobService waylineJobService;
@Override
public List<CapacityDeviceDTO> getLiveCapacity(String workspaceId) {
@ -68,26 +83,23 @@ public class LiveStreamServiceImpl implements ILiveStreamService {
@Override
public HttpResultResponse liveStart(LiveTypeDTO liveParam) {
// Check if this lens is available live.
HttpResultResponse<DeviceDTO> responseResult = this.checkBeforeLive(liveParam.getVideoId());
if (HttpResultResponse.CODE_SUCCESS != responseResult.getCode()) {
return responseResult;
}
Boolean flag = deviceRedisService.checkDeviceVideo(liveParam.getVideoId().getDroneSn());
ILivestreamUrl url = LiveStreamProperty.get(liveParam.getUrlType());
url = setExt(liveParam.getUrlType(), url, liveParam.getVideoId());
if (!flag) {
TopicServicesResponse<ServicesReplyData<String>> response = abstractLivestreamService.liveStartPush(
SDKManager.getDeviceSDK(responseResult.getData().getDeviceSn()),
new LiveStartPushRequest()
.setUrl(url)
.setUrlType(liveParam.getUrlType())
.setVideoId(liveParam.getVideoId())
.setVideoQuality(liveParam.getVideoQuality()));
if (!response.getData().getResult().isSuccess()) {
TopicServicesResponse<ServicesReplyData<String>> response = abstractLivestreamService.liveStartPush(
SDKManager.getDeviceSDK(responseResult.getData().getDeviceSn()),
new LiveStartPushRequest()
.setUrl(url)
.setUrlType(liveParam.getUrlType())
.setVideoId(liveParam.getVideoId())
.setVideoQuality(liveParam.getVideoQuality()));
if (!response.getData().getResult().isSuccess()) {
if(response.getData().getResult().getCode() != 513003){
return HttpResultResponse.error(response.getData().getResult());
}
}
@ -116,7 +128,22 @@ public class LiveStreamServiceImpl implements ILiveStreamService {
default:
return HttpResultResponse.error(LiveErrorCodeEnum.URL_TYPE_NOT_SUPPORTED);
}
DeviceEntity deviceBySn = deviceService.getDeviceByChildSn(liveParam.getVideoId().getDroneSn());
if(deviceBySn != null){
Optional<EventsReceiver<FlighttaskProgress>> runningWaylineJob = waylineRedisService.getRunningWaylineJob(deviceBySn.getDeviceSn());
Map<String,Object> reqMap = new HashMap<>();
if(runningWaylineJob.isPresent()) {
String jobId = runningWaylineJob.get().getOutput().getExt().getFlightId();
Optional<WaylineJobDTO> waylineJobDTO = waylineJobService.getJobByJobInternalId(jobId);
reqMap.put("jobId",waylineJobDTO.get().getJobId());
reqMap.put("jobName",waylineJobDTO.get().getJobName());
reqMap.put("deviceSn",deviceBySn.getDeviceSn());
playTextService.streamType(reqMap);
}
}
// MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStart",liveParam.getVideoId().getDroneSn(),liveParam.getVideoId().toString());
return HttpResultResponse.success(live);
}

20
dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java

@ -181,15 +181,23 @@ public class SDKDeviceService extends AbstractDeviceService {
@Override
public void dockLiveStatusUpdate(TopicStateRequest<DockLiveStatus> request, MessageHeaders headers){
Optional<DeviceDTO> dockOnline = deviceRedisService.getDeviceOnline(request.getGateway());
/*Optional<DeviceDTO> dockOnline = deviceRedisService.getDeviceOnline(request.getGateway());
Optional<DeviceDTO> deviceOnline = deviceRedisService.getDeviceOnline(dockOnline.get().getChildDeviceSn());
Optional<OsdDock> deviceOsd = deviceRedisService.getDeviceOsd(dockOnline.get().getDeviceSn(), OsdDock.class);
if(deviceOsd.get().getModeCode().getCode() != 4){
return;
}
if(!RedisOpsUtils.checkExist("video"+deviceOnline.get().getDeviceSn())){
return;
}
RedisOpsUtils.set("video"+deviceOnline.get().getDeviceSn(),60);
if(deviceOnline.isEmpty()){
return;
}
if(request.getData().getLiveStatus().size() == 0 ){
String deviceVideoEnum = DeviceVideoEnum.find(deviceOnline.get().getDeviceName()).getDevice();
deviceRedisService.delDeviceVideo(deviceOnline.get().getDeviceSn());
VideoId videoId = new VideoId(deviceOnline.get().getDeviceSn()+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL + DASH+DeviceTypeVideoEnum.ZERO.getVideoType());
VideoId videoId = new VideoId(deviceOnline.get().getDeviceSn()+SLASH+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL.getType() + DASH+DeviceTypeVideoEnum.ZERO.getVideoType());
MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStopStart",deviceOnline.get().getDeviceSn(),videoId.toString());
}
@ -197,10 +205,10 @@ public class SDKDeviceService extends AbstractDeviceService {
item.getVideoId().getDroneSn().equals(dockOnline.get().getChildDeviceSn()) && item.getStatus() == true).collect(Collectors.toList());
if(dockLiveStatusDataList.size() == 0){
String deviceVideoEnum = DeviceVideoEnum.find(deviceOnline.get().getDeviceName()).getDevice();
VideoId videoId = new VideoId(deviceOnline.get().getDeviceSn()+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL + DASH+DeviceTypeVideoEnum.ZERO.getVideoType());
VideoId videoId = new VideoId(deviceOnline.get().getDeviceSn()+SLASH+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL.getType() + DASH+DeviceTypeVideoEnum.ZERO.getVideoType());
deviceRedisService.delDeviceVideo(deviceOnline.get().getDeviceSn());
MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStopStart",deviceOnline.get().getDeviceSn(),videoId.toString());
}
}*/
}
@Override
@ -221,11 +229,11 @@ public class SDKDeviceService extends AbstractDeviceService {
}
DeviceDTO device = deviceOpt.get();
String deviceVideoEnum = DeviceVideoEnum.find(device.getDeviceName()).getDevice();
/*String deviceVideoEnum = DeviceVideoEnum.find(device.getDeviceName()).getDevice();
if(!deviceRedisService.checkDeviceVideo(device.getDeviceSn())){
VideoId videoId = new VideoId(device.getDeviceSn()+SLASH+deviceVideoEnum+SLASH + VideoTypeEnum.NORMAL.getType() + DASH+DeviceTypeVideoEnum.ZERO.getVideoType());
MessageProducerUtil.sendAsyncProducerMessage("videoStartConsum","videoStart",device.getDeviceSn(),videoId.toString());
}
}*/
deviceRedisService.setDeviceOnline(device);
deviceRedisService.setDeviceOsd(from, request.getData());
deviceService.pushOsdDataToWeb(device.getWorkspaceId(), BizCodeEnum.DEVICE_OSD, from, request.getData());

11
dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java

@ -3,6 +3,7 @@ package org.dromara.sample.media.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.dromara.common.core.constant.DeviceQrtzConstants;
import org.dromara.common.sdk.cloudapi.device.OsdDock;
import org.dromara.common.sdk.cloudapi.media.*;
import org.dromara.common.sdk.cloudapi.media.api.AbstractMediaService;
import org.dromara.common.sdk.mqtt.MqttReply;
@ -113,9 +114,17 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
String jobId = callback.getFile().getExt().getFlightId();
Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(request.getGateway());
if(deviceRedisService.getDeviceOsd(request.getGateway(), OsdDock.class).get().getModeCode().getCode() == 4){
DeviceDTO device = deviceOpt.get();
boolean isSave = parseMediaFile(callback, device);
if (!isSave) {
log.error("将文件保存到数据库失败,请手动检查数据。");
return null;
}
return new TopicEventsResponse<MqttReply>().setData(MqttReply.success());
}
MediaFileCountDTO mediaFileCount = mediaRedisService.getMediaCount(request.getGateway(), jobId);
List<DeviceQrtzFileEntity> deviceQrtzFileEntities = deviceQrtzFileMapper.selectList(new LambdaQueryWrapper<DeviceQrtzFileEntity>().eq(DeviceQrtzFileEntity::getDeviceSn, request.getGateway()).eq(DeviceQrtzFileEntity::getStatus, DeviceQrtzConstants.QRTZ_FILE_STATUS_2).eq(DeviceQrtzFileEntity::getWaylineId, mediaFileCount.getFileId()));
// duplicate data
if (deviceOpt.isEmpty()
|| (Objects.nonNull(mediaFileCount) && request.getBid().equals(mediaFileCount.getBid())

10
dk-modules/sample/src/main/java/org/dromara/sample/rocketmq/RocketMqConsum.java

@ -72,14 +72,8 @@ public class RocketMqConsum implements RocketMQListener<MessageExt> {
Optional<WaylineJobDTO> waylineJobDTO = waylineJobService.getJobByJobInternalId(jobId);
reqMap.put("jobId",waylineJobDTO.get().getJobId());
reqMap.put("jobName",waylineJobDTO.get().getJobName());
reqMap.put("deviceSn",videoId.getDroneSn());
playTextService.streamType(reqMap);
}
liveStreamService.liveStop(videoId);
HttpResultResponse httpResultResponse = liveStreamService.liveStart(liveTypeDTO);
if (httpResultResponse.getCode() == 0 || httpResultResponse.getCode() == 513012 || httpResultResponse.getCode() == 513003){
reqMap.put("deviceSn:",videoId.getDroneSn());
// playTextService.streamType(reqMap);
}
deviceRedisService.setDeviceVideo(videoId.getDroneSn(),videoId);
}
}

7
dk-modules/sample/src/main/java/org/dromara/sample/wayline/controller/WaylineJobController.java

@ -15,6 +15,7 @@ import org.dromara.common.sdk.common.PaginationData;
import org.dromara.sample.component.mqtt.model.EventsReceiver;
import org.dromara.sample.media.model.MediaFileDTO;
import org.dromara.sample.wayline.model.dto.WaylineJobDTO;
import org.dromara.sample.wayline.model.enums.WaylineTaskStatusEnum;
import org.dromara.sample.wayline.model.param.CreateJobParam;
import org.dromara.sample.wayline.model.param.UpdateJobParam;
import org.dromara.sample.wayline.service.IFlightTaskService;
@ -120,6 +121,12 @@ public class WaylineJobController {
return HttpResultResponse.success();
}
public static void main(String[] args) {
WaylineTaskStatusEnum pause = WaylineTaskStatusEnum.RESUME;
System.out.println(pause.getVal());
}
@GetMapping("/{workspace_id}/getJobFileUrlByDeviceSn")
@Operation(summary = "根据设备查询飞行任务。", description = "根据设备查询飞行任务。")

Loading…
Cancel
Save