你能在不播放的情况下获得 webrtc 音频流的音量吗?

Can you get the volume of a webrtc audio stream without playing it?

我有一堆 webrtc 流在 angularjs 视图中表示,我想可视化哪些流超过了某个音量阈值,然后我可以一次收听那些流。这可能吗?我发现的所有内容似乎都需要您将流附加到音频上下文以计算音量。这会播放流。不播放流能计算音量吗?我一直在玩 hark.js 来检测音量阈值。

我的流来自第三部分 rtc 库,但最终我有一堆 webrtc 流,并且想一次听一个,同时可视化哪些在发出噪音。大多数这样的例子似乎在广播公司方面都有这种逻辑。

hark 代码几乎执行以下操作:

-开始

    var audioContextType = window.AudioContext || window.webkitAudioContext;
    var audioContext = new audioContextType();
    var analyser = audioContext.createAnalyser();
    analyser.fftSize = 512;
    analyser.smoothingTimeConstant = 0.1;
    var node = audioContext.createMediaStreamSource(stream);
    node.connect(analyser);//plays stream

-循环

    var fftBins = new Float32Array(analyser.fftSize);
    analyser.getFloatFrequencyData(fftBins);
    //check fftBins for volume data

-我还从 icelink、第 3 方 webrtc 库、对象获取流。视图中的视频集合是从一堆流中创建的,就像这样

    var remoteStream = fm.icelink.webrtc.linkExtensions.getRemoteStream(link);
    var videoObject = angular.element('<video></video>');
    videoObject.attr('src', window.URL.createObjectURL(remoteStream.getBackingStream()));
    videoObject.attr('autoplay', 'true');
    resolve(videoObject);

我正在尝试叠加一些视觉指示器以在不播放它们的情况下显示不同视频流的音量

您不必 "play" 将流连接到 AudioContext。只需 connectanalyser,并省略 node.connect(audioCtx.destination) 以放弃默认扬声器输出。