Javascript WebRTC GainNode不适用于iOS(iPhone) 目的 更改实时流上的增益(麦克风音量) 在演示中,您将能够从低增益(0.1)更改为高增益(1)。当它设置为0.1时,你几乎听不到自己的声音,就像耳语模式 问题

Javascript WebRTC GainNode不适用于iOS(iPhone) 目的 更改实时流上的增益(麦克风音量) 在演示中,您将能够从低增益(0.1)更改为高增益(1)。当它设置为0.1时,你几乎听不到自己的声音,就像耳语模式 问题,javascript,webrtc,web-audio-api,simplewebrtc,Javascript,Webrtc,Web Audio Api,Simplewebrtc,下面的代码适用于Windows、Android和Safari桌面版本,但当我在iPhone SE上尝试在Safari中运行它时,我没有听到任何耳语或低增益。我检查了增益节点的值,当我单击按钮时,它被设置为0.1,但它似乎没有生效 链接到演示: Safari Media在iPhone上支持的限制 aspectRatio 设备ID 回声消除 面向模式 帧率 groupId 高度 异丙肾上腺素 抽样 卷 宽度 代码: 具有增益控制的媒体流 此示例的目的是控制流的增益 开始 低增益 默认增益 v

下面的代码适用于Windows、Android和Safari桌面版本,但当我在iPhone SE上尝试在Safari中运行它时,我没有听到任何耳语或低增益。我检查了增益节点的值,当我单击按钮时,它被设置为0.1,但它似乎没有生效

链接到演示:

Safari Media在iPhone上支持的限制
  • aspectRatio
  • 设备ID
  • 回声消除
  • 面向模式
  • 帧率
  • groupId
  • 高度
  • 异丙肾上腺素
  • 抽样
  • 宽度
代码:
具有增益控制的媒体流

此示例的目的是控制流的增益


开始 低增益 默认增益 var AudioContext=window.AudioContext | | window.webkitadiocontext; var-localStream; var gainNode; var-ctx; var-dst; var start=()=>navigator.mediaDevices.getUserMedia({audio:true}) 。然后(流=>audio.srcObject=modifyGain(流,2.5)) .catch(e=>log(e)); var modifyGain=(数据流,收益值)=>{ localStream=stream; ctx=新的AudioContext(); var src=ctx.createMediaStreamSource(流); dst=ctx.createMediaStreamDestination(); gainNode=ctx.createGain(); gainNode.gain.value=gainValue; src.connect(增益节点); 增益节点连接(dst); outputStream=dst.stream; stream.addTrack(outputStream.getAudioTracks()[0]); stream.removeTrack(stream.getAudioTracks()[0]); //[src,gainNode,dst].reduce((a,b)=>a&a.connect(b)); 回流; }; var updateGain=(值)=>{ gainNode.gain.value=值; }; var log=msg=>div.innerHTML+=“
”+msg;

对我可以尝试的内容有什么建议吗?

Safari仍然在其AudioContext构造函数的前面加上前缀(
ctx=new(window.AudioContext | | | window.webkitAudioContext)(;
)是的,我在代码中有这个。它仍然不起作用。我更新了问题的描述,因为他们似乎与MediaStreamDestinationNode的MediaStream有问题:(由一个似乎参与webkit开发的用户)。这让我想知道为什么他们甚至有这种方法,如果它没有用。。。对于您的情况,您真的需要输出媒体流吗?难道你不能简单地在audioContext的目的地上做所有的事情,而不是去看电影吗?是的,我可以,我想那会有用的。但是,我计划使用RTPeerConnection中的代码,在将流发送给远程用户之前,我希望调整增益或编辑流。
    <h2 class="w3-center">Media Stream with Gain Control</h2>
    <p class="w3-center">The aim of this sample is to control the gain of the stream</p>
    <audio id="audio" playsinline="true" controls autoplay></audio><br>
    <button class="btn-fn" onclick="start()">Start!</button>
    <button class="btn-fn" onclick="updateGain(0.001)">Low Gain</button>
    <button class="btn-fn" onclick="updateGain(1)">Default Gain</button>
    <script>
        var AudioContext = window.AudioContext || window.webkitAudioContext;

        var localStream;
        var gainNode;
        var ctx;
        var dst;
        var start = () => navigator.mediaDevices.getUserMedia({audio: true})
          .then(stream => audio.srcObject = modifyGain(stream, 2.5))
          .catch(e => log(e));

        var modifyGain = (stream, gainValue) => {
            localStream = stream;
          ctx = new AudioContext();
          var src = ctx.createMediaStreamSource(stream);
          dst = ctx.createMediaStreamDestination();
          gainNode = ctx.createGain();
          gainNode.gain.value = gainValue;
          src.connect(gainNode);
          gainNode.connect(dst);
          outputStream = dst.stream;
          stream.addTrack(outputStream.getAudioTracks()[0]);
          stream.removeTrack(stream.getAudioTracks()[0]);
          //[src, gainNode, dst].reduce((a, b) => a && a.connect(b));
          return stream;
        };

        var updateGain = (value) => {
          gainNode.gain.value = value;
        };

        var log = msg => div.innerHTML += "<br>" + msg;
    </script>