|
|
@ -7,14 +7,10 @@ import javax.sip.SipException; |
|
|
|
import javax.sip.SipFactory; |
|
|
|
import javax.sip.address.Address; |
|
|
|
import javax.sip.address.SipURI; |
|
|
|
import javax.sip.header.ContentTypeHeader; |
|
|
|
import javax.sip.header.FromHeader; |
|
|
|
import javax.sip.header.HeaderFactory; |
|
|
|
import javax.sip.header.SubjectHeader; |
|
|
|
import javax.sip.header.*; |
|
|
|
import javax.sip.message.Request; |
|
|
|
import javax.sip.message.Response; |
|
|
|
|
|
|
|
import com.alibaba.fastjson.JSONObject; |
|
|
|
import com.genersoft.iot.vmp.conf.MediaServerConfig; |
|
|
|
import com.genersoft.iot.vmp.gb28181.bean.Device; |
|
|
|
import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; |
|
|
@ -27,17 +23,12 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
|
|
|
import com.genersoft.iot.vmp.storager.IVideoManagerStorager; |
|
|
|
import com.genersoft.iot.vmp.vmanager.play.bean.PlayResult; |
|
|
|
import com.genersoft.iot.vmp.vmanager.service.IPlayService; |
|
|
|
import gov.nist.javax.sdp.fields.SDPFormat; |
|
|
|
import gov.nist.javax.sip.address.AddressImpl; |
|
|
|
import gov.nist.javax.sip.address.SipUri; |
|
|
|
import org.slf4j.Logger; |
|
|
|
import org.slf4j.LoggerFactory; |
|
|
|
import org.springframework.beans.factory.annotation.Autowired; |
|
|
|
|
|
|
|
import java.io.IOException; |
|
|
|
import java.text.ParseException; |
|
|
|
import java.util.List; |
|
|
|
import java.util.UUID; |
|
|
|
import java.util.Vector; |
|
|
|
|
|
|
|
/** |
|
|
@ -45,6 +36,7 @@ import java.util.Vector; |
|
|
|
* @author: panll |
|
|
|
* @date: 2021年1月14日 |
|
|
|
*/ |
|
|
|
@SuppressWarnings("rawtypes") |
|
|
|
public class InviteRequestProcessor extends SIPRequestAbstractProcessor { |
|
|
|
|
|
|
|
private final static Logger logger = LoggerFactory.getLogger(MessageRequestProcessor.class); |
|
|
@ -122,8 +114,10 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor { |
|
|
|
|
|
|
|
// jainSip不支持y=字段, 移除移除以解析。
|
|
|
|
int ssrcIndex = contentString.indexOf("y="); |
|
|
|
String ssrc = contentString.substring(ssrcIndex + 2, contentString.length()) |
|
|
|
.replace("\r\n", "").replace("\n", ""); |
|
|
|
String ssrc = contentString.substring(ssrcIndex + 2, ssrcIndex + 12); |
|
|
|
//ssrc规定长度为10字节,不取余下长度以避免后续还有“f=”字段
|
|
|
|
// String ssrc = contentString.substring(ssrcIndex + 2, contentString.length())
|
|
|
|
// .replace("\r\n", "").replace("\n", "");
|
|
|
|
|
|
|
|
String substring = contentString.substring(0, contentString.indexOf("y=")); |
|
|
|
SessionDescription sdp = SdpFactory.getInstance().createSessionDescription(substring); |
|
|
@ -131,9 +125,9 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor { |
|
|
|
// 获取支持的格式
|
|
|
|
Vector mediaDescriptions = sdp.getMediaDescriptions(true); |
|
|
|
// 查看是否支持PS 负载96
|
|
|
|
String ip = null; |
|
|
|
//String ip = null;
|
|
|
|
int port = -1; |
|
|
|
boolean recvonly = false; |
|
|
|
//boolean recvonly = false;
|
|
|
|
boolean mediaTransmissionTCP = false; |
|
|
|
Boolean tcpActive = null; |
|
|
|
for (int i = 0; i < mediaDescriptions.size(); i++) { |
|
|
@ -143,7 +137,7 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor { |
|
|
|
Vector mediaFormats = media.getMediaFormats(false); |
|
|
|
if (mediaFormats.contains("96")) { |
|
|
|
port = media.getMediaPort(); |
|
|
|
String mediaType = media.getMediaType(); |
|
|
|
//String mediaType = media.getMediaType();
|
|
|
|
String protocol = media.getProtocol(); |
|
|
|
|
|
|
|
// 区分TCP发流还是udp, 当前默认udp
|
|
|
@ -169,7 +163,7 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor { |
|
|
|
} |
|
|
|
String username = sdp.getOrigin().getUsername(); |
|
|
|
String addressStr = sdp.getOrigin().getAddress(); |
|
|
|
String sessionName = sdp.getSessionName().getValue(); |
|
|
|
//String sessionName = sdp.getSessionName().getValue();
|
|
|
|
logger.info("[上级点播]用户:{}, 地址:{}:{}, ssrc:{}", username, addressStr, port, ssrc); |
|
|
|
|
|
|
|
Device device = storager.queryVideoDeviceByPlatformIdAndChannelId(platformId, channelId); |
|
|
@ -178,7 +172,7 @@ public class InviteRequestProcessor extends SIPRequestAbstractProcessor { |
|
|
|
responseAck(evt, Response.SERVER_INTERNAL_ERROR); |
|
|
|
return; |
|
|
|
} |
|
|
|
SendRtpItem sendRtpItem = zlmrtpServerFactory.createSendRtpItem(ip, port, platformId, ssrc, channelId, |
|
|
|
SendRtpItem sendRtpItem = zlmrtpServerFactory.createSendRtpItem(addressStr, port, ssrc, platformId, device.getDeviceId(), channelId, |
|
|
|
mediaTransmissionTCP); |
|
|
|
if (tcpActive != null) { |
|
|
|
sendRtpItem.setTcpActive(tcpActive); |
|
|
|