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 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 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 106 // via
107 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 109 viaHeader.setRPort();
110 110 viaHeaders.add(viaHeader);
111 111 //from
... ... @@ -113,7 +113,7 @@ public class SIPRequestHeaderProvider {
113 113 Address fromAddress = sipFactory.createAddressFactory().createAddress(fromSipURI);
114 114 FromHeader fromHeader = sipFactory.createHeaderFactory().createFromHeader(fromAddress, fromTag); //必须要有标记,否则无法创建会话,无法回应ack
115 115 //to
116   - SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId,sipConfig.getDomain());
  116 + SipURI toSipURI = sipFactory.createAddressFactory().createSipURI(channelId, sipConfig.getDomain());
117 117 Address toAddress = sipFactory.createAddressFactory().createAddress(toSipURI);
118 118 ToHeader toHeader = sipFactory.createHeaderFactory().createToHeader(toAddress,null);
119 119  
... ... @@ -127,7 +127,10 @@ public class SIPRequestHeaderProvider {
127 127 Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
128 128 // Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
129 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 134 ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("APPLICATION", "SDP");
132 135 request.setContent(content, contentTypeHeader);
133 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 468  
469 469 StringBuffer content = new StringBuffer(200);
470 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 472 content.append("s=Playback\r\n");
473 473 content.append("u="+channelId+":0\r\n");
474 474 content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
... ... @@ -532,7 +532,7 @@ public class SIPCommander implements ISIPCommander {
532 532 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
533 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 537 transmitRequest(device, request, errorEvent, okEvent -> {
538 538 Dialog dialog = okEvent.getClientTransaction().getDialog();
... ... @@ -575,7 +575,7 @@ public class SIPCommander implements ISIPCommander {
575 575  
576 576 StringBuffer content = new StringBuffer(200);
577 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 579 content.append("s=Download\r\n");
580 580 content.append("u="+channelId+":0\r\n");
581 581 content.append("c=IN IP4 "+mediaServerItem.getSdpIp()+"\r\n");
... ... @@ -640,7 +640,7 @@ public class SIPCommander implements ISIPCommander {
640 640 CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
641 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 645 ClientTransaction transaction = transmitRequest(device, request, errorEvent);
646 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 36  
37 37 SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId);
38 38  
  39 + SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, boolean isPlayback);
  40 +
39 41 void closeRTPServer(Device device, String channelId);
40 42  
41 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 96  
97 97 @Override
98 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 104 if (mediaServerItem == null || mediaServerItem.getId() == null) {
100 105 return null;
101 106 }
... ... @@ -107,7 +112,13 @@ public class MediaServerServiceImpl implements IMediaServerService, CommandLineR
107 112 logger.info("media server [ {} ] ssrcConfig is null", mediaServerItem.getId());
108 113 return null;
109 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 122 if (streamId == null) {
112 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 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 108 cmder.downloadStreamCmd(newMediaServerItem, ssrcInfo, device, channelId, startTime, endTime, downloadSpeed, (MediaServerItem mediaServerItem, JSONObject response) -> {
109 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 85 return result;
86 86 }
87 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 91 result.onTimeout(()->{
... ...
src/main/resources/wvpssl.jks 0 → 100644
No preview for this file type