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



我正在尝试编写一个脚本(用于带有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>元素,但这并不能实现任何功能,比如只保存视频中的音频流,甚至不能从内置的浏览器"另存为"上下文菜单中保存。

最新更新