我想使用JavaScript在Youtube视频上启用PiP。我可以在html<video>
s上这样做,但在Youtube<iframe>
s上似乎不可能这样做。有人在这方面有线索吗?
用户可以右键单击两次(调出html5菜单(并选择画中画,但由于iframe的同源策略,似乎不可能从iframe外部以编程方式触发它。我不认为iframe URL中的&origin=
参数实际上会更改从youtube发送的头,它在我的测试中似乎不起作用。SecurityError:阻止具有原点的帧访问跨原点帧
youtube iframe api通过使用postMessage绕过了这一点,但目前还没有实现执行video.requestPictureInPicture()
的消息。在播放器base.js脚本中似乎定义了一个togglePictureInPicture
函数,但这似乎并没有通过传递API 的消息来公开
我总是在控制台的youtube页面上使用下一行:
document.getElementsByTagName('video');
这将显示一个HTML集合,打开它并右键单击集合的第一个位置,将其存储为全局变量,这将生成类似temp1
的内容。然后你必须写下一行:
temp1.requestPictureInPicture();
就是这样。
您不能使用Youtube的iframe嵌入程序启用PiP。唯一的选择是直接将URL发送到谷歌的流媒体服务器,或者自己流式传输视频数据。无论哪种方式,您都需要一个流URL来设置为视频元素的src,然后在视频上调用video.requestPictureInPicture()
。
https://r4---sn-4g5ednls.googlevideo.com/videoplayback?expire=1627319351&ei=15...
这就是谷歌托管视频的流URL的样子。一个叫Levi的家伙写了一个库来检索给定Youtube视频的URL。但是库向他的代理服务器yt2html.com发出请求,以便检索此URL。
我在这篇博客文章中详细介绍了YT PiP的问题。
以下是来自开发人员的测试用例:https://beaufortfrancois.github.io/sandbox/media/iframe-video.html带有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