|
@@ -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)}
|
|
|
|
|
|
}
|
|
|
}
|