Videojs requestPictureInPicture() 在滚动到顶部和底部时只工作一次

Posted

技术标签:

【中文标题】Videojs requestPictureInPicture() 在滚动到顶部和底部时只工作一次【英文标题】:Videojs requestPictureInPicture() works only once on scrolling to top and bottom 【发布时间】:2020-06-25 12:44:48 【问题描述】:

我正在使用Videojs Framework 在页面上显示视频,但 PictureInPicture 功能存在问题。我试图在用户向下滚动时自动进入 PictureInPicture 模式,并在用户向上滚动(返回到实际的视频播放器)时再次退出 PictureInPicture 模式。 我第一次向下和向上滚动时一切正常,但之后的任何尝试都失败了。 这是我的代码:https://codepen.io/madefortestonly/pen/GRJxMya?editors=1011 这是我从 catch 块中得到的错误消息:

DOMException: Failed to execute 'requestPictureInPicture' on 'htmlVideoElement': Must be handling a user gesture if there isn't already an element in Picture-in-Picture.
at Html5.requestPictureInPicture (https://vjs.zencdn.net/7.6.6/video.js:22669:23)
at Player.techGet_ (https://vjs.zencdn.net/7.6.6/video.js:26085:34)
at Player.requestPictureInPicture (https://vjs.zencdn.net/7.6.6/video.js:26787:21)
at Player.<anonymous> (pen.js:75:16)
at https://vjs.zencdn.net/7.6.6/video.js:4530:9

顺便说一句,有人似乎和我在这里遇到的问题完全相同:Why video.requestPictureInPicture() works only once? 看起来您需要单击页面进行滚动才能进行下一次尝试,因为滚动不是用户信任事件的一部分。 我尝试在向上滚动时使用 javascript 模拟点击,但到目前为止没有运气。

如何修复我的代码以在不告诉用户他/她需要单击页面上的某个位置的情况下自动来回滚动 PictureInPicture?

【问题讨论】:

【参考方案1】:

您无法解决这个问题,因为您无法伪造用户交互。与浏览器的本机 PinP 相比,另一种实现方式(例如在页面内调整播放器的大小和重新定位播放器)可能是您的用例更好的选择。

【讨论】:

以上是关于Videojs requestPictureInPicture() 在滚动到顶部和底部时只工作一次的主要内容,如果未能解决你的问题,请参考以下文章

VideoJS:不在ipad上工作

使用videojs-ima插件捆绑videojs

VideoJS:保持控件可见

结束事件videojs不起作用

使用 videojs 播放视频,视频获取失败

VideoJS 和 swfobject 嵌入问题