Commit 6dc4b8a79a07857f415e6da3955f8c14eafca38a
1 parent
0a951e87
修复点播与录像回放sdp信息sdp-ip的取值错误,修复回放信令错误
Showing
7 changed files
with
28 additions
and
12 deletions
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