微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 CORS 代理从嵌入的 YouTube 视频中截取屏幕截图的问题

如何解决使用 CORS 代理从嵌入的 YouTube 视频中截取屏幕截图的问题

我有一个在 iframe 中嵌入了 youtube 视频的网站。我想要实现的是让用户从视频中截取屏幕截图。我知道这是不可能的,因为 iframe,所以我试图找到一种方法将它加载到视频标签中。我通过使用 youtube-dl --get-url 命令获取视频的直接链接来做到这一点。然后我使用画布截取了屏幕截图,但是在尝试将其另存为图像时,我遇到了一个 cors 问题,试图用 cors 代理解决它。下面你可以看到我到现在为止所做的。

我在做

youtube-dl.exe --youtube-skip-dash-manifest -g "https://www.youtube.com/watch?v=sVPYIRF9RCQ&ab_channel=AndyMatthewsAndyMatthews"

获取视频的直接链接

结果:

https://r4---sn-4vguioxu-5ui6.googlevideo.com/videoplayback?expire=1623705253&ei=RXLHYKHILpqJ6dsPibuWqAk&ip=46.246.235.105&id=o-AFblFVsQOZ9iGvOmswv01H9c5K9EgPmwnQhLcazJjtNA&itag=137&aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&source=youtube&requiressl=yes&mh=6p&mm=31%2C29&mn=sn-4vguioxu-5ui6%2Csn-4g5edns7&ms=au%2Crdu&mv=m&mvi=4&pl=21&initcwndbps=643750&vprv=1&mime=video%2Fmp4&ns=_Qxaf9MVRRte_IA3zASupsUF&gir=yes&clen=20144050&dur=81.164&lmt=1606516531202697&mt=1623682853&fvip=4&keepalive=yes&fexp=24001373%2C24007246&c=WEB&txp=5432432&n=gdJX2QLyx7AIVJo21S-&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAIfncBiAbKNx_L81swFvTjRKFM-A6dd03OVkJRHMz9JKAiEAhLm7viW6ivpoPWiFZ6ZiS-PH-nYYClU6sqz97hTKBis%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIgaqK1EfsLf3kJVBvtfrAkk5UzqHCR-1TczhLStJPsFxsCIQCyuJ6vYiJiqUQoAJs0c_FsSHJZBOEVgUVZltkbYoDGHQ%3D%3D

然后可以将此 URL 添加到 HTML video-tag 并且它起作用。 然后我将视频绘制到画布元素中以截取屏幕截图。

直到这里一切都按预期工作。

现在我正在尝试将画布保存为图像

var canvas = document.getElementById("canvasPostcard");
var dataURL = canvas.toDataURL("image/png");

但是有一个cors问题。 我在视频标签添加了 crossorigin="anonymous" 但视频根本不播放。

然后我使用了cors代理服务器来绕过这个问题。 我在 cloudflare 的一个工人中创建并像这样在本地运行它

http://127.0.0.1:8787/?url=https://r4---sn-4vguioxu-5ui6.googlevideo.com/videoplayback?expire=1623705253&ei=RXLHYKHILpqJ6dsPibuWqAk&ip=46.246.235.105&id=o-AFblFVsQOZ9iGvOmswv01H9c5K9EgPmwnQhLcazJjtNA&itag=137&aitags=133%2C134%2C135%2C136%2C137%2C160%2C242%2C243%2C244%2C247%2C248%2C278%2C394%2C395%2C396%2C397%2C398%2C399&source=youtube&requiressl=yes&mh=6p&mm=31%2C29&mn=sn-4vguioxu-5ui6%2Csn-4g5edns7&ms=au%2Crdu&mv=m&mvi=4&pl=21&initcwndbps=643750&vprv=1&mime=video%2Fmp4&ns=_Qxaf9MVRRte_IA3zASupsUF&gir=yes&clen=20144050&dur=81.164&lmt=1606516531202697&mt=1623682853&fvip=4&keepalive=yes&fexp=24001373%2C24007246&c=WEB&txp=5432432&n=gdJX2QLyx7AIVJo21S-&sparams=expire%2Cei%2Cip%2Cid%2Caitags%2Csource%2Crequiressl%2Cvprv%2Cmime%2Cns%2Cgir%2Cclen%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAIfncBiAbKNx_L81swFvTjRKFM-A6dd03OVkJRHMz9JKAiEAhLm7viW6ivpoPWiFZ6ZiS-PH-nYYClU6sqz97hTKBis%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl%2Cinitcwndbps&lsig=AG3C_xAwRQIgaqK1EfsLf3kJVBvtfrAkk5UzqHCR-1TczhLStJPsFxsCIQCyuJ6vYiJiqUQoAJs0c_FsSHJZBOEVgUVZltkbYoDGHQ%3D%3D

但是我加载资源失败:服务器响应状态为 403 ()

如果我使用另一个 URL,例如 http://127.0.0.1:8787/?url=https://in.gr 它可以正常工作。

你知道这里的问题是什么吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。