|
|
@@ -35,8 +35,10 @@ import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
|
|
|
import com.genersoft.iot.vmp.utils.DateUtil;
|
|
|
import gov.nist.javax.sdp.TimeDescriptionImpl;
|
|
|
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.StringUtils;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.InitializingBean;
|
|
|
@@ -147,8 +149,21 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
public void process(RequestEvent evt) {
|
|
|
// Invite Request消息实现,此消息一般为级联消息,上级给下级发送请求视频指令
|
|
|
try {
|
|
|
- SIPRequest request = (SIPRequest) evt.getRequest();
|
|
|
- String channelId = SipUtils.getChannelIdFromRequest(request);
|
|
|
+ SIPRequest request = (SIPRequest)evt.getRequest();
|
|
|
+ String channelIdFromSub = SipUtils.getChannelIdFromRequest(request);
|
|
|
+
|
|
|
+ // 解析sdp消息, 使用jainsip 自带的sdp解析方式
|
|
|
+ String contentString = new String(request.getRawContent());
|
|
|
+ Gb28181Sdp gb28181Sdp = SipUtils.parseSDP(contentString);
|
|
|
+ SessionDescription sdp = gb28181Sdp.getBaseSdb();
|
|
|
+ String sessionName = sdp.getSessionName().getValue();
|
|
|
+ String channelIdFromSdp = null;
|
|
|
+ if(StringUtils.equalsIgnoreCase("Playback", sessionName)){
|
|
|
+ URIField uriField = (URIField)sdp.getURI();
|
|
|
+ channelIdFromSdp = uriField.getURI().split(":")[0];
|
|
|
+ }
|
|
|
+ final String channelId = StringUtils.isNotBlank(channelIdFromSdp) ? channelIdFromSdp : channelIdFromSub;
|
|
|
+
|
|
|
String requesterId = SipUtils.getUserIdFromFromHeader(request);
|
|
|
CallIdHeader callIdHeader = (CallIdHeader) request.getHeader(CallIdHeader.NAME);
|
|
|
if (requesterId == null || channelId == null) {
|
|
|
@@ -257,12 +272,6 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
|
|
}
|
|
|
return;
|
|
|
}
|
|
|
- // 解析sdp消息, 使用jainsip 自带的sdp解析方式
|
|
|
- String contentString = new String(request.getRawContent());
|
|
|
-
|
|
|
- Gb28181Sdp gb28181Sdp = SipUtils.parseSDP(contentString);
|
|
|
- SessionDescription sdp = gb28181Sdp.getBaseSdb();
|
|
|
- String sessionName = sdp.getSessionName().getValue();
|
|
|
|
|
|
Long startTime = null;
|
|
|
Long stopTime = null;
|