JS Захват звука с видеоэлемента (не с веб-камеры / mi c et c) Получение ошибки CORS, так как видео sr c является внешним - PullRequest
0 голосов
/ 04 марта 2020

Я пытаюсь написать скрипт (для расширения браузера с tampermonkey), который будет использовать функции видеопроигрывателей для поиска метки времени, а затем воспроизводить видео во время захвата звука из этой метки времени.

Источник видеоэлемента является внешним, поэтому, когда я пытаюсь настроить поток, я получаю ошибки CORS, например:

let video = document.getElementById("video-player");
let stream = video.captureStream();

Я попробовал опубликованное в другом месте решение о получении читаемого потока из видео источник { ссылка }. Однако я не понял, как получить поток захвата из этого, и это все еще привело к первой ошибке, показанной ниже. Примеры ошибок:

Access to fetch at 'https://***.googleusercontent.com/***' from origin 'https://******.com' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: Redirect is not allowed for a preflight request.
Uncaught DOMException: Failed to execute 'captureStream' on 'HTMLMediaElement': Cannot capture from element with cross-origin data

Мой вопрос: есть ли простой способ получить аудиопоток из видео-плеера? Когда я нажимаю кнопку, она корректно ищет и воспроизводит видео, я просто пытаюсь получить из него аудиопоток, чтобы затем преобразовать его в большой двоичный объект, который я могу загрузить на диск.

1 Ответ

1 голос
/ 04 марта 2020

Вы просто не можете.

Чтобы иметь возможность сохранить на диске измененную версию этого ресурса, вам нужно будет манипулировать этим ресурсом.
Чтобы иметь возможность манипулировать этим ресурсом, вам необходимо прочитать его содержимое.
Чтобы иметь возможность читать содержимое внешних ресурсов, вам необходимо соответствовать политике того же происхождения.

Если вы не можете извлечь ресурс как того же источника или через CORS, то вы не можете прочитать его, и, следовательно, не можете манипулировать им и, следовательно, не можете сохранить на диске его модифицированную версию.


Если бы это было только для отображения, то вы могли бы просто использовать элемент , но это не позволило бы ничего, кроме сохранения только аудиопотока из вашего видео, даже не из встроенных браузеров. ins "save-as" контекстное меню.

...