package com.ard.web.controller.sample; import com.ard.common.core.domain.entity.SysUser; import com.ard.common.utils.SecurityUtils; import com.ard.sample.common.model.ResponseResult; import com.ard.sample.component.mqtt.model.ChannelName; import com.ard.sample.component.websocket.handler.LiveStreamHandler; import com.ard.sample.manage.model.dto.CapacityDeviceDTO; import com.ard.sample.manage.model.dto.LiveTypeDTO; import com.ard.sample.manage.model.param.RemoteDebugParam; import com.ard.sample.manage.model.receiver.LiveCapacityReceiver; import com.ard.sample.manage.model.receiver.LiveStatusTwoReceiver; import com.ard.sample.manage.service.IDeviceService; import com.ard.sample.manage.service.ILiveStreamService; import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.integration.annotation.ServiceActivator; import org.springframework.messaging.MessageHeaders; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.List; /** * @author sean.zhou * @version 0.1 * @date 2021/11/19 */ @Api(tags = "直播功能") @RestController @Slf4j @RequestMapping("/dock/live") public class LiveStreamController { @Autowired private ILiveStreamService liveStreamService; @Autowired private LiveStreamHandler _liveStreamHandler; @Autowired private ObjectMapper mapper; /** * Analyze the live streaming capabilities of drones. * This data is necessary if drones are required for live streaming. * * @param liveCapacity the capacity of drone and dock */ @ServiceActivator(inputChannel = ChannelName.INBOUND_STATE_CAPACITY) public void stateCapacity(LiveCapacityReceiver liveCapacity, MessageHeaders headers) { liveStreamService.saveLiveCapacity(liveCapacity, headers.getTimestamp()); } /** * 处理摄像头返回状态 * */ @ServiceActivator(inputChannel = ChannelName.INBOUND_STATE_STATUS) public void LiveStateStatus(LiveStatusTwoReceiver liveReceiver, MessageHeaders headers) { log.info("摄像头返回状态通道INBOUND_STATE_STATUS:{}", liveReceiver); } /** * Get live capability data of all drones in the current user's workspace from the database. * * @param request * @return live capability */ @ApiOperation(value = "获取直播能力数据", notes = "获取当前用户工作空间下所有无人机的直播能力数据") // @PreAuthorize("@ss.hasPermi('dock:live:capacity')") @GetMapping("/capacity") public ResponseResult> getLiveCapacity(HttpServletRequest request) { // Get information about the current user. List liveCapacity = liveStreamService.getLiveCapacity(); return ResponseResult.success(liveCapacity); } @ApiOperation("获取video_id") @PostMapping("/videoid/{sn}") public ResponseResult getVideoId(@PathVariable String sn) { LiveTypeDTO liveTypeDTO = new LiveTypeDTO(); try{ liveTypeDTO = _liveStreamHandler.getLiveParam(sn); } catch (Exception e){ // videoId = e.getMessage(); e.printStackTrace(); } return ResponseResult.success(liveTypeDTO); } /** * Live streaming according to the parameters passed in from the web side. * * @param liveParam Live streaming parameters. * @return */ @ApiOperation(value = "开始直播", notes = "根据前端传入的参数开始直播") // @PreAuthorize("@ss.hasPermi('dock:live:start')") @PostMapping("/streams/start") public ResponseResult liveStart(@RequestBody LiveTypeDTO liveParam) { return liveStreamService.liveStart(liveParam); } /** * Stop live streaming according to the parameters passed in from the web side. * * @param liveParam Live streaming parameters. * @return */ @ApiOperation(value = "停止直播", notes = "根据前端传入的参数停止直播") // @PreAuthorize("@ss.hasPermi('dock:live:stop')") @PostMapping("/streams/stop") public ResponseResult liveStop(@RequestBody LiveTypeDTO liveParam) { return liveStreamService.liveStop(liveParam.getVideoId()); } /** * Set the quality of the live streaming according to the parameters passed in from the web side. * * @param liveParam Live streaming parameters. * @return */ @ApiOperation(value = "设置直播质量", notes = "根据前端传入的参数设置直播质量") // @PreAuthorize("@ss.hasPermi('dock:live:quality')") @PostMapping("/quality/switch") public ResponseResult liveSetQuality(@RequestBody LiveTypeDTO liveParam) { return liveStreamService.liveSetQuality(liveParam); } @ApiOperation(value = "切换镜头", notes = "根据前端传入的参数切换镜头") // @PreAuthorize("@ss.hasPermi('dock:live:lens')") @PostMapping("/lens/switch") public ResponseResult liveLensChange(@RequestBody LiveTypeDTO liveParam) { return liveStreamService.liveLensChange(liveParam); } @ApiOperation(value = "机场直播相机切换", notes = "根据前端传入的参数切换相机") // @PreAuthorize("@ss.hasPermi('dock:live:camera')") @PostMapping("/camera/switch") public ResponseResult liveCameraChange(@RequestBody LiveTypeDTO liveParam) { return liveStreamService.liveCameraChange(liveParam); } }