Commit cfe9c762d680569136d0246ab61c79cd7e4eba50

Authored by 648540858
1 parent 03d6ad28

修复前端播放

src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -41,7 +41,9 @@ import javax.sip.header.*; @@ -41,7 +41,9 @@ import javax.sip.header.*;
41 import javax.sip.message.Request; 41 import javax.sip.message.Request;
42 import java.lang.reflect.Field; 42 import java.lang.reflect.Field;
43 import java.text.ParseException; 43 import java.text.ParseException;
  44 +import java.util.ArrayList;
44 import java.util.HashSet; 45 import java.util.HashSet;
  46 +import java.util.List;
45 47
46 /** 48 /**
47 * @description:设备能力接口,用于定义设备的控制、查询能力 49 * @description:设备能力接口,用于定义设备的控制、查询能力
@@ -685,15 +687,7 @@ public class SIPCommander implements ISIPCommander { @@ -685,15 +687,7 @@ public class SIPCommander implements ISIPCommander {
685 // 增加Contact header 687 // 增加Contact header
686 Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort())); 688 Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort()));
687 byeRequest.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress)); 689 byeRequest.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress));
688 - List<String> agentParam = new ArrayList<>();  
689 - agentParam.add("wvp-pro");  
690 - // TODO 添加版本信息以及日期  
691 - UserAgentHeader userAgentHeader = null;  
692 - try {  
693 - userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam);  
694 - } catch (ParseException e) {  
695 - throw new RuntimeException(e);  
696 - } 690 + UserAgentHeader userAgentHeader = HeaderUtils.createUserAgentHeader(sipFactory);
697 byeRequest.addHeader(userAgentHeader); 691 byeRequest.addHeader(userAgentHeader);
698 ClientTransaction clientTransaction = null; 692 ClientTransaction clientTransaction = null;
699 if("TCP".equals(protocol)) { 693 if("TCP".equals(protocol)) {
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/SIPRequestProcessorParent.java
@@ -63,12 +63,9 @@ public abstract class SIPRequestProcessorParent { @@ -63,12 +63,9 @@ public abstract class SIPRequestProcessorParent {
63 System.out.println(serverTransaction.getState().toString()); 63 System.out.println(serverTransaction.getState().toString());
64 } 64 }
65 // 判断TCP还是UDP 65 // 判断TCP还是UDP
66 - boolean isTcp = false;  
67 ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME); 66 ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
68 String transport = reqViaHeader.getTransport(); 67 String transport = reqViaHeader.getTransport();
69 - if (transport.equals("TCP")) {  
70 - isTcp = true;  
71 - } 68 + boolean isTcp = "TCP".equals(transport);
72 69
73 if (serverTransaction == null) { 70 if (serverTransaction == null) {
74 try { 71 try {
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -126,7 +126,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -126,7 +126,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
126 private DeferredResultHolder resultHolder; 126 private DeferredResultHolder resultHolder;
127 127
128 @Autowired 128 @Autowired
129 - private ZLMHttpHookSubscribe subscribe; 129 + private ZlmHttpHookSubscribe subscribe;
130 130
131 @Autowired 131 @Autowired
132 private SipConfig config; 132 private SipConfig config;
@@ -776,13 +776,13 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -776,13 +776,13 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
776 } 776 }
777 } 777 }
778 778
779 - public void inviteFromDeviceHandle(RequestEvent evt, String requesterId, String channelId1) throws InvalidArgumentException, ParseException, SipException, SdpException { 779 + public void inviteFromDeviceHandle(RequestEvent evt, String requesterId, String channelId) throws InvalidArgumentException, ParseException, SipException, SdpException {
780 780
781 // 非上级平台请求,查询是否设备请求(通常为接收语音广播的设备) 781 // 非上级平台请求,查询是否设备请求(通常为接收语音广播的设备)
782 Device device = redisCatchStorage.getDevice(requesterId); 782 Device device = redisCatchStorage.getDevice(requesterId);
783 - AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(requesterId, channelId1); 783 + AudioBroadcastCatch audioBroadcastCatch = audioBroadcastManager.get(requesterId, channelId);
784 if (audioBroadcastCatch == null) { 784 if (audioBroadcastCatch == null) {
785 - logger.warn("来自设备的Invite请求非语音广播,已忽略"); 785 + logger.warn("来自设备的Invite请求非语音广播,已忽略,requesterId: {}/{}", requesterId, channelId);
786 responseAck(evt, Response.FORBIDDEN); 786 responseAck(evt, Response.FORBIDDEN);
787 return; 787 return;
788 } 788 }
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServiceImpl.java
@@ -108,7 +108,7 @@ public class MediaServiceImpl implements IMediaService { @@ -108,7 +108,7 @@ public class MediaServiceImpl implements IMediaService {
108 streamInfoResult.setWs_fmp4(String.format("ws://%s:%s/%s/%s.live.mp4%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam)); 108 streamInfoResult.setWs_fmp4(String.format("ws://%s:%s/%s/%s.live.mp4%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
109 streamInfoResult.setTs(String.format("http://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam)); 109 streamInfoResult.setTs(String.format("http://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
110 streamInfoResult.setWs_ts(String.format("ws://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam)); 110 streamInfoResult.setWs_ts(String.format("ws://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpPort(), app, stream, callIdParam));
111 - streamInfoResult.setRtc(String.format("http://%s:%s/index/api/webrtc?app=%s&stream=%s&type=play%s", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream, ObjectUtils.isEmpty(callId)?"":"&callId=" + callId)); 111 + streamInfoResult.setRtc(String.format("http://%s:%s/index/api/webrtc?app=%s&stream=%s&type=%s%s", mediaInfo.getStreamIp(), mediaInfo.getHttpPort(), app, stream, isPlay?"play":"push", ObjectUtils.isEmpty(callId)?"":"&callId=" + callId));
112 if (mediaInfo.getHttpSSlPort() != 0) { 112 if (mediaInfo.getHttpSSlPort() != 0) {
113 streamInfoResult.setHttps_flv(String.format("https://%s:%s/%s/%s.live.flv%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam)); 113 streamInfoResult.setHttps_flv(String.format("https://%s:%s/%s/%s.live.flv%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
114 streamInfoResult.setWss_flv(String.format("wss://%s:%s/%s/%s.live.flv%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam)); 114 streamInfoResult.setWss_flv(String.format("wss://%s:%s/%s/%s.live.flv%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
@@ -119,7 +119,7 @@ public class MediaServiceImpl implements IMediaService { @@ -119,7 +119,7 @@ public class MediaServiceImpl implements IMediaService {
119 streamInfoResult.setHttps_ts(String.format("https://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam)); 119 streamInfoResult.setHttps_ts(String.format("https://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
120 streamInfoResult.setWss_ts(String.format("wss://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam)); 120 streamInfoResult.setWss_ts(String.format("wss://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
121 streamInfoResult.setWss_ts(String.format("wss://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam)); 121 streamInfoResult.setWss_ts(String.format("wss://%s:%s/%s/%s.live.ts%s", addr, mediaInfo.getHttpSSlPort(), app, stream, callIdParam));
122 - streamInfoResult.setRtcs(String.format("https://%s:%s/index/api/webrtc?app=%s&stream=%s&type=play%s", mediaInfo.getStreamIp(), mediaInfo.getHttpSSlPort(), app, stream, ObjectUtils.isEmpty(callId)?"":"&callId=" + callId)); 122 + streamInfoResult.setRtcs(String.format("https://%s:%s/index/api/webrtc?app=%s&stream=%s&type=%s%s", mediaInfo.getStreamIp(), mediaInfo.getHttpSSlPort(), app, stream, isPlay?"play":"push", ObjectUtils.isEmpty(callId)?"":"&callId=" + callId));
123 } 123 }
124 124
125 streamInfoResult.setTracks(tracks); 125 streamInfoResult.setTracks(tracks);
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
@@ -266,12 +266,11 @@ public class PlayController { @@ -266,12 +266,11 @@ public class PlayController {
266 @Parameter(name = "channelId", description = "通道Id", required = true) 266 @Parameter(name = "channelId", description = "通道Id", required = true)
267 @GetMapping("/broadcast/stop/{deviceId}/{channelId}") 267 @GetMapping("/broadcast/stop/{deviceId}/{channelId}")
268 @PostMapping("/broadcast/stop/{deviceId}/{channelId}") 268 @PostMapping("/broadcast/stop/{deviceId}/{channelId}")
269 - public WVPResult<String> stopBroadcastA(@PathVariable String deviceId, @PathVariable String channelId) { 269 + public void stopBroadcastA(@PathVariable String deviceId, @PathVariable String channelId) {
270 if (logger.isDebugEnabled()) { 270 if (logger.isDebugEnabled()) {
271 logger.debug("停止语音广播API调用"); 271 logger.debug("停止语音广播API调用");
272 } 272 }
273 playService.stopAudioBroadcast(deviceId, channelId); 273 playService.stopAudioBroadcast(deviceId, channelId);
274 - return new WVPResult<>(0, "success", null);  
275 } 274 }
276 275
277 @Operation(summary = "获取所有的ssrc") 276 @Operation(summary = "获取所有的ssrc")
web_src/src/components/dialog/devicePlayer.vue
1 <template> 1 <template>
2 <div id="devicePlayer" v-loading="isLoging"> 2 <div id="devicePlayer" v-loading="isLoging">
3 3
4 - <el-dialog title="视频播放" top="0" :close-on-click-modal="false" :visible.sync="showVideoDialog" @close="close()"> 4 + <el-dialog title="视频播放" top="0" :close-on-click-modal="false" :visible.sync="showVideoDialog" :destroy-on-close="true" @close="close()">
5 <!-- <LivePlayer v-if="showVideoDialog" ref="videoPlayer" :videoUrl="videoUrl" :error="videoError" :message="videoError" :hasaudio="hasaudio" fluent autoplay live></LivePlayer> --> 5 <!-- <LivePlayer v-if="showVideoDialog" ref="videoPlayer" :videoUrl="videoUrl" :error="videoError" :message="videoError" :hasaudio="hasaudio" fluent autoplay live></LivePlayer> -->
6 <div style="width: 100%; height: 100%"> 6 <div style="width: 100%; height: 100%">
7 <el-tabs type="card" :stretch="true" v-model="activePlayer" @tab-click="changePlayer" v-if="Object.keys(this.player).length > 1"> 7 <el-tabs type="card" :stretch="true" v-model="activePlayer" @tab-click="changePlayer" v-if="Object.keys(this.player).length > 1">
@@ -319,7 +319,9 @@ export default { @@ -319,7 +319,9 @@ export default {
319 } 319 }
320 }, 320 },
321 created() { 321 created() {
  322 + console.log("created")
322 console.log(this.player) 323 console.log(this.player)
  324 + this.broadcastStatus = -1;
323 if (Object.keys(this.player).length === 1) { 325 if (Object.keys(this.player).length === 1) {
324 this.activePlayer = Object.keys(this.player)[0] 326 this.activePlayer = Object.keys(this.player)[0]
325 } 327 }
@@ -332,7 +334,7 @@ export default { @@ -332,7 +334,7 @@ export default {
332 // 如何你只是用一种播放器,直接注释掉不用的部分即可 334 // 如何你只是用一种播放器,直接注释掉不用的部分即可
333 player: { 335 player: {
334 jessibuca : ["ws_flv", "wss_flv"], 336 jessibuca : ["ws_flv", "wss_flv"],
335 - webRTC: ["rtc", "rtc"], 337 + webRTC: ["rtc", "rtcs"],
336 }, 338 },
337 videoHistory: { 339 videoHistory: {
338 date: '', 340 date: '',
@@ -540,9 +542,7 @@ export default { @@ -540,9 +542,7 @@ export default {
540 this.stopPlayRecord(); 542 this.stopPlayRecord();
541 } 543 }
542 this.recordPlay = '' 544 this.recordPlay = ''
543 - if (this.broadcastStatus === 1) {  
544 - this.stopBroadcast()  
545 - } 545 + this.stopBroadcast()
546 }, 546 },
547 547
548 copySharedInfo: function (data) { 548 copySharedInfo: function (data) {
@@ -857,7 +857,12 @@ export default { @@ -857,7 +857,12 @@ export default {
857 }).then( (res)=> { 857 }).then( (res)=> {
858 if (res.data.code == 0) { 858 if (res.data.code == 0) {
859 let streamInfo = res.data.data.streamInfo; 859 let streamInfo = res.data.data.streamInfo;
860 - this.startBroadcast(streamInfo.rtc) 860 + if (document.location.protocol.includes("https")) {
  861 + this.startBroadcast(streamInfo.rtcs)
  862 + }else {
  863 + this.startBroadcast(streamInfo.rtc)
  864 + }
  865 +
861 }else { 866 }else {
862 this.$message({ 867 this.$message({
863 showClose: true, 868 showClose: true,
@@ -958,23 +963,28 @@ export default { @@ -958,23 +963,28 @@ export default {
958 963
959 }, 964 },
960 stopBroadcast(){ 965 stopBroadcast(){
961 - this.broadcastStatus = -2;  
962 - this.broadcastRtc = null;  
963 - this.$axios({  
964 - method: 'get',  
965 - url: '/api/play/broadcast/stop/' + this.deviceId + '/' + this.channelId  
966 - }).then( (res)=> {  
967 - if (res.data.code == 0) {  
968 - // this.broadcastStatus = -1;  
969 - // this.broadcastRtc.close()  
970 - }else {  
971 - this.$message({  
972 - showClose: true,  
973 - message: res.data.msg,  
974 - type: "error",  
975 - });  
976 - }  
977 - }); 966 + if (this.broadcastStatus === -1) {
  967 + this.broadcastStatus = 1;
  968 + }else {
  969 + this.broadcastStatus = -2;
  970 + this.broadcastRtc = null;
  971 + this.$axios({
  972 + method: 'get',
  973 + url: '/api/play/broadcast/stop/' + this.deviceId + '/' + this.channelId
  974 + }).then( (res)=> {
  975 + if (res.data.code == 0) {
  976 + // this.broadcastStatus = -1;
  977 + // this.broadcastRtc.close()
  978 + }else {
  979 + this.$message({
  980 + showClose: true,
  981 + message: res.data.msg,
  982 + type: "error",
  983 + });
  984 + }
  985 + });
  986 + }
  987 +
978 988
979 } 989 }
980 } 990 }