Pārlūkot izejas kodu

暂存,修改端口,将redis存储值改为本地存储broadcastItem

kindring 2 gadi atpakaļ
vecāks
revīzija
d4f279d107

+ 38 - 2
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java

@@ -436,7 +436,7 @@ public class PlayServiceImpl implements IPlayService {
                               Device device,
                               int waitTime,
                               BroadcastCallback callback){
-        logger.warn("[语音广播] 开语音广播");
+        logger.warn("[语音广播] 开语音广播");
         JSONObject errJson = new JSONObject();
         try {
             cmder.audioBroadcastCmd(device);
@@ -1054,6 +1054,42 @@ public class PlayServiceImpl implements IPlayService {
             int waitTime,
             BroadcastCallback callback
     ){
-
+        logger.info("[语言广播] 开始返回invite200,并创建zlm服务");
+        JSONObject errJson = new JSONObject();
+        try {
+            String steamId = broadcastItem.getStream();
+            String ssrcStr = broadcastItem.getSsrc();
+            ssrcStr = ssrcStr.replaceAll("\\s*|\r|\n|\t", "");
+
+            SSRCInfo ssrcInfo = mediaServerService.startSendRtpServer(mediaServerItem,
+                    broadcastItem.getApp(),
+                    broadcastItem.getStream(),
+                    broadcastItem.getStream(),
+                    broadcastItem.getIpcIp(),
+                    String.valueOf(broadcastItem.getIpcAudioPort()),
+                    ssrcStr
+            );
+            if (ssrcInfo == null) {
+                logger.error("[zlm控制异常] 创建媒体流失败");
+                errJson.put("msg", "[zlm控制异常] 创建媒体流失败");
+                callback.run(2, errJson, null);
+                return;
+            }
+            // 回复invite 200 信息至设备
+            cmder.sendBoradcastInviteCmd(broadcastItem.getRequest(), mediaServerItem, ssrcInfo, device, null, null,
+                    null,
+                    null,
+                    null);
+            //
+            callback.run(0, null,null);
+        }catch(InvalidArgumentException |  SipException | ParseException e){
+            logger.error("[下发audio拉流invite失败]",e);
+            logger.error("[zlm控制异常] 创建媒体流失败");
+            errJson.put("msg", "[zlm控制异常] 创建媒体流失败");
+            callback.run(2, errJson, null);
+//                    SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(new CmdSendFailEvent(null));
+//                    eventResult.msg = "命令发送失败";
+//                    errorEvent.response(eventResult);
+        }
     };
 }

+ 1 - 1
src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java

@@ -926,7 +926,7 @@ public class RedisCatchStorageImpl implements IRedisCatchStorage {
     @Override
     public boolean addBroadcastItem(String deviceId, BroadcastItem broadcastItem) {
         String key = VideoManagerConstants.WVP_BROADCAST_FLAG + deviceId;
-        return RedisUtil.set(key, broadcastItem,15);
+        return RedisUtil.set(key, broadcastItem);
     }
 
 

+ 27 - 0
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java

@@ -479,6 +479,7 @@ public class PlayController {
 			@RequestParam("deviceId") String deviceId,
 			@RequestParam(value = "audioCoded",required = false) String audioCoded
 	){
+		logger.info("[语音对讲] web端已经开启推流");
 		RequestMessage msg = new RequestMessage();
 		// 返回invite信息给设备
 		String key  = DeferredResultHolder.CALLBACK_CMD_BROADCAST_INVITE + deviceId;
@@ -487,6 +488,7 @@ public class PlayController {
 		msg.setId(uuid);
 		DeferredResult<WVPResult<String>> result = new DeferredResult<>(10*1000l);
 		WVPResult wvpResult = new WVPResult();
+		Map<String, Object> resultData = new HashMap<>(16);
 		resultHolder.put(key, uuid, result);
 
 
@@ -525,6 +527,31 @@ public class PlayController {
 				5000,
 				(int code, JSONObject json, SIPRequest request)->{
 					// todo 处理并返回语音广播请求,应该有一个ack
+					if(code == 1){
+						logger.warn("等待设备ack超时");
+						wvpResult.setCode(ErrorCode.ERR_TIMEOUT.getCode());
+						wvpResult.setMsg(ErrorCode.ERR_TIMEOUT.getMsg());
+					} else if (code == 2) {
+						wvpResult.setCode(ErrorCode.ERROR100.getCode());
+						wvpResult.setMsg((String) json.get("msg"));
+					} else if (code == 0) {
+						logger.info("收到设备invite信息: {}",json);
+						// 获取id
+						resultData.put("mediaId",mediaServerItem.getId());
+//						resultData.put("app",app);
+//						resultData.put("stream",stream);
+//						resultData.put("type",type);
+//						resultData.put("sign",sign);
+//						resultData.put("webRtcPushUrl", webRtcPushUrl);
+//						resultData.put("audioFormats",json.get("audioFormats"));
+//						logger.info("获取webrtc推流地址:{}",webRtcPushUrl);
+
+						wvpResult.setCode(ErrorCode.SUCCESS.getCode());
+						wvpResult.setMsg(ErrorCode.SUCCESS.getMsg());
+						wvpResult.setData(resultData);
+					}
+					msg.setData(wvpResult);
+					resultHolder.invokeAllResult(msg);
 				}
 			);
 		}

+ 1 - 1
web_src/config/index.js

@@ -3,7 +3,7 @@
 // see http://vuejs-templates.github.io/webpack for documentation.
 
 const path = require('path')
-const baseUrl = "https://192.168.1.26:29001"
+const baseUrl = "https://127.0.0.1:29001"
 const ZLMServer = "https://192.168.1.60:29010"
 module.exports = {
   dev: {