Browse Source

1. 暂存

kindring 2 years ago
parent
commit
11a5d97a57

+ 3 - 3
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java

@@ -168,10 +168,10 @@ public interface ISIPCommander {
 
     /**
 	 * 语音广播
-	 * 
+	 *
 	 * @param device  视频设备
 	 */
-	void audioBroadcastCmd(Device device,String channelId);
+	void audioBroadcastCmd(Device device);
 	
 	/**
 	 * 语音广播
@@ -179,7 +179,7 @@ public interface ISIPCommander {
 	 * @param device  视频设备
 	 */
 	void audioBroadcastCmd(Device device, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException;
-	void audioBroadcastCmd(Device device) throws InvalidArgumentException, SipException, ParseException;
+	void audioBroadcastCmd(Device device,String webrtcStreamId) throws InvalidArgumentException, SipException, ParseException;
 	
 	/**
 	 * 音视频录像控制

+ 7 - 5
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java

@@ -694,10 +694,9 @@ public class SIPCommander implements ISIPCommander {
      * 语音广播
      *
      * @param device    视频设备
-     * @param channelId 预览通道
      */
     @Override
-    public void audioBroadcastCmd(Device device, String channelId) {
+    public void audioBroadcastCmd(Device device) {
     }
 
     /**
@@ -706,7 +705,7 @@ public class SIPCommander implements ISIPCommander {
      * @param device 视频设备
      */
     @Override
-    public void audioBroadcastCmd(Device device) throws InvalidArgumentException, SipException, ParseException {
+    public void audioBroadcastCmd(Device device,String webrtcStreamId) throws InvalidArgumentException, SipException, ParseException {
 
         StringBuffer broadcastXml = new StringBuffer(200);
         String charset = device.getCharset();
@@ -714,13 +713,16 @@ public class SIPCommander implements ISIPCommander {
         broadcastXml.append("<Notify>\r\n");
         broadcastXml.append("<CmdType>Broadcast</CmdType>\r\n");
         broadcastXml.append("<SN>" + (int) ((Math.random() * 9 + 1) * 100000) + "</SN>\r\n");
-        broadcastXml.append("<SourceID>" + sipConfig.getId() + "</SourceID>\r\n");
+
+//        broadcastXml.append("<SourceID>" + sipConfig.getId() + "</SourceID>\r\n");
+        broadcastXml.append("<SourceID>" + webrtcStreamId + "</SourceID>\r\n");
+
         broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
         broadcastXml.append("</Notify>\r\n");
 
         CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
                 : udpSipProvider.getNewCallId();
-
+        logger.info("[下发broadcast]");
         Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
         transmitRequest(device.getTransport(), request);
 

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

@@ -301,27 +301,29 @@ public class ZLMRTPServerFactory {
         }
         // startSendRtp CHECK_ARGS("vhost", "app", "stream", "ssrc", "dst_url", "dst_port", "is_udp");
         Map<String, Object> param = new HashMap<>();
-        param.put("enable_tcp", 1);
         param.put("vhost", "__defaultVhost__");
         // 推流端口设置0则使用随机端口
-        param.put("port", 0);
-        param.put("use_ps", 0);
+//        param.put("port", 0);
         param.put("only_audio", 1);
-        param.put("ssrc", ssrc);
-        param.put("app", "broadcast");
+        param.put("ssrc", "123145");
+        param.put("app", "rtc");
 
 
-        param.put("recv_stream_id",recv_stream_id );
+        param.put("recv_stream_id",streamId );
         param.put("stream", recv_stream_id);
-
-        param.put("from_mp4", 0);
+//        param.put("from_mp4", 1);
         param.put("is_udp", 0);
+        // start send rtp
         param.put("dst_url", dst_url);
         param.put("dst_port", dst_port);
+        param.put("use_ps", 0);
+        param.put("pt", 8);
 
 //        param.put("stream", streamId);
 //        param.put("recv_stream_id", recv_stream_id);
 
+        logger.info("[你好] send json: ");
+        logger.info("[你好] send json: {}",param.toString());
         logger.info("send json: {}",param.toString());
 //        JSONObject itemJSONObj = JSONObject.parseObject(JSON.toJSONString(param));
         return param;

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

@@ -195,7 +195,7 @@ public class MediaServerServiceImpl implements IMediaServerService {
             }
             int rtpServerPort;
             // 创建
-            Map<String, Object> rtpParam = zlmrtpServerFactory.createStartSendRtpStreamAudioData(mediaServerItem, streamId,audioStreamId,ssrc,addr, Integer.parseInt(port));
+            Map<String, Object> rtpParam = zlmrtpServerFactory.createStartSendRtpStreamAudioData(mediaServerItem, streamId,audioStreamId,_ssrc,addr, Integer.parseInt(port));
 //            JSONObject result = zlmrtpServerFactory.startSendRtpPassive(mediaServerItem,rtpParam);
             JSONObject result = zlmrtpServerFactory.startSendRtpStream(mediaServerItem,rtpParam);
             logger.info("zlm start send {}",result.toJSONString());

+ 6 - 3
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java

@@ -488,7 +488,9 @@ public class PlayServiceImpl implements IPlayService {
 
 
             // rtp语音通道创建完成,开始发送broadcast
-            broadcastEventHandle(device,
+            broadcastEventHandle(
+                    device,
+                    audioStreamId,
                 (int code,String tipMsg)->{
                     if(code == 1){
                         WVPResult wvpResult = new WVPResult();
@@ -517,7 +519,7 @@ public class PlayServiceImpl implements IPlayService {
                         json.getString("addr"),
                         json.getString("port"),
                         json.getString("ssrc")
-                        );
+                );
                 logger.info(JSONObject.toJSONString(ssrcInfo));
 
 
@@ -553,10 +555,11 @@ public class PlayServiceImpl implements IPlayService {
 
     public void broadcastEventHandle(
             Device device,
+            String webrtcStreamId,
             NodeCallBack nodeCallBack){
         logger.info("[语音广播] 开始broadcast交互");
         try {
-            cmder.audioBroadcastCmd(device);
+            cmder.audioBroadcastCmd(device,webrtcStreamId);
             nodeCallBack.run(0,"ok");
         } catch (InvalidArgumentException | SipException | ParseException e) {
             logger.error("[命令发送失败] 发送broadcast中 errorMsg: {}", e.getMessage());

+ 4 - 4
src/main/resources/application.yml

@@ -93,7 +93,7 @@ sip:
     # [必须修改] 本机的IP, 必须是网卡上的IP,用于sip下协议栈监听ip,如果监听所有设置为0.0.0.0
     monitor-ip: 0.0.0.0
     # [必须修改] 本机的IP
-    ip: 192.168.1.26
+    ip: kindring.cn
     # [可选] 28181服务监听的端口
     port: 29000
     # 根据国标6.1.2中规定,domain宜采用ID统一编码的前十位编码。国标附录D中定义前8位为中心编码(由省级、市级、区级、基层编号组成,参照GB/T 2260-2007)
@@ -123,13 +123,13 @@ media:
     # [必须修改] zlm服务器唯一id,用于触发hook时区别是哪台服务器,general.mediaServerId
     id: your_server_id
     # [必须修改] zlm服务器的内网IP
-    ip: 192.168.1.203
+    ip: szgpay.ticp.net
     # [可选] 返回流地址时的ip,置空使用 media.ip
-    stream-ip: 192.168.1.203
+    stream-ip: szgpay.ticp.net
     #stream-ip: 192.168.1.203
     #stream-ip: 113.88.194.58
     # [可选] wvp在国标信令中使用的ip,此ip为摄像机可以访问到的ip, 置空使用 media.ip
-    sdp-ip: 192.168.1.203
+    sdp-ip: szgpay.ticp.net
     #sdp-ip: 192.168.1.203
     #sdp-ip: 113.88.194.58
     # [可选] zlm服务器的hook所使用的IP, 默认使用sip.ip

+ 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://192.168.31.174:29001"
 module.exports = {
   dev: {
 

+ 32 - 15
web_src/src/components/common/microphone.vue

@@ -76,13 +76,13 @@ export default {
         if(!hookHost){
           hookHost = "szgpay.ticp.net:29010"
         }
-        let app = "broadcast";
-        let stream = `audio${this.deviceId}`
+        let app = "rtc";
+        let stream = `${this.deviceId}`
         let zlmSdpUrl = `/zlmServer/index/api/webrtc?app=${app}&stream=${stream}&type=push&sign=${pushKey}`;
 
         let ffmpegStreamId = `ff_audio${this.deviceId}`
         let audioStreamUrl = `webrtc://${hookHost}/${app}/${stream}`
-        let dstUrl = `rtsp://127.0.0.1/${app}/${ffmpegStreamId}`;
+        let dstUrl = `rtsp://127.0.0.1:11554/${app}/${ffmpegStreamId}`;
         let playAudioStreamUrl = `https://192.168.1.203:29010/index/api/webrtc?app=${app}&stream=${stream}&type=play`;
         console.log(audioStreamUrl)
         console.log(playAudioStreamUrl)
@@ -95,10 +95,10 @@ export default {
         // enable_mp4	Y	是否开启mp4录制
         // ffmpeg_cmd_key
         let addFFmpegSourceData = {
-          secret:"",
+          secret:"035c73f7-bb6b-4889-a715-d9eb2d1925cc",
           src_url: audioStreamUrl,
           dst_url: dstUrl,
-          timeout_ms: 30,
+          timeout_ms: 15000,
           enable_hls: 0,
           enable_mp4: 0,
         }
@@ -131,19 +131,34 @@ export default {
           console.log('当前状态==>',state);
           console.log(ffmpegStreamProxyUrl);
           if(state === 'connected'){
-            // 连接成功添加ffmpeg 推流代理
-            [err,res] = await handle(this.$axios({
-              method: 'post',
-              url: ffmpegStreamProxyUrl,
-              data:addFFmpegSourceData
-            }));
+            console.log(player);
+            console.log(player._localStream.id);
+            if(player._localStream && player._localStream.id){
+              stream = player._localStream.id;
+            }
+            [err,res] = await  handle(this.sendBroaderCast(stream));
+
             if(err){
               this.$message.error(err.message);
-              console.log("[创建拉流代理] ")
+              console.log("[发送broadCast信息] 失败")
               console.log(err);
+              player.close();
             }
-            console.log(res);
-            [err,res] = await  handle(this.sendBroaderCast(ffmpegStreamId));
+
+            // 连接成功添加ffmpeg 推流代理
+            // [err,res] = await handle(this.$axios({
+            //   baseURL: "/",
+            //   method: 'post',
+            //   url: ffmpegStreamProxyUrl,
+            //   data:addFFmpegSourceData
+            // }));
+            // if(err){
+            //   this.$message.error(err.message);
+            //   console.log("[创建拉流代理] ")
+            //   console.log(err);
+            // }
+            // console.log(res);
+
 
           }else{
 
@@ -211,7 +226,9 @@ export default {
 
       console.log(res);
       if(response.code !== 0){
-        return this.$message.error(response.msg)
+        this.player.close();
+        return this.$message.error(response.msg);
+
       }
 
     }