-1

我正在尝试编写一个脚本(用于带有 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。

4

1 回答 1

1

你根本做不到。

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

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


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

于 2020-03-04T05:16:16.703 回答