HTML5 video视频播放Picture-in-Picture画中画技术

一、下面播报一则新闻

Chrome 70已经原生支持HTML5 <video>播放时候Picture-in-Picture,也就是俗称的画中画技术,也就是很多视频网站看评论时候,播放视频变小挂在右下角的这种交互技术。
画中画视频播放兼容性
我一瞅自己的Chrome浏览器,正好就是Chrome 70,体验了一番,挺有意思的,值得介绍下,以后估计用得着。

二、先看画中画实例demo

请确保您的浏览器支持画中画,然后可以狠狠地点击这里:Video视频画中画效果demo

点击页面的切换按钮,或者右键视频→画中画,都可以进入视频画中画模式:
在这里插入图片描述
点击按钮示意
在这里插入图片描述
右键视频 画中画示意

在页面右下角可以看到一个小视频,尺寸小小的视频:
在这里插入图片描述
浏览器右下角有视频播放界面

实际上,此时的这个小视频是个脱离于浏览器定位的,顶级的播放窗口,我们把浏览器最小化,此视频依然会在右下角播放,就像腾讯视频客户端播放器的精简模式一样:
在这里插入图片描述
显示在桌面窗体上

于是,我们可以一边码代码,一边看网页视频了。

三、画中画几个API简介

画中画看上去很酷,总感觉API也会很复杂,实际上,除了名称长了点,超简单的。

假设变量video就是我们的<video>视频元素,则,进入画中画模式,直接一句:

// 进入画中画
video.requestPictureInPicture();

退出画中画模式,也是一句:

// 退出画中画
document.exitPictureInPicture();

为了方便我们监听视频的播放状态,还提供了2个事件API接口,如下:

// 进入画中画模式时候执行
video.addEventListener('enterpictureinpicture', function() {
  // 已进入画中画模式
});

// 退出画中画模式时候执行
video.addEventListener('leavepictureinpicture', function() {
  // 已退出画中画模式
});

最后,还提供了一个PictureInPictureWindow对象,也就是画中画窗口对象,包含width,heightonresize这些属性,示意如下:

{
  height: 192,
  onresize: null,
  width: 341
}

width,height表示小窗口现在的高度和宽度,onresize属性值是个Function,可以监听小窗口尺寸的改变。PictureInPictureWindow对象的获取在画中画响应事件的event对象中,例如:

video.addEventListener('enterpictureinpicture', function(event) {
  var pipWindow = event.pictureInPictureWindow;
  // pipWindow就是一个PictureInPictureWindow对象
  // 我们可以绑定resize事件
  pipWindow.addEventListener('resize', function () {
    // pipWindow.width就是小视频窗口的宽度
    // pipWindow.height就是小视频窗口的高度
  });
});

以上,基本上就是HTML video Picture-in-Picture画中画技术全部API了,两个方法(进入和退出),两个事件(进入和退出)以及一个对象(画中画窗体对象)。

这点程度的学习相信大家一定都毫无压力。

四、最后再说点啥

当视频进入画中画模式的时候,浏览器的标签页上会出现一个方框框小标志,同时title提示也会发生变化,如下截图:
在这里插入图片描述
画中画模式下的标签页选项卡

当进入画中画模式的时候,原视频会停止播放、置灰,并提示已进入画中画模式:
在这里插入图片描述
画中画时候原视频UI

如果对完整的交互实现感兴趣,可以参见demo页面底部的JS源代码。

其他资源:

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
videojs是一个流行的HTML5视频播放器库,它提供了丰富的功能和API来控制视频播放。要在videojs中实现视频画中画效果,可以使用以下步骤: 1. 首先,确保你已经引入了videojs库,并创建了一个video标签来嵌入你的视频。 2. 在videojs的初始化代码中,添加一个自定义的按钮来触发画中画效果。你可以使用videojs的`controlBar`选项来添加自定义按钮。 3. 在按钮的点击事件处理程序中,调用`requestPictureInPicture()`方法来进入画中画模式。这个方法会将当前的视频播放器切换到画中画模式,并在屏幕的一个角落显示一个小的视频播放器。 4. 如果需要退出画中画模式,可以调用`exitPictureInPicture()`方法。 下面是一个示例代码,演示了如何在videojs中实现视频画中画效果: ```javascript // 引入videojs库 <script src="https://vjs.zencdn.net/7.11.4/video.js"></script> // 创建video标签 <video id="my-video" class="video-js" controls preload="auto" width="640" height="264"> <source src="my-video.mp4" type="video/mp4"> </video> // 初始化videojs <script> var player = videojs('my-video'); // 添加自定义按钮 player.controlBar.addChild('button', { text: '画中画', className: 'vjs-picture-in-picture-button', onClick: function() { // 进入画中画模式 player.requestPictureInPicture(); } }); // 退出画中画模式的按钮 player.controlBar.addChild('button', { text: '退出画中画', className: 'vjs-exit-picture-in-picture-button', onClick: function() { // 退出画中画模式 document.exitPictureInPicture(); } }); </script> ``` 请注意,画中画功能在不同的浏览器中的支持程度可能有所不同。在使用之前,请确保你的浏览器支持该功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值