我想使用 JavaScript 在 Youtube 视频上启用 PiP。我可以在 html 上这样做,<video>
但在 Youtube 上似乎不可能这样做<iframe>
。有人对此有任何领导吗?
4 回答
用户可能可以右键单击两次(以调出 html5 菜单)并选择画中画,但由于 iframe 的来源策略相同,似乎无法从 iframe 外部以编程方式触发它。我不认为&origin=
iframe URL 中的参数实际上会更改从 youtube 发送的标头,它似乎在我的测试中不起作用。
SecurityError:阻止具有源的框架访问跨域框架
youtube iframe api通过使用 postMessage解决了这个问题,但是目前没有任何消息可以执行video.requestPictureInPicture()
。在播放器 base.js 脚本中似乎定义了一个togglePictureInPicture
函数,但这似乎没有通过消息传递 API 公开
我总是在 youtube 页面上使用控制台中的下一行:
document.getElementsByTagName('video');
这将显示一个 HTML 集合,打开它并右键单击集合的第一个位置,将其存储为全局变量,这将生成类似temp1
. 然后你必须写下一行:
temp1.requestPictureInPicture();
就是这样。
您不能使用 Youtube 的 iframe 嵌入以编程方式启用 PiP。唯一的选择是直接将 URL 获取到 Google 的流媒体服务器或自己流式传输视频数据。无论哪种方式,您都需要将流 URL 设置为视频元素的 src,然后调用video.requestPictureInPicture()
视频。
https://r4---sn-4g5ednls.googlevideo.com/videoplayback?expire=1627319351&ei=15...
这就是 google 托管的视频的流 URL 的样子。一个名叫Levi的人编写了一个库来检索给定 Youtube 视频的这个 URL。但是该库向他的代理服务器 yt2html.com 发出请求以检索此 URL。
我在这篇博文中更详细地介绍了 YT PiP 的问题。
这是开发人员的一个测试用例:https ://beaufortfrancois.github.io/sandbox/media/iframe-video.html with PiP
文档中有很多示例:
阅读有关该主题的更多信息:https
://developers.google.com/youtube/iframe_api_reference和 PiP-Api:
画中画 Web API 规范:https ://wicg.github.io/picture-in-picture ,https://levelup.gitconnected.com/pip-videos-in-a-floating-window-452e775555fe?gi=21f55e7bf6fa