Javascript 获取媒体流的远程音频级别以直观显示音频级别的正确方法?

Javascript 获取媒体流的远程音频级别以直观显示音频级别的正确方法?,javascript,audio,webrtc,microphone,getusermedia,Javascript,Audio,Webrtc,Microphone,Getusermedia,希望做一些与下面的文章非常相似的事情,但方向相反,使用webrtc显示来自我的远程方的入站媒体流的语音活动级别。我原以为只要修改代码来翻转它或在其他媒体流上运行它就很容易了,但我没有运气。现在有人这样做了吗,或者有什么想法吗 这个问题似乎与Chrome的一个Bug有关。chrome团队对其进行了记录和确认,但没有根据最近的评论制定短期修复计划 有关这些相关链接的更多信息 目前,以跨浏览器(Chrome、Firefox、Opera)方式实现这一点的最佳方法是在本地获取流的音频级别,并通过RTC

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


这个问题似乎与Chrome的一个Bug有关。chrome团队对其进行了记录和确认,但没有根据最近的评论制定短期修复计划

有关这些相关链接的更多信息


目前,以跨浏览器(Chrome、Firefox、Opera)方式实现这一点的最佳方法是在本地获取流的音频级别,并通过RTCDataChannel将其传输到与流并行的对等方。这是和至少几个其他应用程序使用的方法

SimpleWebRTC使用一个名为standalone的助手库,您可以使用该库为流发出卷事件。然后,您只需通过数据通道将它们发送到另一个对等方,并让对等方根据这些事件显示卷。这不是理想的解决方案,但它是一个相当好的解决方案

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

  • 得到溪流
  • 在流上设置音频监视器
  • 为流创建对等连接(或连接到传入流)
  • 为卷事件打开数据通道(或获取现有数据通道)
  • 在音频监视器音量事件中,在数据通道上发出事件
  • 监视音频事件的数据通道,并使用它们显示对等音量
  • 所以,非常假:

    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
          }
       }); 
    });
    

    显示您尝试过的代码。另外,请确保使用
    createScriptProcessor
    而不是
    createJavaScriptNode
    。看看哪一个是体积计的例子。如果没有更多您尝试过的代码和特定的问题,就很难给出准确的答案。@chRyNaN我正在使用createJavaScriptNode,我将使用createScriptProcessor,然后稍后发布一些代码。谢谢。是的,JavaScriptNode已经被弃用,取而代之的是ScriptProcessorNode。ScriptProcessorNode最近被弃用,不久将被AudioWorkers(大多数浏览器尚未实现)取代。请注意,Chrome 71之后(2018年12月)这种方法并不总是有效的-AudioContext对象需要用户手势才能开始工作,因此在页面加载后立即计算音量的尝试,即使您已获得麦克风访问权限,也无法在用户手势之前工作。