1

我开发了一个电子应用程序,并且有史以来第一次,我的防病毒软件 (ESET) 在应用程序加载时引发了“网络摄像头访问尝试”。有没有其他人经历过这个?

我的应用程序不使用网络摄像头,并且我没有需要网络摄像头的代码。

我确实有访问音频以进行录音的代码。我在防病毒软件中拒绝访问网络摄像头,并且该应用程序确实按设计运行。但是,每次加载应用程序时都会出现防病毒警告消息。可以想象,这并不酷。

这在更新 ESET (v14.2.10.0) 后立即浮出水面,因此他们有一些被触发的新规则。我不得不假设这不是 ESET 对某些东西的过度敏感(我不知道 AV 的功能和“责备”防病毒软件似乎不是为用户提供的合理回应),所以我不得不质疑我的网络部署-apis 在我的代码中。

我的音频访问使用本机网络 API:AudioContextNavigatorMediaDevicesMediaRecorder。关键代码行如下:

// 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

4

0 回答 0