繁体   English   中英

JS 从视频元素(不是来自网络摄像头/麦克风等)捕获音频,因为视频 src 是外部的,因此出现 CORS 错误

[英]JS Capturing audio from a video element (Not from webcam/mic etc) Getting CORS error since video src is external

我正在尝试编写一个脚本(用于带有 tampermonkey 的浏览器扩展),它将使用视频播放器功能来寻找时间戳,然后在从该时间戳捕获音频的同时播放视频。

视频元素源是外部的,因此当我尝试设置流时,我收到 CORS 错误,例如:

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

我尝试了在别处发布的关于从视频源https://stackoverflow.com/a/57088960/10326441获取可读流的解决方案。 但是我不明白如何从中获取捕获流,它仍然导致下面显示的第一个错误。 示例错误:

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

我的问题是:有没有一种简单的方法可以从视频播放器中获取音频流? 当我点击我的按钮时,它会正确搜索并播放视频,我只是在努力从中获取音频流,以便我可以将其转换为可以下载到磁盘的 blob。

你根本做不到。

为了能够在磁盘上保存此资源的修改版本,您需要操作该资源。
为了能够操作该资源,您需要阅读其内容。
为了能够读取外部资源的内容,您需要满足同源策略。

如果您无法以同源方式或通过 CORS 获取资源,那么您将无法读取它,因此无法操作,因此无法将其修改版本保存在磁盘上。


如果它仅用于显示,那么您可以简单地使用 <audio> 元素,但这不会启用仅保存视频中的音频流之类的功能,甚至无法从浏览器内置的“另存为”上下文菜单中保存。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM