【问题标题】:Proper way to get the remote audio levels of a media stream in order to display audio levels visually?获取媒体流的远程音频级别以直观显示音频级别的正确方法?
【发布时间】:2015-07-16 22:07:34
【问题描述】:

希望做一些与下面的帖子非常相似的事情,但方向相反,使用 webrtc 显示来自我的远程方的入站媒体流的语音活动级别。我想通过修改代码来翻转它或在其他媒体流上运行它会很容易,但我没有运气。现在有人这样做或有什么想法吗?

Microphone activity level of WebRTC MediaStream

【问题讨论】:

  • 显示你尝试过的代码。另外,请确保使用createScriptProcessor 而不是createJavaScriptNode。看看this link,它是一个音量计的例子。如果没有更多关于您尝试过的代码和具体问题,很难给出准确的答案。
  • @chRyNaN 我正在使用 createJavaScriptNode,我用 createScriptProcessor 玩得不好,然后稍微发布一些代码。谢谢。
  • 是的,JavaScriptNode 已弃用,取而代之的是 ScriptProcessorNode,后者最近已弃用,很快将被 AudioWorkers 取代(大多数浏览器尚未实现)。

标签: javascript audio webrtc microphone getusermedia


【解决方案1】:
【解决方案2】:

目前,以跨浏览器(Chrome、Firefox、Opera)的方式执行此操作的最佳方法是本地获取流的音频电平并将它们传输到与流,通过 RTCDataChannel。这是SimpleWebRTC 和至少其他几个应用程序使用的方法。

SimpleWebRTC 使用一个名为 hark 的帮助程序库,您可以独立使用它来为流发出音量事件。然后,您只需通过数据通道将它们发送到另一个对等点,并让对等点根据这些事件显示音量。这不是理想的解决方案,但它是一个相当不错的解决方案。

还有更多关于在 SimpleWebRTC 中使用 hark 的示例 here。伪代码,因为详细的例子在别处:

  1. 获取流
  2. 在流​​上设置音频监视器
  3. 为流创建对等连接(或附加到传入)
  4. 为卷事件打开数据通道(或获取现有通道)
  5. 在音频监视器音量事件上,在数据通道上发出事件
  6. 监控音频事件的数据通道,并使用它们来显示对等音量

所以,很伪:

getUserMedia(constraints, function (stream) {
   audioMonitor = new Hark(stream);
   connection = new PeerConnection(stream);
   dataChannel = connection.createDataChannel('hark');
   audioMonitor.on('volumeChange', function(volume) {
       dataChannel.send('volume', volume);
   });
   dataChannel.onMessage(function(label, data) {
      if (label == 'volume') {
          //use data to set css, etc to show volume level of peer
      }
   }); 
});

【讨论】:

  • 请注意,在 Chrome 71(2018 年 12 月)之后,此方法将不再有效 - AudioContext 对象将需要用户手势才能开始工作,因此即使您已授予麦克风访问权限,也会在页面加载后立即尝试计算音量, 直到用户手势才会起作用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 2012-03-18
  • 2022-11-22
  • 2011-01-27
相关资源
最近更新 更多