kindring 2 rokov pred
rodič
commit
177927ac9c

+ 33 - 0
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/broadCast/BroadCast.java

@@ -0,0 +1,33 @@
+package com.genersoft.iot.vmp.vmanager.gb28181.broadCast;
+
+import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
+import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
+import com.genersoft.iot.vmp.vmanager.gb28181.play.PlayController;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.Parameter;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.context.request.async.DeferredResult;
+
+@Tag(name  = "国标设备语音通话")
+@CrossOrigin
+@RestController
+@RequestMapping("/api/broader")
+public class BroadCast {
+    private final static Logger logger = LoggerFactory.getLogger(PlayController.class);
+    @Autowired
+    private IVideoManagerStorage storager;
+
+    @Operation(summary="语音对讲开始")
+    @Parameter(name = "deviceId", description = "设备id" , required = false)
+    @Parameter(name = "channelId", description = "通道id" , required = false)
+    @GetMapping("/start")
+    public WVPResult start(@RequestParam String deviceId,@RequestParam String channelId){
+        WVPResult result = new WVPResult<>();
+        // todo 完成 broaderCast 信息发送
+        return result;
+    }
+}

+ 1 - 1
web_src/config/index.js

@@ -43,7 +43,7 @@ module.exports = {
       https: true,
     },
     // Various Dev Server settings
-    host:"127.0.0.1",
+    host:"0.0.0.0",
     useLocalIp: false, // can be overwritten by process.env.HOST
     port: 8080, // can be overwritten by process.env.PORT, if port is in use, a free one will be determined
     autoOpenBrowser: false,

+ 27 - 9
web_src/src/components/common/microphone.vue

@@ -1,6 +1,8 @@
 <template>
   <div class="microPhone">
-    <div class="mic" @mousedown="mouseDownHandle" @mouseup="mouseUpHandle"></div>
+    <div class="mic" @mousedown="mouseDownHandle" @mouseup="mouseUpHandle">
+      {{isRecording?'录音中...':'开始录音'}}
+    </div>
   </div>
 </template>
 
@@ -10,7 +12,9 @@ import handle from "@/until/handle";
 export default {
   name: "microphone.vue",
   props:{
-    size: "default"
+    size: "default",
+    deviceId: {required:true},
+    channelId: {required:true},
   },
   data(){
     return {
@@ -20,32 +24,32 @@ export default {
       audioStream: null,
       // record
       mediaRecord: null,
+      isRecording: false,
     }
   },
   methods:{
     // 录音按钮按下
     mouseDownHandle(){
-
+      this.startRecordAudio();
     },
     // 录音按钮抬起
     mouseUpHandle(){
-
+      this.isRecording = false;
     },
     queryMediaStream(){
       return new Promise((resolve, reject) => {
         navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia || navigator.msGetUserMedia
         navigator.getUserMedia({audio:true , video:false } ,
           (stream) => {
-          <!--这个stream 就是采集pcm数据的音源-->
             resolve(stream);
         }, (error) => {
           reject(error);
         });
       })
     },
-    async startGetAudio(){
+    async startRecordAudio(){
       let err,stream;
-      if(this.mediaStream){
+      if(!this.mediaStream){
         [err,stream] = await handle(this.queryMediaStream());
         if(err){
           this.$message.error('获取音频设备失败!');
@@ -56,11 +60,25 @@ export default {
       if(!this.isQueryAllowAudio){
         return this.$message.error('无法获取音频!');
       }
+      this.isRecording = true;
+      // 通知设备开始推流
       // 开始录音并推送音频至 wvp 服务器 || 或者推送至 zlm
-
+      // 暂定wvp开启
+    // todo 开始录音,并且每隔500ms发送音频文件给wvp
+    },
+    async stopRecordAudio(){
+    //  todo 停止录音
     },
     // 通知设备开启推流
-    sendBroaderCast(){
+    async sendBroaderCast(){
+      let url = `/api/broader`
+      url+=`?devId=${this.deviceId}&channel=${this.channelId}`;
+      let [err,res] = await handle(this.$axios({
+        method: 'get',
+        url: url
+      }));
+      this.clickCount = 0;
+      if(err){console.error(err)}
 
     }
   }

+ 5 - 1
web_src/src/components/common/ptzControl.vue

@@ -1,6 +1,8 @@
 <template>
   <div style="display: flex; justify-content: left;">
-
+    <div class="control-mic">
+      <microphone :channel-id="channelId" :device-id="deviceId"></microphone>
+    </div>
     <div class="control-wrapper">
       <div class="control-btn control-top" @mousedown="ptzControlHandleDown('up')" @mouseup="ptzControlHandleUp('up')">
         <i class="el-icon-caret-top"></i>
@@ -72,6 +74,7 @@
 
 <script>
 import handle from "@/until/handle";
+import Microphone from "@/components/common/microphone"
 
 let queryTimer = null;
 let isZoom = null;
@@ -97,6 +100,7 @@ let sendEndTimer = null;
 
 export default {
   name: "ptzControl",
+  components: {Microphone},
   props:{
     deviceId:{require:true},
     channelId:{require:true}