Commit 6dc4b8a79a07857f415e6da3955f8c14eafca38a

Authored by 648540858
1 parent 0a951e87

修复点播与录像回放sdp信息sdp-ip的取值错误,修复回放信令错误

src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
@@ -99,13 +99,13 @@ public class SIPRequestHeaderProvider { @@ -99,13 +99,13 @@ public class SIPRequestHeaderProvider {
99 return request; 99 return request;
100 } 100 }
101 101
102 - public Request createPlaybackInviteRequest(Device device, String channelId, String content, String viaTag, String fromTag, String toTag, CallIdHeader callIdHeader) throws ParseException, InvalidArgumentException, PeerUnavailableException { 102 + public Request createPlaybackInviteRequest(Device device, String channelId, String content, String viaTag, String fromTag, String toTag, CallIdHeader callIdHeader, String ssrc) throws ParseException, InvalidArgumentException, PeerUnavailableException {
103 Request request = null; 103 Request request = null;
104 //请求行 104 //请求行
105 - SipURI requestLine = sipFactory.createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress()); 105 + SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
106 // via 106 // via
107 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); 107 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
108 - ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(device.getIp(), device.getPort(), device.getTransport(), viaTag); 108 + ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getIp(), sipConfig.getPort(), device.getTransport(), viaTag);
109 viaHeader.setRPort(); 109 viaHeader.setRPort();
110 viaHeaders.add(viaHeader); 110 viaHeaders.add(viaHeader);
111 //from 111 //from
@@ -113,7 +113,7 @@ public class SIPRequestHeaderProvider { @@ -113,7 +113,7 @@ public class SIPRequestHeaderProvider {
113 Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI); 113 Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
114 FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //必须要有标记,否则无法创建会话,无法回应ack 114 FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //必须要有标记,否则无法创建会话,无法回应ack
115 //to 115 //to
116 - SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,sipConfig.getDomain()); 116 + SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId, sipConfig.getDomain());
117 Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI); 117 Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
118 ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null); 118 ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
119 119
@@ -127,7 +127,10 @@ public class SIPRequestHeaderProvider { @@ -127,7 +127,10 @@ public class SIPRequestHeaderProvider {
127 Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort())); 127 Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
128 // Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort())); 128 // Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
129 request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress)); 129 request.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
130 - 130 + // Subject
  131 + SubjectHeader subjectHeader = sipFactory.createHeaderFactory().createSubjectHeader(String.format("%s:%s,%s:%s", channelId, ssrc, sipConfig.getId(), 0));
  132 + request.addHeader(subjectHeader);
  133 +
131 ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP"); 134 ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
132 request.setContent(content, contentTypeHeader); 135 request.setContent(content, contentTypeHeader);
133 return request; 136 return request;
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -468,7 +468,7 @@ public class SIPCommander implements ISIPCommander { @@ -468,7 +468,7 @@ public class SIPCommander implements ISIPCommander {
468 468
469 StringBuffer content = new StringBuffer(200); 469 StringBuffer content = new StringBuffer(200);
470 content.append("v=0\r\n"); 470 content.append("v=0\r\n");
471 - content.append("o="+sipConfig.getId()+" 0 0 IN IP4 "+sipConfig.getIp()+"\r\n"); 471 + content.append("o="+sipConfig.getId()+" 0 0 IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
472 content.append("s=Playback\r\n"); 472 content.append("s=Playback\r\n");
473 content.append("u="+channelId+":0\r\n"); 473 content.append("u="+channelId+":0\r\n");
474 content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n"); 474 content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
@@ -532,7 +532,7 @@ public class SIPCommander implements ISIPCommander { @@ -532,7 +532,7 @@ public class SIPCommander implements ISIPCommander {
532 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId() 532 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
533 : udpSipProvider.getNewCallId(); 533 : udpSipProvider.getNewCallId();
534 534
535 - Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader); 535 + Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader, ssrcInfo.getSsrc());
536 536
537 transmitRequest(device, request, errorEvent, okEvent -> { 537 transmitRequest(device, request, errorEvent, okEvent -> {
538 Dialog dialog = okEvent.getClientTransaction().getDialog(); 538 Dialog dialog = okEvent.getClientTransaction().getDialog();
@@ -575,7 +575,7 @@ public class SIPCommander implements ISIPCommander { @@ -575,7 +575,7 @@ public class SIPCommander implements ISIPCommander {
575 575
576 StringBuffer content = new StringBuffer(200); 576 StringBuffer content = new StringBuffer(200);
577 content.append("v=0\r\n"); 577 content.append("v=0\r\n");
578 - content.append("o="+sipConfig.getId()+" 0 0 IN IP4 "+sipConfig.getIp()+"\r\n"); 578 + content.append("o="+sipConfig.getId()+" 0 0 IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
579 content.append("s=Download\r\n"); 579 content.append("s=Download\r\n");
580 content.append("u="+channelId+":0\r\n"); 580 content.append("u="+channelId+":0\r\n");
581 content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n"); 581 content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
@@ -640,7 +640,7 @@ public class SIPCommander implements ISIPCommander { @@ -640,7 +640,7 @@ public class SIPCommander implements ISIPCommander {
640 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId() 640 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
641 : udpSipProvider.getNewCallId(); 641 : udpSipProvider.getNewCallId();
642 642
643 - Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader); 643 + Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, "fromplybck" + tm, null, callIdHeader, ssrcInfo.getSsrc());
644 644
645 ClientTransaction transaction = transmitRequest(device, request, errorEvent); 645 ClientTransaction transaction = transmitRequest(device, request, errorEvent);
646 streamSession.put(device.getDeviceId(), channelId, ssrcInfo.getSsrc(), ssrcInfo.getStreamId(), mediaServerItem.getId(), transaction); 646 streamSession.put(device.getDeviceId(), channelId, ssrcInfo.getSsrc(), ssrcInfo.getStreamId(), mediaServerItem.getId(), transaction);
src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java
@@ -36,6 +36,8 @@ public interface IMediaServerService { @@ -36,6 +36,8 @@ public interface IMediaServerService {
36 36
37 SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId); 37 SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId);
38 38
  39 + SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, boolean isPlayback);
  40 +
39 void closeRTPServer(Device device, String channelId); 41 void closeRTPServer(Device device, String channelId);
40 42
41 void clearRTPServer(MediaServerItem mediaServerItem); 43 void clearRTPServer(MediaServerItem mediaServerItem);
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
@@ -96,6 +96,11 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR @@ -96,6 +96,11 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR
96 96
97 @Override 97 @Override
98 public SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId) { 98 public SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId) {
  99 + return openRTPServer(mediaServerItem, streamId, false);
  100 + }
  101 +
  102 + @Override
  103 + public SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, boolean isPlayback) {
99 if (mediaServerItem == null || mediaServerItem.getId() == null) { 104 if (mediaServerItem == null || mediaServerItem.getId() == null) {
100 return null; 105 return null;
101 } 106 }
@@ -107,7 +112,13 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR @@ -107,7 +112,13 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR
107 logger.info("media server [ {} ] ssrcConfig is null", mediaServerItem.getId()); 112 logger.info("media server [ {} ] ssrcConfig is null", mediaServerItem.getId());
108 return null; 113 return null;
109 }else { 114 }else {
110 - String ssrc = ssrcConfig.getPlaySsrc(); 115 + String ssrc = null;
  116 + if (isPlayback) {
  117 + ssrc = ssrcConfig.getPlayBackSsrc();
  118 + }else {
  119 + ssrc = ssrcConfig.getPlaySsrc();
  120 + }
  121 +
111 if (streamId == null) { 122 if (streamId == null) {
112 streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase(); 123 streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase();
113 } 124 }
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/DownloadController.java
@@ -103,7 +103,7 @@ public class DownloadController { @@ -103,7 +103,7 @@ public class DownloadController {
103 return result; 103 return result;
104 } 104 }
105 105
106 - SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, null); 106 + SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, null, true);
107 107
108 cmder.downloadStreamCmd(newMediaServerItem, ssrcInfo, device, channelId, startTime, endTime, downloadSpeed, (MediaServerItem mediaServerItem, JSONObject response) -> { 108 cmder.downloadStreamCmd(newMediaServerItem, ssrcInfo, device, channelId, startTime, endTime, downloadSpeed, (MediaServerItem mediaServerItem, JSONObject response) -> {
109 logger.info("收到订阅消息: " + response.toJSONString()); 109 logger.info("收到订阅消息: " + response.toJSONString());
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/playback/PlaybackController.java
@@ -85,7 +85,7 @@ public class PlaybackController { @@ -85,7 +85,7 @@ public class PlaybackController {
85 return result; 85 return result;
86 } 86 }
87 MediaServerItem newMediaServerItem = playService.getNewMediaServerItem(device); 87 MediaServerItem newMediaServerItem = playService.getNewMediaServerItem(device);
88 - SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, null); 88 + SSRCInfo ssrcInfo = mediaServerService.openRTPServer(newMediaServerItem, null, true);
89 89
90 // 超时处理 90 // 超时处理
91 result.onTimeout(()->{ 91 result.onTimeout(()->{
src/main/resources/wvpssl.jks 0 → 100644
No preview for this file type