package com.dji.sample.manage.controller; import com.dji.sample.common.model.CustomClaim; import com.dji.sample.common.model.ResponseResult; import com.dji.sample.component.mqtt.model.ChannelName; import com.dji.sample.manage.model.dto.CapacityDeviceDTO; import com.dji.sample.manage.model.dto.LiveTypeDTO; import com.dji.sample.manage.model.receiver.LiveCapacityReceiver; import com.dji.sample.manage.service.ILiveStreamService; import com.fasterxml.jackson.databind.ObjectMapper; 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.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.util.List; import static com.dji.sample.component.AuthInterceptor.TOKEN_CLAIM; /** * @author sean.zhou * @version 0.1 * @date 2021/11/19 */ @RestController @Slf4j @RequestMapping("${url.manage.prefix}${url.manage.version}/live") public class LiveStreamController { @Autowired private ILiveStreamService liveStreamService; @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()); } /** * Get live capability data of all drones in the current user's workspace from the database. * 从数据库中获取当前工作区中所有无人机的实时性能数据。 * @param workspaceId * @return live capability */ @GetMapping("/capacity/{workspace_id}") public ResponseResult> getLiveCapacity(@PathVariable("workspace_id") String workspaceId,String sn) { // Get information about the current user. 获取当前登录用户的信息 // CustomClaim customClaim = (CustomClaim)request.getAttribute(TOKEN_CLAIM); List liveCapacity = liveStreamService.getLiveCapacity(workspaceId,sn); return ResponseResult.success(liveCapacity); } /** * Live streaming according to the parameters passed in from the web side. * 根据从web端传入的参数进行直播。 * @param liveParam Live streaming parameters. * @return */ @PostMapping("/streams/start") public ResponseResult liveStart(@RequestBody LiveTypeDTO liveParam) { return liveStreamService.liveStart(liveParam); } @PostMapping("/streams/address") public ResponseResult liveAddress(@RequestParam String deviceSn,@RequestParam String deviceId) { return liveStreamService.liveAddress(deviceSn,deviceId); } /** * Stop live streaming according to the parameters passed in from the web side. * 根据从web端传入的参数停止直播。 * @param liveParam Live streaming parameters. * @return */ @PostMapping("/streams/stop") public ResponseResult liveStop(@RequestBody LiveTypeDTO liveParam) { return liveStreamService.liveStop(liveParam.getVideoId()); } /** * 根据从web端传入的参数设置直播的质量。 * @param liveParam 直播参数 * @return */ @PostMapping("/streams/update") public ResponseResult liveSetQuality(@RequestBody LiveTypeDTO liveParam) { return liveStreamService.liveSetQuality(liveParam); } @PostMapping("/streams/switch") public ResponseResult liveLensChange(@RequestBody LiveTypeDTO liveParam) { return liveStreamService.liveLensChange(liveParam); } }