WebRTC GainNode не работает на iOS (iPhone)

Цель

  • Измените коэффициент усиления (громкость микрофона) в реальном времени.
  • В демо вы сможете перейти от низкого коэффициента усиления (0.1) к высокому усилению (1). Когда он установлен на 0,1, вы вряд ли услышите себя, это похоже на режим шепота.

Проблема

Нижеприведенный код работает в Windows, Android и Safari для настольной версии, но когда я попытался запустить его в Safari на своем iPhone SE, я не слышу шепот или низкий выигрыш. Я проверил значение узла усиления и был установлен на 0,1, когда я нажал кнопку, но похоже, что он не вступил в силу.

Ссылка на демо:

https://unrupt.github.io/webrtc-samples/stream-gain-control.html

Safari Media поддерживает ограничения на iPhone

  • соотношение сторон
  • идентификатор устройства
  • эхоподавление
  • facingMode
  • частота кадров
  • идентификатор_группы
  • высота
  • samepleRate
  • размер образца
  • объем
  • ширина

Код:

    <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>

Какие-нибудь предложения о том, что я могу попробовать?

javascript,webrtc,web-audio,web-audio-api,simplewebrtc,

0

Ответов: 0

WebRTC GainNode не работает на iOS (iPhone)

Цель

  • Измените коэффициент усиления (громкость микрофона) в реальном времени.
  • В демо вы сможете перейти от низкого коэффициента усиления (0.1) к высокому усилению (1). Когда он установлен на 0,1, вы вряд ли услышите себя, это похоже на режим шепота.

Проблема

Нижеприведенный код работает в Windows, Android и Safari для настольной версии, но когда я попытался запустить его в Safari на своем iPhone SE, я не слышу шепот или низкий выигрыш. Я проверил значение узла усиления и был установлен на 0,1, когда я нажал кнопку, но похоже, что он не вступил в силу.

Ссылка на демо:

https://unrupt.github.io/webrtc-samples/stream-gain-control.html

Safari Media поддерживает ограничения на iPhone

  • соотношение сторон
  • идентификатор устройства
  • эхоподавление
  • facingMode
  • частота кадров
  • идентификатор_группы
  • высота
  • samepleRate
  • размер образца
  • объем
  • ширина

Код:

    <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>

Какие-нибудь предложения о том, что я могу попробовать?

00JavaScript, WebRTC, веб-аудио, веб-аудио-апи, simplewebrtc,
Похожие вопросы