|
|
@@ -38,6 +38,7 @@ import gov.nist.javax.sdp.fields.TimeField;
|
|
|
import gov.nist.javax.sdp.fields.URIField;
|
|
|
import gov.nist.javax.sip.message.SIPRequest;
|
|
|
import gov.nist.javax.sip.message.SIPResponse;
|
|
|
+import org.apache.commons.lang3.ObjectUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
@@ -404,12 +405,15 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
// * 2 推流中
|
|
|
sendRtpItem.setStatus(1);
|
|
|
redisCatchStorage.updateSendRTPSever(sendRtpItem);
|
|
|
-
|
|
|
+ String sdpIp = mediaServerItemInUSe.getSdpIp();
|
|
|
+ if (!ObjectUtils.isEmpty(platform.getSendStreamIp())) {
|
|
|
+ sdpIp = platform.getSendStreamIp();
|
|
|
+ }
|
|
|
StringBuffer content = new StringBuffer(200);
|
|
|
content.append("v=0\r\n");
|
|
|
- content.append("o=" + channelId + " 0 0 IN IP4 " + mediaServerItemInUSe.getSdpIp() + "\r\n");
|
|
|
+ content.append("o=" + channelId + " 0 0 IN IP4 " + sdpIp + "\r\n");
|
|
|
content.append("s=" + sessionName + "\r\n");
|
|
|
- content.append("c=IN IP4 " + mediaServerItemInUSe.getSdpIp() + "\r\n");
|
|
|
+ content.append("c=IN IP4 " + sdpIp + "\r\n");
|
|
|
if ("Playback".equalsIgnoreCase(sessionName)) {
|
|
|
content.append("t=" + finalStartTime + " " + finalStopTime + "\r\n");
|
|
|
} else {
|
|
|
@@ -575,14 +579,20 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
}
|
|
|
|
|
|
if ("push".equals(gbStream.getStreamType())) {
|
|
|
- if (streamPushItem != null && streamPushItem.isPushIng()) {
|
|
|
- // 推流状态
|
|
|
- pushStream(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
- mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
- } else {
|
|
|
- // 未推流 拉起
|
|
|
- notifyStreamOnline(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
- mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
+ if (streamPushItem != null) {
|
|
|
+ // 从redis查询是否正在接收这个推流
|
|
|
+ OnStreamChangedHookParam pushListItem = redisCatchStorage.getPushListItem(gbStream.getApp(), gbStream.getStream());
|
|
|
+ if (pushListItem != null) {
|
|
|
+ StreamPushItem transform = streamPushService.transform(pushListItem);
|
|
|
+ transform.setSelf(userSetting.getServerId().equals(pushListItem.getSeverId()));
|
|
|
+ // 推流状态
|
|
|
+ pushStream(evt, request, gbStream, transform, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
+ mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
+ }else {
|
|
|
+ // 未推流 拉起
|
|
|
+ notifyStreamOnline(evt, request, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
|
|
|
+ mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
|
|
|
+ }
|
|
|
}
|
|
|
} else if ("proxy".equals(gbStream.getStreamType())) {
|
|
|
if (null != proxyByAppAndStream) {
|
|
|
@@ -901,11 +911,15 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
|
|
|
public SIPResponse sendStreamAck(MediaServerItem mediaServerItem, SIPRequest request, SendRtpItem sendRtpItem, ParentPlatform platform, RequestEvent evt) {
|
|
|
|
|
|
+ String sdpIp = mediaServerItem.getSdpIp();
|
|
|
+ if (!ObjectUtils.isEmpty(platform.getSendStreamIp())) {
|
|
|
+ sdpIp = platform.getSendStreamIp();
|
|
|
+ }
|
|
|
StringBuffer content = new StringBuffer(200);
|
|
|
content.append("v=0\r\n");
|
|
|
- content.append("o=" + sendRtpItem.getChannelId() + " 0 0 IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
|
|
+ content.append("o=" + sendRtpItem.getChannelId() + " 0 0 IN IP4 " + sdpIp + "\r\n");
|
|
|
content.append("s=Play\r\n");
|
|
|
- content.append("c=IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
|
|
+ content.append("c=IN IP4 " + sdpIp + "\r\n");
|
|
|
content.append("t=0 0\r\n");
|
|
|
// 非严格模式端口不统一, 增加兼容性,修改为一个不为0的端口
|
|
|
int localPort = sendRtpItem.getLocalPort();
|