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 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 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); } }