|
@@ -1530,12 +1530,34 @@ const transcribeApi = async (file) => {
|
|
//获取录音权限
|
|
//获取录音权限
|
|
const getUserMedia = () => {
|
|
const getUserMedia = () => {
|
|
return new Promise((resolve) => {
|
|
return new Promise((resolve) => {
|
|
|
|
+ // 老的浏览器可能根本没有实现 mediaDevices,所以我们可以先设置一个空的对象
|
|
|
|
+ if (navigator.mediaDevices === undefined) {
|
|
|
|
+ navigator.mediaDevices = {};
|
|
|
|
+ }
|
|
|
|
+ // 一些浏览器部分支持 mediaDevices。我们不能直接给对象设置 getUserMedia
|
|
|
|
+ // 因为这样可能会覆盖已有的属性。这里我们只会在没有 getUserMedia 属性的时候添加它。
|
|
|
|
+ if (navigator.mediaDevices.getUserMedia === undefined) {
|
|
|
|
+ navigator.mediaDevices.getUserMedia = function(constraints) {
|
|
|
|
+ // 首先,如果有 getUserMedia 的话,就获得它
|
|
|
|
+ let getUserMedia = navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
|
|
|
|
+ // 一些浏览器根本没实现它 - 那么就返回一个 error 到 promise 的 reject 来保持一个统一的接口
|
|
|
|
+ if (!getUserMedia) {
|
|
|
|
+ window?.$message.error('当前浏览器不支持语音功能')
|
|
|
|
+ resolve(false)
|
|
|
|
+ }
|
|
|
|
+ // 否则,为老的 navigator.getUserMedia 方法包裹一个 Promise
|
|
|
|
+ return new Promise(function(resolve, reject) {
|
|
|
|
+ getUserMedia.call(navigator, constraints, resolve, reject);
|
|
|
|
+ });
|
|
|
|
+ }
|
|
|
|
+ }
|
|
navigator.mediaDevices.getUserMedia({
|
|
navigator.mediaDevices.getUserMedia({
|
|
audio: true
|
|
audio: true
|
|
}).then(stream => {
|
|
}).then(stream => {
|
|
resolve(stream)
|
|
resolve(stream)
|
|
}).catch(err => {
|
|
}).catch(err => {
|
|
console.log(err)
|
|
console.log(err)
|
|
|
|
+ window?.$message.error('获取麦克风权限失败了')
|
|
resolve(false)
|
|
resolve(false)
|
|
});
|
|
});
|
|
})
|
|
})
|