Browse Source

fix: media permission get failed and return error msg

one-file
konenet 4 years ago
parent
commit
87905d202d
  1. 50
      src/chat/Panel.jsx

50
src/chat/Panel.jsx

@ -404,6 +404,9 @@ class Panel extends React.Component {
} else if (type === "offer_ice") { } else if (type === "offer_ice") {
peer.addIceCandidate(iceCandidate) peer.addIceCandidate(iceCandidate)
} else if (type === "offer") { } else if (type === "offer") {
if (!this.checkMediaPermisssion()) {
return;
}
let preview = document.getElementById("preview1"); let preview = document.getElementById("preview1");
navigator.mediaDevices navigator.mediaDevices
.getUserMedia({ .getUserMedia({
@ -456,6 +459,18 @@ class Panel extends React.Component {
}, 10000) }, 10000)
} }
/**
* 检查媒体权限是否开启
* @returns 媒体权限是否开启
*/
checkMediaPermisssion = () => {
if (!navigator || !navigator.mediaDevices) {
message.error("获取摄像头权限失败!")
return false;
}
return true;
}
/** /**
* 获取好友列表 * 获取好友列表
*/ */
@ -832,17 +847,20 @@ class Panel extends React.Component {
* 开始录制音频 * 开始录制音频
*/ */
audiorecorder = null; audiorecorder = null;
hasAudioPermission = true;
startAudio = () => { startAudio = () => {
this.setState({ this.setState({
isRecord: true isRecord: true
}) })
this.audiorecorder = new Recorder() this.audiorecorder = new Recorder()
this.hasAudioPermission = true;
this.audiorecorder this.audiorecorder
.start() .start()
.then(() => { .then(() => {
console.log("start audio...") console.log("start audio...")
}, (error) => { }, (_error) => {
console.log("audio start error", error) this.hasAudioPermission = false;
message.error("录音权限获取失败!")
}) })
} }
@ -853,6 +871,9 @@ class Panel extends React.Component {
this.setState({ this.setState({
isRecord: false isRecord: false
}) })
if (!this.hasAudioPermission) {
return;
}
let blob = this.audiorecorder.getWAVBlob(); let blob = this.audiorecorder.getWAVBlob();
this.audiorecorder.stop() this.audiorecorder.stop()
this.audiorecorder.destroy() this.audiorecorder.destroy()
@ -861,7 +882,6 @@ class Panel extends React.Component {
}); });
this.audiorecorder = null; this.audiorecorder = null;
console.log(blob)
let reader = new FileReader() let reader = new FileReader()
reader.readAsArrayBuffer(blob) reader.readAsArrayBuffer(blob)
@ -876,6 +896,7 @@ class Panel extends React.Component {
messageType: this.state.messageType, messageType: this.state.messageType,
content: this.state.value, content: this.state.value,
contentType: 3, contentType: 3,
fileSuffix: "wav",
file: new Uint8Array(imgData) file: new Uint8Array(imgData)
} }
let message = protobuf.lookup("protocol.Message") let message = protobuf.lookup("protocol.Message")
@ -904,11 +925,17 @@ class Panel extends React.Component {
*/ */
dataChunks = []; dataChunks = [];
recorder = null; recorder = null;
hasVideoPermission = true;
startVideoRecord = (e) => { startVideoRecord = (e) => {
this.hasVideoPermission = true;
navigator.getUserMedia = navigator.getUserMedia || navigator.getUserMedia = navigator.getUserMedia ||
navigator.webkitGetUserMedia || navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia || navigator.mozGetUserMedia ||
navigator.msGetUserMedia; // navigator.msGetUserMedia; //
if (!this.checkMediaPermisssion()) {
this.hasVideoPermission = false;
return;
}
let preview = document.getElementById("preview"); let preview = document.getElementById("preview");
this.setState({ this.setState({
@ -939,6 +966,9 @@ class Panel extends React.Component {
this.setState({ this.setState({
isRecord: false isRecord: false
}) })
if (!this.hasVideoPermission) {
return;
}
let recordedBlob = new Blob(this.dataChunks, { type: "video/webm" }); let recordedBlob = new Blob(this.dataChunks, { type: "video/webm" });
@ -956,6 +986,7 @@ class Panel extends React.Component {
messageType: this.state.messageType, messageType: this.state.messageType,
content: this.state.value, content: this.state.value,
contentType: 3, contentType: 3,
fileSuffix: "webm",
file: new Uint8Array(fileData) file: new Uint8Array(fileData)
} }
let message = protobuf.lookup("protocol.Message") let message = protobuf.lookup("protocol.Message")
@ -981,7 +1012,9 @@ class Panel extends React.Component {
this.recorder = null this.recorder = null
} }
let preview = document.getElementById("preview"); let preview = document.getElementById("preview");
preview.srcObject.getTracks().forEach((track) => track.stop()); if (preview.srcObject && preview.srcObject.getTracks()) {
preview.srcObject.getTracks().forEach((track) => track.stop());
}
this.dataChunks = [] this.dataChunks = []
} }
@ -994,6 +1027,9 @@ class Panel extends React.Component {
navigator.webkitGetUserMedia || navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia || navigator.mozGetUserMedia ||
navigator.msGetUserMedia; // navigator.msGetUserMedia; //
if (!this.checkMediaPermisssion()) {
return;
}
let preview = document.getElementById("preview1"); let preview = document.getElementById("preview1");
this.setState({ this.setState({
@ -1074,10 +1110,14 @@ class Panel extends React.Component {
navigator.webkitGetUserMedia || navigator.webkitGetUserMedia ||
navigator.mozGetUserMedia || navigator.mozGetUserMedia ||
navigator.msGetUserMedia; // navigator.msGetUserMedia; //
if (!this.checkMediaPermisssion()) {
return;
}
let preview = document.getElementById("preview1"); let preview = document.getElementById("preview1");
this.setState({ this.setState({
isRecord: true isRecord: true,
mediaPanelDrawerVisible: true
}) })
navigator.mediaDevices navigator.mediaDevices

Loading…
Cancel
Save