| | |
| | | import com.genersoft.iot.vmp.conf.DynamicTask; |
| | | import com.genersoft.iot.vmp.conf.UserSetting; |
| | | import com.genersoft.iot.vmp.conf.exception.ControllerException; |
| | | import com.genersoft.iot.vmp.conf.security.JwtUtils; |
| | | import com.genersoft.iot.vmp.media.zlm.SendRtpPortManager; |
| | | import com.genersoft.iot.vmp.media.zlm.ZLMServerFactory; |
| | | import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe; |
| | |
| | | import com.genersoft.iot.vmp.vmanager.bean.OtherRtpSendInfo; |
| | | import io.swagger.v3.oas.annotations.Operation; |
| | | import io.swagger.v3.oas.annotations.Parameter; |
| | | import io.swagger.v3.oas.annotations.security.SecurityRequirement; |
| | | import io.swagger.v3.oas.annotations.tags.Tag; |
| | | import okhttp3.OkHttpClient; |
| | | import okhttp3.Request; |
| | |
| | | |
| | | @GetMapping(value = "/receive/open") |
| | | @ResponseBody |
| | | @Operation(summary = "开启收流和获取发流信息") |
| | | @Operation(summary = "开启收流和获取发流信息", security = @SecurityRequirement(name = JwtUtils.HEADER)) |
| | | @Parameter(name = "isSend", description = "是否发送,false时只开启收流, true同时返回推流信息", required = true) |
| | | @Parameter(name = "callId", description = "整个过程的唯一标识,为了与后续接口关联", required = true) |
| | | @Parameter(name = "ssrc", description = "来源流的SSRC,不传则不校验来源ssrc", required = false) |
| | |
| | | } |
| | | } |
| | | String receiveKey = VideoManagerConstants.WVP_OTHER_RECEIVE_RTP_INFO + userSetting.getServerId() + "_" + callId + "_" + stream; |
| | | int localPortForVideo = zlmServerFactory.createRTPServer(mediaServerItem, stream, ssrcInt, null, false, tcpMode); |
| | | int localPortForAudio = zlmServerFactory.createRTPServer(mediaServerItem, stream + "_a" , ssrcInt, null, false, tcpMode); |
| | | int localPortForVideo = zlmServerFactory.createRTPServer(mediaServerItem, stream, ssrcInt, null, false, false, tcpMode); |
| | | int localPortForAudio = zlmServerFactory.createRTPServer(mediaServerItem, stream + "_a" , ssrcInt, null, false, false, tcpMode); |
| | | if (localPortForVideo == 0 || localPortForAudio == 0) { |
| | | throw new ControllerException(ErrorCode.ERROR100.getCode(), "获取端口失败"); |
| | | } |
| | |
| | | |
| | | @GetMapping(value = "/receive/close") |
| | | @ResponseBody |
| | | @Operation(summary = "关闭收流") |
| | | @Operation(summary = "关闭收流", security = @SecurityRequirement(name = JwtUtils.HEADER)) |
| | | @Parameter(name = "stream", description = "流的ID", required = true) |
| | | public void closeRtpServer(String stream) { |
| | | logger.info("[第三方服务对接->关闭收流] stream->{}", stream); |
| | |
| | | |
| | | @GetMapping(value = "/send/start") |
| | | @ResponseBody |
| | | @Operation(summary = "发送流") |
| | | @Operation(summary = "发送流", security = @SecurityRequirement(name = JwtUtils.HEADER)) |
| | | @Parameter(name = "ssrc", description = "发送流的SSRC", required = true) |
| | | @Parameter(name = "dstIpForAudio", description = "目标音频收流IP", required = false) |
| | | @Parameter(name = "dstIpForVideo", description = "目标视频收流IP", required = false) |
| | |
| | | |
| | | @GetMapping(value = "/send/stop") |
| | | @ResponseBody |
| | | @Operation(summary = "关闭发送流") |
| | | @Operation(summary = "关闭发送流", security = @SecurityRequirement(name = JwtUtils.HEADER)) |
| | | @Parameter(name = "callId", description = "整个过程的唯一标识,不传则使用随机端口发流", required = true) |
| | | public void closeSendRTP(String callId) { |
| | | logger.info("[第三方服务对接->关闭发送流] callId->{}", callId); |