首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复制YouTube iframe嵌入视频播放

复制YouTube iframe嵌入视频播放
EN

Stack Overflow用户
提问于 2021-01-19 07:19:10
回答 2查看 2.7K关注 0票数 2

我使用react-youtube (本质上是YouTube iframe embed API)来渲染我的web应用程序中的视频播放器。

我的web应用程序使用window.open()在加载时打开一个弹出窗口。它是同源的,所以两个窗口都可以通过代码进行交互,我可以操作弹出的DOM。

我想将原始视频(视频A)从基础web应用程序播放器克隆到一个单独的<video>元素,位于弹出窗口(视频B)中,以便它将对应于原始视频播放器中的所有用户操作(播放、暂停、查找、更改质量等)。

我知道这可以通过复制整个播放器并使用onPlayonPause和其他回调在第二个播放器中触发相同的操作来完成-但对我来说,理想的解决方案是克隆视频输出本身。

显然,用画布进行克隆并不是一个好的解决方案。

我还尝试使用player.getIframe(),并使用iframe.contentWindow.document.getElementsByClassName("video-stream html5-main-video")连接到<video>元素,

(然后捕获它的流),但随后我得到:

SecurityError: Blocked a frame with origin "http://localhost:3000" from accessing a cross-origin frame

有什么办法可以做到吗?

EN

回答 2

Stack Overflow用户

发布于 2021-01-28 04:45:25

您应该尝试captureStream() -它从一个<video>元素捕获MediaStream,因此您可以将其设置为另一个<video>元素的srcObject。

查看此demoarticle

票数 1
EN

Stack Overflow用户

发布于 2021-01-28 04:49:50

为此,您可以使用本地存储。

代码语言:javascript
复制
/* First create a click event to save the command to local storage */
$(".test-btn").click(function() {
  let action = $(this).data("action");
  localStorage.setItem('vid_state', action);
});


/* on the other window listen for the change in storage */
$(window).on('storage', function(e) {
  let storageEvent = e.originalEvent;
  if (storageEvent.key == 'vid_state') {
    let action = localStorage.getItem('vid_state');
    console.log(action);
    $("#vid").html(action);
  }
});
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<button class="test-btn" data-action="play">play</button>
<button class="test-btn" data-action="stop">stop</button>

<div id="vid">Current Play State</div>

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65783418

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档