瀏覽代碼

语言广播随机端口

kindring 2 年之前
父節點
當前提交
b669ce2976

+ 1 - 0
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java

@@ -623,6 +623,7 @@ public class ZLMHttpHookListener {
     public HookResult onSendRtpStopped(HttpServletRequest request, @RequestBody OnSendRtpStoppedHookParam param) {
 
         logger.info("[ZLM HOOK] rtp发送关闭:{}->{}/{}", param.getMediaServerId(), param.getApp(), param.getStream());
+        // 如果是音频推流则控制zlm关闭 webrtc流
 
         // 查找对应的上级推流,发送停止
         if (!"rtp".equals(param.getApp())) {

+ 2 - 2
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java

@@ -93,11 +93,11 @@ public class ZLMRESTfulUtils {
 //                logger.info("按理来说,这是必然的选择");
                 try {
                     Response response = client.newCall(request).execute();
-                    logger.error("执行访问zlm请求任务结束");
+                    logger.info("执行访问zlm请求任务结束");
                     if (response.isSuccessful()) {
                         ResponseBody responseBody = response.body();
                         if (responseBody != null) {
-                            logger.error("收到zlm返回值");
+                            logger.info("收到zlm返回值");
                             String responseStr = responseBody.string();
                             responseJSON = JSON.parseObject(responseStr);
                         }else{

+ 10 - 10
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java

@@ -400,20 +400,20 @@ public class ZLMRTPServerFactory {
 
         String[] portRangeStrArray = sendRtpPortRange.split(",");
         int localPort = -1;
-        if (portRangeStrArray.length != 2) {
-            localPort = getFreePort(serverItem, 30000, 30500, null);
-        }else {
-            localPort = getFreePort(serverItem, Integer.parseInt(portRangeStrArray[0]),  Integer.parseInt(portRangeStrArray[1]), null);
-        }
-        if (localPort == -1) {
-            logger.error("没有可用的端口");
-            return null;
-        }
+//        if (portRangeStrArray.length != 2) {
+//            localPort = getFreePort(serverItem, 30000, 30500, null);
+//        }else {
+//            localPort = getFreePort(serverItem, Integer.parseInt(portRangeStrArray[0]),  Integer.parseInt(portRangeStrArray[1]), null);
+//        }
+//        if (localPort == -1) {
+//            logger.error("没有可用的端口");
+//            return null;
+//        }
         // startSendRtp CHECK_ARGS("vhost", "app", "stream", "ssrc", "dst_url", "dst_port", "is_udp");
         Map<String, Object> param = new HashMap<>();
         param.put("vhost", "__defaultVhost__");
         // 推流端口设置0则使用随机端口
-        param.put("src_port", 31234);
+        param.put("src_port", 0);
         param.put("only_audio", 1);
         param.put("ssrc", ssrc);
         param.put("app", app);

+ 6 - 4
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java

@@ -205,10 +205,12 @@ public class MediaServerServiceImpl implements IMediaServerService {
             JSONObject result = zlmrtpServerFactory.startSendRtpPassive(mediaServerItem,rtpParam,30);
 //            JSONObject result = zlmrtpServerFactory.startSendRtpStream(mediaServerItem,rtpParam);
             logger.info("zlm start send {}",result.toJSONString());
-            if(result.get("code") != "0"){
-                logger.error("[语音广播 流媒体异常] {}",result.get("msg"));
-                return null;
-            }
+//            if((Integer.parseInt((String) result.get("code"))  != 0)){
+//                logger.error("[语音广播 流媒体异常] {}",result.get("msg"));
+//                return null;
+//            }
+            Integer code = (Integer) result.get("code");
+            if(code != null && code.intValue() != 0){ logger.error("[语音广播 流媒体异常] {}", result.get("msg")); return null; }
             RedisUtil.set(key, mediaServerItem);
             rtpServerPort = (int) result.get("local_port");
             return new SSRCInfo(rtpServerPort, ssrc, streamId);

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

@@ -383,6 +383,10 @@ public class PlayServiceImpl implements IPlayService {
             logger.error("[命令发送失败] 发送broadcast中 errorMsg: {}", e.getMessage());
             nodeCallBack.run(1,"[命令发送失败] 无法发送broadcast消息");
         }
+        // 获取对应的音频流信息
+//        logger.info("webrtc stream {}",streamAuthorityInfo);
+
+
         // 注册subScript事件
         GBHookSubscribe.addInviteSubscribe(broadcastForInviteHook,(int code, JSONObject json, SIPRequest request)->{
             logger.info("[语音广播] 接收到设备invite信息___订阅事件触发 JSONDATA: {}",json.toJSONString());
@@ -397,6 +401,8 @@ public class PlayServiceImpl implements IPlayService {
 
             // TODO: 2023/3/7 开始下发invite信息给设备
             try {
+                // 创建音频解码服务
+
                 // 向流媒体服务器申请创建 rtpServer 服务端口
                 ssrcInfo = mediaServerService.startSendRtpServer(mediaServerItem,app, streamId, audioStreamId,
                         json.getString("addr"),
@@ -404,8 +410,8 @@ public class PlayServiceImpl implements IPlayService {
                         ssrcStr
                 );
                 if(ssrcInfo == null){
-                    logger.error("[zlm控制异常] 启用webrtc转发失败");
-                    nodeCallBack.run(1,"[zlm控制异常] 启用webrtc转发失败");
+                    logger.error("[zlm控制异常] 创建媒体流失败");
+                    nodeCallBack.run(2,"[zlm控制异常] 创建媒体流失败");
                     return;
                 }
                 // 回复invite 200 信息至设备

+ 8 - 1
web_src/src/assets/ZLMRTCClient.js

@@ -7917,12 +7917,19 @@ let ZLMRTCClient = (function (exports) {
 
 	    this.pc.createOffer().then(desc => {
 	      log(this.TAG, 'offer:', desc.sdp);
+        log(this.TAG, desc);
+        let sdp = desc.sdp;
+        sdp = sdp.replace("a=rtpmap:9 G722/8000\n","");
+        sdp = sdp.replace("a=rtpmap:0 PCMU/8000\n","");
+        sdp = sdp.replace("a=rtpmap:13 CN/8000\n","");
+        // sdp = sdp.replace("a=rtpmap:9 G722/8000","");
+        log(this.Tag,"testSdp:",sdp)
 	      this.pc.setLocalDescription(desc).then(() => {
 	        axios({
 	          method: 'post',
 	          url: this.options.zlmsdpUrl,
 	          responseType: 'json',
-	          data: desc.sdp,
+	          data: sdp,
 	          headers: {
 	            'Content-Type': 'text/plain;charset=utf-8'
 	          }

+ 1 - 1
web_src/src/components/common/microphone.vue

@@ -124,7 +124,7 @@ export default {
           console.log('当前状态==>', state);
           if (state === 'connected') {
             // 等待1秒
-            await sleep(2000);
+            await sleep(2500);
             [err, res] = await handle(this.sendBroaderCast(this.pushConfig.stream,this.pushConfig.app));
             let response = res.data;
             if (err|| response.code!==0 ) {

+ 10 - 3
web_src/static/js/ZLMRTCClient.js

@@ -7364,7 +7364,7 @@ var ZLMRTCClient = (function (exports) {
 	          let ret = response.data; //JSON.parse(response.data);
 
 	          if (ret.code != 0) {
-	            // mean failed for offer/anwser exchange 
+	            // mean failed for offer/anwser exchange
 	            this.dispatch(Events$1.WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED, ret);
 	            return;
 	          }
@@ -7465,12 +7465,19 @@ var ZLMRTCClient = (function (exports) {
 
 	      this.pc.createOffer().then(desc => {
 	        log(this.TAG, 'offer:', desc.sdp);
+          log(this.TAG, desc);
+          let sdp = desc.sdp;
+          sdp = sdp.replace("a=rtpmap:9 G722/8000","");
+          sdp = sdp.replace("a=rtpmap:0 PCMU/8000","");
+          sdp = sdp.replace("a=rtpmap:13 CN/8000","");
+          // sdp = sdp.replace("a=rtpmap:9 G722/8000","");
+          log(this.Tag,"testSdp:",sdp)
 	        this.pc.setLocalDescription(desc).then(() => {
 	          axios({
 	            method: 'post',
 	            url: this.options.zlmsdpUrl,
 	            responseType: 'json',
-	            data: desc.sdp,
+	            data: sdp,
 	            headers: {
 	              'Content-Type': 'text/plain;charset=utf-8'
 	            }
@@ -7478,7 +7485,7 @@ var ZLMRTCClient = (function (exports) {
 	            let ret = response.data; //JSON.parse(response.data);
 
 	            if (ret.code != 0) {
-	              // mean failed for offer/anwser exchange 
+	              // mean failed for offer/anwser exchange
 	              this.dispatch(Events$1.WEBRTC_OFFER_ANWSER_EXCHANGE_FAILED, ret);
 	              return;
 	            }