【发布时间】:2021-08-08 14:04:26
【问题描述】:
我正在尝试处理来自服务器的媒体流对象的远程音频。我得到多个媒体流对象,这些对象被传递给video element srcObject 然后静音。(如视频会议)
每个媒体流对象都被传递给一个单独的组件,该组件具有唯一的video 元素并附加到它上面。
我想分别处理每个媒体流对象的音频并相应地处理它以显示必要的视觉效果。
问题是,假设通话中有 5 个用户并且任何随机用户说话,分析器仅适用于第一个媒体流对象(添加到通话中的第一个)。如何检查音频来自哪个特定媒体流?以及为什么分析器适用于单个媒体流?
从媒体流对象分析音频的代码在这里提到如下
const context = new AudioContext();
const track = context.createMediaStreamSource(this.mediaStreamObj);
const gainNode = context.createGain();
const analyzer = context.createAnalyser();
track.connect(gainNode);
track.connect(analyzer);
gainNode.gain.value = 0;
track.connect(context.destination);
const bufferLength = analyzer.frequencyBinCount;
console.log(bufferLength);
const dataArray = new Uint8Array(bufferLength);
dataArray 进一步用于获取音频级别的平均值并应用必要的 css。 我找到了一个来源,其中提到这是一个 chrome 错误,请查看此链接 - Proper way to get the remote audio levels of a media stream in order to display audio levels visually? 有多个来源提到了本地音频的步骤,但我找不到与远程音频相关的任何内容。任何形式的帮助将不胜感激。
【问题讨论】:
-
您需要展示更多代码,例如您如何分析 5 个 usrers 流。
-
媒体流对象在parent中以对象数组的形式接收。然后将每个对象传递给子组件并附加到那里的
video标签。在每个子组件中,我都尝试使用我的问题中提到的 sn-p(Web Audio API) 来分析它们各自的媒体流对象。该过程包括,创建源节点->将媒体流对象传递给源节点->创建分析器节点->将源连接到目标。 -
它仅适用于单个媒体流,即仅第一个媒体流。当以与上述相同的方式传递新的媒体流对象时,分析器只为第一个媒体流对象提供音频信号电平,而其余对象除外。
-
感谢您的解释。我会在答案中发布我认为的问题。
标签: javascript angular webrtc web-audio-api