package com.ard.vtdu.controller; import com.ard.common.core.controller.BaseController; import com.ard.common.core.domain.AjaxResult; import com.ard.common.core.page.TableDataInfo; import com.ard.vtdu.domain.ArdVtdu; import com.ard.vtdu.domain.Conf; import com.ard.vtdu.service.IMediaService; import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Arrays; /** * @Description: mediaMTX流媒体业务 * @ClassName: controller * @Author: 刘苏义 * @Date: 2023年07月13日9:26 * @Version: 1.0 **/ @RestController @Api(tags = "mediaMTX接口") @RequestMapping("/mediamtx/media") public class MediaController extends BaseController { @Resource private IMediaService mediaService; /** * 增加通道 */ @PostMapping() @ApiOperation("增加通道") @PreAuthorize("@ss.hasPermi('mediamtx:media:add')") @ApiOperationSupport(includeParameters = {"ardVtdu.name", "ardVtdu.rtspSource", "ardVtdu.mode", "ardVtdu.isCode", "ardVtdu.isRecord"}, order = 1) public AjaxResult addPath(@RequestBody ArdVtdu ardVtdu) { if (StringUtils.isEmpty(ardVtdu.getName())) { return AjaxResult.error("通道名称不能为空"); } if (StringUtils.isEmpty(ardVtdu.getRtspSource())) { return AjaxResult.error("rtsp地址不能为空"); } return AjaxResult.success(mediaService.addPath(ardVtdu)); } /** * 修改通道 */ @ApiOperation("修改通道") @ApiOperationSupport(includeParameters = {"ardVtdu.name", "ardVtdu.rtspSource", "ardVtdu.mode", "ardVtdu.isCode", "ardVtdu.isRecord"}, order = 2) @PreAuthorize("@ss.hasPermi('mediamtx:media:edit')") @PutMapping public AjaxResult edit(@RequestBody ArdVtdu ardVtdu) { return AjaxResult.success(mediaService.editPath(ardVtdu)); } /** * 移除通道 */ @DeleteMapping("/path/{names}") @PreAuthorize("@ss.hasPermi('mediamtx:media:remove')") @ApiOperation("移除通道") @ApiOperationSupport(order = 3) public AjaxResult removePath(@PathVariable String[] names) { mediaService.removePath(names); return AjaxResult.success(); } /** * 移除Webrtc拉流 */ @ApiOperation("移除Webrtc拉流") @ApiOperationSupport(order = 4) @DeleteMapping("/webrtc/{sessionIds}") public AjaxResult removeWebrtcPullStreamSession(@PathVariable String[] sessionIds) { Arrays.stream(sessionIds).forEach(sessionId -> mediaService.kickWebrtcSession(sessionId)); return AjaxResult.success(); } /** * 移除Rtmp拉流 */ @ApiOperation("移除Rtmp拉流") @ApiOperationSupport(order = 4) @DeleteMapping("/rtmp/{sessionIds}") public AjaxResult removeRtmpPullStreamSession(@PathVariable String[] sessionIds) { Arrays.stream(sessionIds).forEach(sessionId -> mediaService.kickRtmpSession(sessionId)); return AjaxResult.success(); } /** * 移除Rtsp拉流 */ @ApiOperation("移除Rtsp拉流") @ApiOperationSupport(order = 4) @DeleteMapping("/rtsp/{sessionIds}") public AjaxResult removeRtspPullStreamSession(@PathVariable String[] sessionIds) { Arrays.stream(sessionIds).forEach(sessionId -> mediaService.kickRtspSession(sessionId)); return AjaxResult.success(); } /** * 获取当前通道列表 */ @GetMapping("/path/list") @ApiOperation("获取当前通道列表") @ApiOperationSupport(order = 5) public TableDataInfo getPaths(Integer pageNum, Integer pageSize) { startPage(); return getDataTable(mediaService.paths(pageNum, pageSize)); } /** * 按ID查询Webrtc拉流详情 */ @GetMapping("/getWebrtcSessionById") @ApiOperation("按ID查询Webrtc拉流详情") public AjaxResult getWebrtcSessionById(String sessionId) { return AjaxResult.success(mediaService.getWebrtcSessionById(sessionId)); } /** * 获取推流列表 */ @PreAuthorize("@ss.hasPermi('mediamtx:media:list')") @GetMapping("/pushList") @ApiOperation("获取推流列表") @ApiOperationSupport(order = 6) public TableDataInfo getPushStreamList(Integer pageNum, Integer pageSize) { TableDataInfo tableDataInfo = mediaService.getPushStreamList(pageNum, pageSize); return tableDataInfo; } /** * 获取WebRtc拉流列表 */ @GetMapping("/getPullWebrtcStreamList") @ApiOperation("获取WebRtc拉流列表") @ApiOperationSupport(order = 7) public TableDataInfo getPullWebrtcStreamList(Integer pageNum, Integer pageSize) { return mediaService.getPullWebrtcStreamList(pageNum, pageSize); } /** * 获取rtsp拉流列表 */ @GetMapping("/getPullRtspStreamList") @ApiOperation("获取rtsp拉流列表") @ApiOperationSupport(order = 8) public TableDataInfo getPullRtspStreamList(Integer pageNum, Integer pageSize) { return mediaService.getPullRtspStreamList(pageNum, pageSize); } /** * 获取rtmp拉流列表 */ @GetMapping("/getPullRtmpStreamList") @ApiOperation("获取rtmp拉流列表") @ApiOperationSupport(order = 9) public TableDataInfo getPullRtmpStreamList(Integer pageNum, Integer pageSize) { return mediaService.getPullRtmpStreamList(pageNum, pageSize); } //配置录像 @PostMapping("/setRecord") @ApiOperation("配置录像") @ApiOperationSupport(includeParameters = {"conf.name", "conf.sourceOnDemand", "conf.record"}) public AjaxResult setRecord(@RequestBody Conf conf) { return AjaxResult.success(mediaService.setRecord(conf)); } //获取全部录像分段列表 @GetMapping("/getRecordingList") @ApiOperation("获取全部录像分段列表") public AjaxResult getRecordingList(Integer pageNum, Integer pageSize) { return AjaxResult.success(mediaService.recordingList(pageNum, pageSize)); } //通过路径名获取录像分段列表 @GetMapping("/getRecordingListByName/{name}") @ApiOperation("通过路径名获取录像分段列表") public AjaxResult getRecordingListByName(@PathVariable String name) { return AjaxResult.success(mediaService.recordingListByName(name)); } //删除录像 @DeleteMapping("/deleteRecording") @ApiOperation("删除录像") public AjaxResult deleteRecording(String name, String start) { return AjaxResult.success(mediaService.deleteSegment(name, start)); } //获取通道配置 @GetMapping("/{name}") @ApiOperation("获取通道配置") public AjaxResult getPathConfig(@PathVariable String name) { return AjaxResult.success(mediaService.getPathConfig(name)); } //获取所有通道配置列表 @GetMapping("/getRecordConfList") @ApiOperation("获取所有通道配置列表") public AjaxResult getRecordConfList(Integer pageNum, Integer pageSize) { return AjaxResult.success(mediaService.getPathConfigs(pageNum, pageSize)); } }