提问人:Saroshi Kir 提问时间:2/21/2022 更新时间:11/18/2023 访问量:1475
如何捕获和流式传输 iframe 的视频?
How can I capture and stream video of an iframe?
问:
在一个网站上,我有一个加载我的游戏(来自另一个域)的 iframe,我想捕获并流式传输它。我怎样才能做到这一点?当用户与此 iframe 交互时,仅显示此 iframe 的内容,而不是整个屏幕或页面。
这是我尝试过的:
从 Chromium/Mozilla 浏览器 API 使用,
添加到 HTTP 标头和属性是我认为可以解决问题的方法,但发生的事情是它只允许您使用屏幕捕获 API,它似乎不支持将 iframe 内容捕获为视频。getDisplayMedia()
feature-policy:
allow
其次,我尝试使用iframe,但是当我调用iframe时没有显示。allow='displaycapture'
getDisplayUserMedia()
我最后一次绝望的尝试是一个浏览器扩展程序,它可以以某种方式将 iframe 内容捕获为视频流,但这似乎很困难,因为它不像 iframe 屏幕输出在 chromium 引擎深处的某个地方作为二进制文件进行流式传输。
答:
出于安全原因,无法记录来自第三方来源的嵌入页面。您需要将其放在同一域下,在这种情况下,您可以使用或添加 HTTP 标头 。除此之外,你不走运。<iframe allow='displaycapture'/>
Permissions-Policy: display-capture=(self)
评论
getDisplayMedia()
preferCurrentTab
选项来帮助指导用户。不幸的是,没有办法直接选择要在代码中共享的窗口,用户必须自己完成。getDisplayMedia()
您可以使用 JavaScript 和 HTML5 视频 API 捕获和流式传输 iframe 的视频。以下是如何实现此目的的基本概述:
- 首先,识别 HTML 中的 iframe:
<iframe id="myIframe" src="url_to_your_video" width="560" height="315"></iframe>
- 使用 JavaScript,您可以访问 iframe 的内容并捕获其中的视频元素:
// Access the iframe
var iframe = document.getElementById('myIframe');
// Access the document within the iframe
var innerDoc = (iframe.contentDocument) ? iframe.contentDocument : iframe.contentWindow.document;
// Access the video element within the iframe's document
var videoElement = innerDoc.getElementById('videoId'); // Replace 'videoId' with the actual ID of your video element
- 访问视频元素后,可以使用 HTML5 视频 API 对其进行流式传输:
// Create a new video element on the main page to stream the captured video
var streamingVideo = document.createElement('video');
document.body.appendChild(streamingVideo);
// Set the source of the streaming video to be same as captured from iframe
streamingVideo.src = videoElement.src;
streamingVideo.play();
此代码将使用 JavaScript 和 HTML5 API 有效地从 iframe 捕获和流式传输视频。
评论
viewportOffsetX
await navigator.mediaDevices.getSupportedConstraints()
getDisplayMedia()