Browse Source

自动播放直播流

dev
吴远 5 months ago
parent
commit
d1e776d91e
  1. 10
      dk-modules/sample/src/main/java/org/dromara/sample/manage/service/impl/SDKDeviceService.java
  2. 2
      dk-modules/sample/src/main/java/org/dromara/sample/media/mapper/IFileMapper.java
  3. 2
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java
  4. 2
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/IMediaService.java
  5. 5
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java
  6. 36
      dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/MediaServiceImpl.java
  7. 14
      dk-modules/sample/src/main/resources/mapper/FileMapper.xml

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

@ -25,6 +25,7 @@ import org.dromara.sample.manage.model.enums.DeviceFirmwareStatusEnum;
import org.dromara.sample.manage.model.param.DeviceQueryParam;
import org.dromara.sample.manage.service.*;
import lombok.extern.slf4j.Slf4j;
import org.dromara.sample.media.service.IMediaService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.messaging.MessageHeaders;
import org.springframework.stereotype.Service;
@ -68,6 +69,9 @@ public class SDKDeviceService extends AbstractDeviceService {
@Autowired
private IDeviceQrtzService deviceQrtzService;
@Autowired
private IMediaService mediaService;
@Override
public TopicStatusResponse<MqttReply> updateTopoOnline(TopicStatusRequest<UpdateTopo> request, MessageHeaders headers) {
@ -149,6 +153,7 @@ public class SDKDeviceService extends AbstractDeviceService {
@Override
public void osdDock(TopicOsdRequest<OsdDock> request, MessageHeaders headers) {
String from = request.getFrom();
Optional<DeviceDTO> deviceOpt = deviceRedisService.getDeviceOnline(from);
if (deviceOpt.isEmpty() || !StringUtils.hasText(deviceOpt.get().getWorkspaceId())) {
deviceOpt = deviceService.getDeviceBySn(from);
@ -162,6 +167,7 @@ public class SDKDeviceService extends AbstractDeviceService {
if(request.getData().getMediaFileDetail() != null){
RedisOpsUtils.hashSet("updateMediaFileDetail",from,request.getData().getMediaFileDetail().getRemainUpload());
}
DeviceDTO device = deviceOpt.get();
if(request.getData().getLatitude() != null && request.getData().getLongitude() != null
&& ((deviceOpt.get().getLatitude() == null && deviceOpt.get().getLongitude() == null)) || (request.getData().getLatitude() != deviceOpt.get().getLatitude() && request.getData().getLongitude() != deviceOpt.get().getLongitude())){
@ -180,7 +186,9 @@ public class SDKDeviceService extends AbstractDeviceService {
&& request.getData().getDroneChargeState().getCapacityPercent() >= 80 && (remainUpload != null && remainUpload == 0)){
deviceQrtzService.getDeviceQrtzFileEntity(device);
}
if(!request.getData().getSubDevice().getDeviceOnlineStatus() && request.getData().getModeCode() == DockModeCodeEnum.IDLE){
mediaService.delMediaCount(from);
}
deviceRedisService.setDeviceOnline(device);
fillDockOsd(from, request.getData());

2
dk-modules/sample/src/main/java/org/dromara/sample/media/mapper/IFileMapper.java

@ -1,6 +1,7 @@
package org.dromara.sample.media.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.dromara.common.mybatis.core.mapper.BaseMapperPlus;
import org.dromara.sample.media.model.MediaFileEntity;
@ -10,4 +11,5 @@ import org.dromara.sample.media.model.MediaFileEntity;
* @date 2021/12/9
*/
public interface IFileMapper extends BaseMapper<MediaFileEntity> {
Integer mediaFileCount(@Param("jobId") String jobId);
}

2
dk-modules/sample/src/main/java/org/dromara/sample/media/service/IFileService.java

@ -70,6 +70,8 @@ public interface IFileService {
List<MediaFileDTO> getFilesByWorkspaceAndJobId(String workspaceId, String jobId);
Integer getFilesByJobIdCount(String jobId);
/**
* Paginate through all media files in this workspace.
* @param workspaceId

2
dk-modules/sample/src/main/java/org/dromara/sample/media/service/IMediaService.java

@ -20,6 +20,8 @@ public interface IMediaService {
*/
Boolean fastUpload(String workspaceId, String fingerprint);
void delMediaCount(String sn);
/**
* Save the basic information of the file to the database.
* @param workspaceId

5
dk-modules/sample/src/main/java/org/dromara/sample/media/service/impl/FileServiceImpl.java

@ -165,6 +165,11 @@ public class FileServiceImpl implements IFileService {
.map(this::entityConvertToDto).collect(Collectors.toList());
}
@Override
public Integer getFilesByJobIdCount(String jobId) {
return mapper.mediaFileCount(jobId);
}
@Override
public PaginationData<MediaFileDTO> getMediaFilesPaginationByJobId(String workspaceId, long page, long pageSize, String JobId,Integer type) {

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

@ -4,6 +4,9 @@ import cn.hutool.core.util.ObjectUtil;
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.redis.config.RedisConst;
import org.dromara.common.redis.utils.RedisOpsUtils;
import org.dromara.common.redis.utils.RedisUtils;
import org.dromara.common.sdk.cloudapi.device.OsdDock;
import org.dromara.common.sdk.cloudapi.media.*;
import org.dromara.common.sdk.cloudapi.media.api.AbstractMediaService;
@ -35,10 +38,9 @@ import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
import java.util.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
/**
@ -76,11 +78,37 @@ public class MediaServiceImpl extends AbstractMediaService implements IMediaServ
@Autowired
private IDeviceQrtzFileMapper deviceQrtzFileMapper;
ExecutorService executorService = Executors.newVirtualThreadPerTaskExecutor();
@Override
public Boolean fastUpload(String workspaceId, String fingerprint) {
return fileService.checkExist(workspaceId, fingerprint);
}
@Override
public void delMediaCount(String sn) {
Set<Object> objects = RedisOpsUtils.hashKeys(RedisConst.MEDIA_FILE_PREFIX + sn);
if(!CollectionUtils.isEmpty(objects)){
executorService.submit(() -> {
try {
objects.forEach(jobKey->{
MediaFileCountDTO mediaFileCountDTO = (MediaFileCountDTO) RedisOpsUtils.hashGet(RedisConst.MEDIA_FILE_PREFIX+sn, jobKey.toString());
Integer filesByJobIdCount = fileService.getFilesByJobIdCount(mediaFileCountDTO.getJobId());
if(filesByJobIdCount >= mediaFileCountDTO.getMediaCount()){
aiCompareQueueService.addWaylineJobToQueue(mediaFileCountDTO.getJobId());
}
RedisOpsUtils.hashDel(RedisConst.MEDIA_FILE_PREFIX+sn, new String[]{jobKey.toString()});;
});
} catch (Exception e) {
e.printStackTrace();
}
});
}
}
@Override
public Integer saveMediaFile(String workspaceId, MediaUploadCallbackRequest file,Integer proId) {
return fileService.saveFile(workspaceId, file,null,proId);

14
dk-modules/sample/src/main/resources/mapper/FileMapper.xml

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.dromara.sample.media.mapper.IFileMapper">
<select id="mediaFileCount" resultType="java.lang.Integer">
SELECT
count(1)
FROM media_file mf
where mf.job_id = #{jobId}
</select>
</mapper>
Loading…
Cancel
Save