Safari - createMediaElementSource не работает? - PullRequest
0 голосов
/ 06 мая 2020

Мне нравится добавлять на Youtube эффект панорамирования звука.

Но я обнаружил, что API веб-аудио работает в Chrome, но не в Safari (v.13.1 на MacOS 10.15.4)

Шаги для воспроизведения:

  1. Откройте Youtube Video в Safari
  2. Откройте консоль разработчика и вставьте следующий код
    var button = document.createElement("button");
    button.innerHTML = "Pan";
    button.style.position = "fixed"
    button.style.backgroundColor = "#0C9"
    button.style.bottom = "20px"
    button.style.right = "20px"
    button.style.fontSize = "24px"

    document.body.appendChild(button);

    let audioCtx = new (window.AudioContext || window.webkitAudioContext);
    const videoElement = document.querySelector('video');

    button.onclick = () => {
        console.log("== onclick ==")
        const source = audioCtx.createMediaElementSource(videoElement);
        var panner = audioCtx.createPanner();
        panner.panningModel = 'equalpower';
        panner.setPosition(-1, 0, 0);

        source.connect(panner);
        panner.connect(audioCtx.destination);
    };
Нажмите кнопку Pan

Он должен сдвинуть звук влево. Но в Safari это не сработало.

Действие запускается щелчком пользователя и не нарушает ограничение на перекрестное происхождение .

Я что-то пропустил?

1 Ответ

0 голосов
/ 08 мая 2020

Вкратце:

createMediaElementSource не работает с источником потоковой передачи в Safari.

Согласно этому потоку Возможно анализировать потоковое аудио из Icecast с помощью Интернета Audio API и createMediaElementSource?

Я тестировал:

  • случай 1: источник потоковой передачи с проблемой cors => отключить звук

  • случай 2: источник потоковой передачи с правильным cors => воспроизводить звук, но нет данных от узла источника.

Я также тестировал файл stati c в качестве исходного кода. Safari работает правильно.

...