我开发了一个电子应用程序,并且有史以来第一次,我的防病毒软件 (ESET) 在应用程序加载时引发了“网络摄像头访问尝试”。有没有其他人经历过这个?
我的应用程序不使用网络摄像头,并且我没有需要网络摄像头的代码。
我确实有访问音频以进行录音的代码。我在防病毒软件中拒绝访问网络摄像头,并且该应用程序确实按设计运行。但是,每次加载应用程序时都会出现防病毒警告消息。可以想象,这并不酷。
这在更新 ESET (v14.2.10.0) 后立即浮出水面,因此他们有一些被触发的新规则。我不得不假设这不是 ESET 对某些东西的过度敏感(我不知道 AV 的功能和“责备”防病毒软件似乎不是为用户提供的合理回应),所以我不得不质疑我的网络部署-apis 在我的代码中。
我的音频访问使用本机网络 API:AudioContext、Navigator、MediaDevices、MediaRecorder。关键代码行如下:
// getting list of all AUDIO devices:
// const audioSources = await navigator.mediaDevices.enumerateDevices({ audio: true });
// ^ above does NOT filter by audio only
const audioSources = await navigator.mediaDevices.enumerateDevices();
// creating a recorder object:
const audioContext = new AudioContext();
const dest = audioContext.createMediaStreamDestination();
const audioParams = {
deviceId: "6e5fc2d7ffa5c6c04e06d282a5aa743e983e585a7e12118c80c0cd8646cce4b7", // this ID is from audioSources object
}
const mediaStream = await navigator.mediaDevices.getUserMedia({ audio: audioParams });
const audioIn = audioContext.createMediaStreamSource(mediaStream);
audioIn.connect(dest);
const audioOptions = {
bitsPerSecond: 128000,
mimeType: 'audio/webm; codecs=opus',
};
const recorder = new MediaRecorder(dest.stream, audioOptions);
因为navigator.mediaDevices.enumerateDevices()
不带参数,如{ audio: true }
,enumerateDevices()
触发摄像头请求。
我使用 的结果enumerateDevices()
来访问设备 ID,然后将其传入.getUserMedia()
以选择特定设备。这允许用户为同一录音选择一个或多个音频输入。
有没有办法只查询音频设备的可用媒体/不包括视频?
是否有另一种方法来识别所有可用的音频设备?
我还能如何选择.getUserMedia()
作为流返回的设备?
我能找到的唯一现有信息是在关闭的 Atom 社区论坛上: Electron 无缘无故地访问我的网络摄像头——两名开发人员在 20 年 9 月使用不同的防病毒软件发现了相同的行为。没有分辨率。
最初使用 Electron 8.5.0 看到。更新到 13.1.2 后问题仍然存在
软件版本: Electron 13.1.2、ESET 14.2.10.0