Video.js 在播放时进入全屏

Posted

技术标签:

【中文标题】Video.js 在播放时进入全屏【英文标题】:Video.js enter fullscreen on play 【发布时间】:2013-06-13 04:23:00 【问题描述】:

我已经搜索了很长时间,但仍然没有找到有效的解决方案来解决我的问题。我似乎无法让视频播放器进入全屏模式。 API 确实有很多示例,但似乎没有一个有效。

我目前正在处理的页面中包含的 jQuery 版本是 1.8.2。另外,我正在使用 parallax-1.1.js 和它正常工作所需的库,因此这也可能是一个问题。

我工作的客户希望网站具有响应式设计,播放器能够在单击“播放”按钮时直接进入全屏 .此功能应该在桌面和移动/平板电脑浏览器上都可用。在视频页面上,应该有 3 个视频播放器,每个播放器都有唯一的 ID,并且它们还有一个通用的 CSS 类。

我尝试过的一些代码效果不佳。这是一个示例 JS 代码 sn-p 控制视频 html 标记之一。

示例:

player1 = _V_('video-1');

player1.on("play",
    function () 
        this.requestFullScreen();
);

player1.on("ended",
    function () 
        this.cancelFullScreen();
);

代码产生这个错误:

Uncaught TypeError: Object [object Object] has no method 'requestFullScreen'

我正在使用最新版本的 Google Chrome。

【问题讨论】:

您知道您使用的是哪个版本的 video.js 吗?你能分享一个工作代码的链接吗? 是的,它是 4.0.4 版本。我无法分享有关该网站的任何信息,因为它正在开发中……抱歉,这是保密的。 【参考方案1】:

这里有两个问题需要解决。

首先,您不能在“播放”事件处理程序中全屏显示。为了安全和良好的用户体验,浏览器只会让您在用户触发的事件中触发全屏,例如“点击”。您不能让每个网页在访问后立即全屏显示,并且您可以使视频自动开始播放,这将违反该规则。因此,您需要将其移至实际播放按钮上的“点击”处理程序。

第二个问题是 Video.js 4.0.x 的一个大问题,就是 minified 使用 Google Closure Compiler 和 Advanced Optimizations。如此多的公共属性和方法被混淆了,使得它们难以/不可能使用。在这种情况下,requestFullScreen 现在是 player1.Pa()。而且,据我所知,cancelFullScreen 根本不存在。

以下是一些处理方法:

    使用经过混淆的方法名称。我不建议这样做,因为 a) 名称会随着每次次要版本升级(例如 4.0.5)而改变 b) 它会使你的代码不可读,c) 你不能使用 cancelFullScreen

    获取未压缩的 video.js 副本并自行托管。 (您可以使用 Uglify 或其他不会与方法名称混淆的压缩程序。) Video.js 不提供此文件,因此您必须克隆 git 存储库并自己运行构建脚本。而且你并没有获得免费使用 video.js 的 CDN 的优势。

    使用 video.js 的 older version 并等待 4.x 准备好进入黄金时段。

    根本不要使用 video.js。考虑jPlayer 和jwPlayer 或自己动手。

我推荐 2 或 3 个。

更新:看起来这个特定的问题是fixed,但它还没有发布。

【讨论】:

非常感谢。我会调查一下。需要测试一下。 你好。你的建议很有帮助。在“玩”了一段时间 video.js 之后,我决定用 jPlayer 来改变它。从此头疼不已。正如你所说,最大的问题是它的方法的混淆。再次感谢您的帮助。【参考方案2】:

我个人使用了触发播放和全屏的自定义链接。

<a class="enter-fullscreen" href="#">Play fullscreen</a>

还有js部分:

<script type="text/javascript">

    $('.enter-fullscreen').click(function(e) 
        e.preventDefault();
        $('.vjs-play-control').click();
        $('.vjs-fullscreen-control').click();
    );

</script>

这是可以改进的,但很简单,并且可以完成工作。

【讨论】:

【参考方案3】:

解决问题的一种简单方法:

document.querySelector('.vjs-big-play-button').addEventListener('click', player.requestFullscreen)

视频全屏显示,播放按钮的常规事件导致视频开始播放。

【讨论】:

双击播放器也带来全屏。使用此解决方案不会触发。【参考方案4】:

在 video.js 文件中转到这一行

BigPlayButton.prototype.handleClick = function handleClick(event) 

        var playPromise = this.player_.play();

并添加

BigPlayButton.prototype.handleClick = function handleClick(event)

        var playPromise = this.player_.play();
        document.getElementsByClassName('vjs-fullscreen-control')[0].click()
        // exit early if clicked via the mouse
        if (this.mouseused_ && event.clientX && event.clientY) 
            silencePromise(playPromise);
            return;
        

【讨论】:

以上是关于Video.js 在播放时进入全屏的主要内容,如果未能解决你的问题,请参考以下文章

video.js 视频截图录制自定义全屏,hlsflvmp4视频播放

video.js全屏bug&隐藏/添加全屏按钮

如何在视频播放器之外显示 video.js 控件

video.js

Video.js - 阻止点击播放功能

将标题覆盖添加到 Video.js 播放器