【发布时间】:2019-10-11 11:46:22
【问题描述】:
this page 上有一个iframe 我想从video 标签中获取屏幕截图,所以我必须到达iframe 标签中的视频标签。
当我打开控制台并运行这段代码时:
const videoElement = document.getElementsByTagName('iframe')[0]
.contentWindow.document.getElementsByTagName('video')[0];
//Extracting picture from video tag
const canvas = document.createElement('canvas');
canvas.width = videoElement.videoWidth;
canvas.height = videoElement.videoHeight;
canvas.getContext('2d').drawImage(videoElement, 0, 0, canvas.width, canvas.height);
已抛出此错误:
Uncaught DOMException: Blocked a frame with origin "https://developers.google.com" from accessing a cross-origin frame.
at <anonymous>:1:57
另外,我检查了this 问题
我的问题是如何从 YouTube Player API 获取屏幕截图?
【问题讨论】:
-
您说您检查了链接到的问题,但它直接解决了您的问题 - 您不能直接与来自不同来源的 iframe 的内容进行交互。如果可以,那将破坏互联网的安全性。另外,为什么不直接使用官方 API,它可以让您获取缩略图/屏幕截图? - stackoverflow.com/a/2108248
-
我需要从特定时间截屏假设视频长度为 100 秒,我可以在第 44 秒截屏。但缩略图是静态的
-
这是有道理的,但这并不能改变您根本无法自己处理嵌入的事实(您的主要问题)。您的选择基本上是 - A) 下载视频并使用 FFMPEG 之类的东西来提取帧,B) 使用类似 puppeteer 的东西来运行无头 Chrome 并截取视频,或者 C) 使用像 @987654325 这样的 screenshot-api 服务@ 并将嵌入 URL 作为页面传递给屏幕截图。
-
选项 A 看起来很完美,除了下载视频我认为 vlc 可以从网络流播放 youtube 视频,如果我可以从命令行使用 url 参数时间参数打开 vlc,它可以动态生成缩略图:videosolo.com/tutorials/download-video-with-vlc.html
-
@Joshua T 你能看看这个问题吗:askubuntu.com/questions/796575/… 我的意思是 vlc 可以打开 youtube 连接如果我可以用 vlc 将帧提取为图像,那就太好了。
标签: javascript iframe youtube-api youtube-javascript-api youtube-iframe-api