zhangnaisong
2024-07-19 55bfebcee6b804faaa65d41105d4333a4117aab5
ard-work/src/main/java/com/ruoyi/media/controller/MediaController.java
@@ -1,60 +1,193 @@
package com.ruoyi.media.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.media.domain.MediaInfo;
import com.ruoyi.media.service.IMediaService;
import com.ruoyi.media.service.impl.MediaService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
/**
 * @Description:
 * @ClassName: controller
 * @Author: 刘苏义
 * @Date: 2023年07月13日9:26
 * @Version: 1.0
 **/
@RestController
@Api(tags = "流媒体接口")
@Anonymous
public class MediaController {
    @Resource
    private IMediaService mediaService;
    @PostMapping("/add")
    @ApiOperation("增加转码")
    public AjaxResult addPath(@RequestBody MediaInfo mediaInfo) {
        String rtsp = mediaService.addPath(mediaInfo.getCameraId(), mediaInfo.getRtspPath());
        return AjaxResult.success(rtsp);
    }
    @PostMapping("/remove")
    @ApiOperation("移除转码")
    @ApiOperationSupport(includeParameters={"mediaInfo.cameraId"})
    public AjaxResult removePath(@RequestBody MediaInfo mediaInfo) {
        mediaService.removePath(mediaInfo.getCameraId());
        return AjaxResult.success();
    }
    @GetMapping("/getPaths")
    @ApiOperation("获取当前转码列表")
    public AjaxResult getPaths() {
        return AjaxResult.success(mediaService.paths());
    }
    @GetMapping("/getRtspSessions")
    @ApiOperation("获取rtsp会话列表")
    public AjaxResult getRtspSessions() {
        return AjaxResult.success(mediaService.rtspsessions());
    }
    @GetMapping("/getRtspConns")
    @ApiOperation("获取rtsp连接列表")
    public AjaxResult getRtspConns() {
        return AjaxResult.success(mediaService.rtspconns());
    }
}
package com.ruoyi.media.controller;
import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
import com.ruoyi.common.annotation.Anonymous;
import com.ruoyi.common.constant.HttpStatus;
import com.ruoyi.common.core.controller.BaseController;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.BaseEntity;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.utils.StringUtils;
import com.ruoyi.common.utils.uuid.IdUtils;
import com.ruoyi.media.domain.*;
import com.ruoyi.media.service.IMediaService;
import com.ruoyi.media.service.IVtduService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @Description: 流媒体业务
 * @ClassName: controller
 * @Author: 刘苏义
 * @Date: 2023年07月13日9:26
 * @Version: 1.0
 **/
@RestController
@Api(tags = "流媒体接口")
@RequestMapping("/media/stream")
@Anonymous
public class MediaController extends BaseController {
    @Resource
    private IMediaService mediaService;
    @Resource
    private IVtduService vtduService;
    /**
     * 增加通道
     */
    @PostMapping()
    @ApiOperation("增加通道")
    @PreAuthorize("@ss.hasPermi('media:stream:add')")
    @ApiOperationSupport(includeParameters = {"streamInfo.name", "streamInfo.rtspSource", "streamInfo.mode", "streamInfo.isCode"}, order = 1)
    public AjaxResult addPath(@RequestBody StreamInfo streamInfo) {
        if (StringUtils.isEmpty(streamInfo.getName())) {
            return AjaxResult.error("通道名称不能为空");
        }
        if (StringUtils.isEmpty(streamInfo.getRtspSource())) {
            return AjaxResult.error("rtsp地址不能为空");
        }
        Map<String, String> map = mediaService.addPath(streamInfo.getName(), streamInfo.getRtspSource(), streamInfo.getMode(), streamInfo.getIsCode());
        map.get("rtspUrl");
        Vtdu vtdu = new Vtdu();
        vtdu.setName(streamInfo.getName());
        vtdu.setRtspSource(streamInfo.getRtspSource());
        vtdu.setIsCode(streamInfo.getIsCode());
        vtdu.setMode(streamInfo.getMode());
        vtdu.setRtspUrl(map.get("rtspUrl"));
        vtdu.setRtmpUrl(map.get("rtmpUrl"));
        vtdu.setWebrtcUrl(map.get("webrtcUrl"));
        vtduService.insertVtdu(vtdu);
        return AjaxResult.success(map);
    }
    /**
     * 修改通道
     */
    @ApiOperation("修改通道")
    @ApiOperationSupport(includeParameters = {"streamInfo.name", "streamInfo.rtspSource", "streamInfo.mode", "streamInfo.isCode"}, order = 2)
    @PreAuthorize("@ss.hasPermi('media:stream:edit')")
    @PutMapping
    public AjaxResult edit(@RequestBody StreamInfo streamInfo) {
        Map<String, String> map = mediaService.editPath(streamInfo.getName(), streamInfo.getRtspSource(), streamInfo.getMode(), streamInfo.getIsCode());
        Vtdu vtdu = new Vtdu();
        vtdu.setName(streamInfo.getName());
        vtdu.setRtspSource(streamInfo.getRtspSource());
        vtdu.setIsCode(streamInfo.getIsCode());
        vtdu.setMode(streamInfo.getMode());
        vtdu.setRtspUrl(map.get("rtspUrl"));
        vtdu.setRtmpUrl(map.get("rtmpUrl"));
        vtdu.setWebrtcUrl(map.get("webrtcUrl"));
        vtduService.updateVtdu(vtdu);
        //vtduService.deleteVtduByName(vtdu.getName());
        //vtduService.insertVtdu(vtdu);
        return AjaxResult.success(map);
    }
    /**
     * 移除通道
     */
    @DeleteMapping("/path/{names}")
    @PreAuthorize("@ss.hasPermi('media:stream:remove')")
    @ApiOperation("移除通道")
    @ApiOperationSupport(order = 3)
    public AjaxResult removePath(@PathVariable String[] names) {
        mediaService.removePath(names);
        vtduService.deleteVtduByNames(names);
        return AjaxResult.success();
    }
    /**
     * 移除webrtc拉流
     */
    @ApiOperation("移除webrtc拉流")
    @ApiOperationSupport(order = 4)
    @PreAuthorize("@ss.hasPermi('media:stream:remove')")
    @DeleteMapping("/{sessionId}")
    public AjaxResult removeWebrtcPullStreamSession(@PathVariable String sessionId) {
        return AjaxResult.success(mediaService.kickWebrtcSession(sessionId));
    }
    /**
     * 获取通道详细信息
     */
    @ApiOperation("获取通道详细信息")
    @ApiOperationSupport(order = 4)
    @GetMapping(value = "/{name}")
    public AjaxResult getInfo(@PathVariable("name") String name) {
        return success(mediaService.getPathInfo(name));
    }
    /**
     * 获取当前通道列表
     */
    @GetMapping("/path/list")
    @ApiOperation("获取当前通道列表")
    @ApiOperationSupport(order = 5)
    public TableDataInfo getPaths(Integer pageNum, Integer pageSize) {
        startPage();
        return getDataTable(mediaService.paths(pageNum, pageSize));
    }
    /**
     * 按ID查询拉流详情
     */
    @GetMapping("/getWebrtcSessionById")
    @ApiOperation("按ID查询webrtc拉流详情")
    public AjaxResult getWebrtcSessionById(String sessionId) {
        return AjaxResult.success(mediaService.getWebrtcSessionById(sessionId));
    }
    /**
     * 获取推流列表
     */
    @PreAuthorize("@ss.hasPermi('media:stream:list')")
    @GetMapping("/pushList")
    @ApiOperation("获取推流列表")
    @ApiOperationSupport(order = 6)
    public TableDataInfo getPushStreamList(Integer pageNum, Integer pageSize) {
        TableDataInfo tableDataInfo = mediaService.getPushStreamList(pageNum, pageSize);
        return tableDataInfo;
    }
    /**
     * 获取WebRtc拉流列表
     */
    @PreAuthorize("@ss.hasPermi('media:stream:list')")
    @GetMapping("/getPullWebrtcStreamList")
    @ApiOperation("获取WebRtc拉流列表")
    @ApiOperationSupport(order = 7)
    public TableDataInfo getPullWebrtcStreamList(Integer pageNum, Integer pageSize) {
        return mediaService.getPullWebrtcStreamList(pageNum, pageSize);
    }
    /**
     * 获取rtsp拉流列表
     */
    @PreAuthorize("@ss.hasPermi('media:stream:list')")
    @GetMapping("/getPullRtspStreamList")
    @ApiOperation("获取rtsp拉流列表")
    @ApiOperationSupport(order = 8)
    public TableDataInfo getPullRtspStreamList(Integer pageNum, Integer pageSize) {
        return mediaService.getPullRtspStreamList(pageNum, pageSize);
    }
    /**
     * 获取rtmp拉流列表
     */
    @PreAuthorize("@ss.hasPermi('media:stream:list')")
    @GetMapping("/getPullRtmpStreamList")
    @ApiOperation("获取rtmp拉流列表")
    @ApiOperationSupport(order = 9)
    public TableDataInfo getPullRtmpStreamList(Integer pageNum, Integer pageSize) {
        return mediaService.getPullRtmpStreamList(pageNum, pageSize);
    }
}