所以,我正在开发一个小型电子桌面应用程序,它可以捕获桌面屏幕并录制视频和音频。当我尝试向流中添加音频时,它开始回响非常糟糕,我不知道为什么。
我在用:
这是一些代码。
当我只想捕获和录制视频时,我创建了这些约束:
const constraints = {
audio: false,
video: {
mandatory: {
chromeMediaSource: 'desktop',
chromeMediaSourceId: source.id
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后我传递给这样的流:
const stream = await navigator.mediaDevices.getUserMedia(constraints)
它就像一个魅力。但是,当我开始添加音频时,它给了我回声:
const constraints = {
audio: {
mandatory: {
chromeMediaSource: 'desktop',
}
},
video: {
mandatory: {
chromeMediaSource: 'desktop',
}
}
}
Run Code Online (Sandbox Code Playgroud)
另外,我不能只是将音频设置为 true。然后它给了我这个错误:
未捕获(承诺)DOMException:启动屏幕捕获时出错
一个有趣的事实。当我转到有关音频约束的Mozilla 文档页面并使用演示按钮时,它也会给我回声。我尝试在 Edge 上做,结果更好,但仍然有回声。那么它可以是音频编解码器吗?
这里表示支持 echoCancellation 约束,并且默认情况下从 Chrome 62 版开始。
这是 Github 上的分支,我试图在那里找到解决方案,但失败了。
如果您想更仔细地查看它,这是我的 …
我有一个 React (v18) 项目,我做了一些事情,现在导致开发工具中出现错误。似乎没有破坏我的任何流程。该错误没有指向我的任何代码行,而是 VJPCOI.js:920
完整的错误消息是
未捕获(承诺中)错误:无法读取wrappedSendMessageCallback(ZSVJPCOI.js:920:22)w处未定义的属性(读取“ RUNTIME ”)
这个错误的根源就在这个函数中
const wrappedSendMessageCallback = ({
reject,
resolve
}, reply) => {
if (extensionAPIs.runtime.lastError) {
if (extensionAPIs.runtime.lastError.message === CHROME_SEND_MESSAGE_CALLBACK_NO_RESPONSE_MESSAGE) {
resolve();
} else {
reject(new Error(extensionAPIs.runtime.lastError.message)); <-- error here
}
} else if (reply && reply.__mozWebExtensionPolyfillReject__) {
reject(new Error(reply.message));
} else {
resolve(reply);
}
};
Run Code Online (Sandbox Code Playgroud)
向我推荐一种解决/调试此错误的好方法。我在这里找不到任何相关主题。我不知道从哪里开始......