|
|
@@ -286,39 +286,7 @@ public class PlayServiceImpl implements IPlayService {
|
|
|
// 查询到ssrc不一致且开启了ssrc校验则需要针对处理
|
|
|
if (ssrcInfo.getSsrc().equals(ssrcInResponse)) {
|
|
|
if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE")) {
|
|
|
- String substring = contentString.substring(0, contentString.indexOf("y="));
|
|
|
- try {
|
|
|
- SessionDescription sdp = SdpFactory.getInstance().createSessionDescription(substring);
|
|
|
- int port = -1;
|
|
|
- Vector mediaDescriptions = sdp.getMediaDescriptions(true);
|
|
|
- for (Object description : mediaDescriptions) {
|
|
|
- MediaDescription mediaDescription = (MediaDescription) description;
|
|
|
- Media media = mediaDescription.getMedia();
|
|
|
-
|
|
|
- Vector mediaFormats = media.getMediaFormats(false);
|
|
|
- if (mediaFormats.contains("96")) {
|
|
|
- port = media.getMediaPort();
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- logger.info("[点播-TCP主动连接对方] deviceId: {}, channelId: {}, 连接对方的地址:{}:{}, 收流模式:{}, SSRC: {}, SSRC校验:{}", device.getDeviceId(), channelId, sdp.getConnection().getAddress(), port, device.getStreamMode(), ssrcInfo.getSsrc(), device.isSsrcCheck());
|
|
|
- JSONObject jsonObject = zlmresTfulUtils.connectRtpServer(mediaServerItem, sdp.getConnection().getAddress(), port, ssrcInfo.getStream());
|
|
|
- logger.info("[点播-TCP主动连接对方] 结果: {}", jsonObject);
|
|
|
- } catch (SdpException e) {
|
|
|
- logger.error("[点播-TCP主动连接对方] deviceId: {}, channelId: {}, 解析200OK的SDP信息失败", device.getDeviceId(), channelId, e);
|
|
|
- dynamicTask.stop(timeOutTaskKey);
|
|
|
- mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
|
|
|
- // 释放ssrc
|
|
|
- mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
|
|
|
-
|
|
|
- streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
|
|
|
-
|
|
|
- callback.run(InviteErrorCode.ERROR_FOR_SDP_PARSING_EXCEPTIONS.getCode(),
|
|
|
- InviteErrorCode.ERROR_FOR_SDP_PARSING_EXCEPTIONS.getMsg(), null);
|
|
|
- inviteStreamService.call(InviteSessionType.PLAY, device.getDeviceId(), channelId, null,
|
|
|
- InviteErrorCode.ERROR_FOR_SDP_PARSING_EXCEPTIONS.getCode(),
|
|
|
- InviteErrorCode.ERROR_FOR_SDP_PARSING_EXCEPTIONS.getMsg(), null);
|
|
|
- }
|
|
|
+ tcpActiveHandler(device, channelId, contentString, mediaServerItem, timeOutTaskKey, ssrcInfo, callback);
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
@@ -388,6 +356,9 @@ public class PlayServiceImpl implements IPlayService {
|
|
|
ssrcInfo.setSsrc(ssrcInResponse);
|
|
|
inviteInfo.setSsrcInfo(ssrcInfo);
|
|
|
inviteInfo.setStream(ssrcInfo.getStream());
|
|
|
+ if (device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE")) {
|
|
|
+ tcpActiveHandler(device, channelId, contentString, mediaServerItem, timeOutTaskKey, ssrcInfo, callback);
|
|
|
+ }
|
|
|
}
|
|
|
}else {
|
|
|
logger.info("[点播消息] 收到invite 200, 下级自定义了ssrc, 但是当前模式无需修正");
|
|
|
@@ -430,6 +401,47 @@ public class PlayServiceImpl implements IPlayService {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private void tcpActiveHandler(Device device, String channelId, String contentString,
|
|
|
+ MediaServerItem mediaServerItem,
|
|
|
+ String timeOutTaskKey, SSRCInfo ssrcInfo, ErrorCallback<Object> callback){
|
|
|
+ if (!device.getStreamMode().equalsIgnoreCase("TCP-ACTIVE")) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ String substring = contentString.substring(0, contentString.indexOf("y="));
|
|
|
+ try {
|
|
|
+ SessionDescription sdp = SdpFactory.getInstance().createSessionDescription(substring);
|
|
|
+ int port = -1;
|
|
|
+ Vector mediaDescriptions = sdp.getMediaDescriptions(true);
|
|
|
+ for (Object description : mediaDescriptions) {
|
|
|
+ MediaDescription mediaDescription = (MediaDescription) description;
|
|
|
+ Media media = mediaDescription.getMedia();
|
|
|
+
|
|
|
+ Vector mediaFormats = media.getMediaFormats(false);
|
|
|
+ if (mediaFormats.contains("96")) {
|
|
|
+ port = media.getMediaPort();
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ logger.info("[点播-TCP主动连接对方] deviceId: {}, channelId: {}, 连接对方的地址:{}:{}, 收流模式:{}, SSRC: {}, SSRC校验:{}", device.getDeviceId(), channelId, sdp.getConnection().getAddress(), port, device.getStreamMode(), ssrcInfo.getSsrc(), device.isSsrcCheck());
|
|
|
+ JSONObject jsonObject = zlmresTfulUtils.connectRtpServer(mediaServerItem, sdp.getConnection().getAddress(), port, ssrcInfo.getStream());
|
|
|
+ logger.info("[点播-TCP主动连接对方] 结果: {}", jsonObject);
|
|
|
+ } catch (SdpException e) {
|
|
|
+ logger.error("[点播-TCP主动连接对方] deviceId: {}, channelId: {}, 解析200OK的SDP信息失败", device.getDeviceId(), channelId, e);
|
|
|
+ dynamicTask.stop(timeOutTaskKey);
|
|
|
+ mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
|
|
|
+ // 释放ssrc
|
|
|
+ mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
|
|
|
+
|
|
|
+ streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
|
|
|
+
|
|
|
+ callback.run(InviteErrorCode.ERROR_FOR_SDP_PARSING_EXCEPTIONS.getCode(),
|
|
|
+ InviteErrorCode.ERROR_FOR_SDP_PARSING_EXCEPTIONS.getMsg(), null);
|
|
|
+ inviteStreamService.call(InviteSessionType.PLAY, device.getDeviceId(), channelId, null,
|
|
|
+ InviteErrorCode.ERROR_FOR_SDP_PARSING_EXCEPTIONS.getCode(),
|
|
|
+ InviteErrorCode.ERROR_FOR_SDP_PARSING_EXCEPTIONS.getMsg(), null);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 点播成功时调用截图.
|
|
|
*
|