前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >人生想要开挂,快来学习“画中画”!

人生想要开挂,快来学习“画中画”!

作者头像
腾讯IVWEB团队
发布于 2020-06-28 06:41:30
发布于 2020-06-28 06:41:30
1.8K00
代码可运行
举报
运行总次数:0
代码可运行

之前在腾讯视频刷剧时,偶然看到有一个画中画的功能非常好用,不懂就问:什么是“画中画”?说起画中画,就不得不提起我们经常干的一件事儿,我们想在PC浏览器上看电视的同时逛淘宝、刷微博、玩知乎...... 只有你想不到的,没有我玩不顺的!奈何我们只有一块屏幕(ps: 用扩展屏的大佬打扰了),这个时候就需要一个辅助英雄——画中画,来提高我们桌面利用率并提高时间效率。

何为画中画

首先请允许我介绍下“画中画”:画中画(英文Picture-in-picture,缩写PiP)是指将一个电视节目(或其他画面)显示在整个画面上,同时将另一个或多个其他画面显示在角落中,通常只播放主窗口的声音 —— from wiki

早在1976年蒙特利尔奥运会的电视报道中就出现了近似的画中画效果,其使用Quantel数字帧存储设备在开幕式期间插入奥林匹克圣火的特写照片。

在浏览器中使用画中画

随着我们日常社交生活的丰富,我们希望在浏览器上也用到画中画的功能。

近两年,浏览器厂商开始陆续支持画中画的功能,我们先来看下浏览器中画中画的效果:

使用画中画

浏览器支持情况

下面介绍目前主流浏览器上画中画的实现状态

  • Safari - 已支持
  • Chrome - 已支持
  • Firefox - 测试阶段
  • IE - 规划阶段

详情请查看Implementation Status

Safari

早在2016年9月,Safari通过macOS Sierra中的WebKit API添加了Picture-in-Picture支持。相比chrome,safari在自带的播放控件内加入了画中画模式的按钮。

Chrome
  • 试验性功能

2017年4月,Chrome通过使用原生Android API发布Android O,可以自动在移动设备上播放画中画视频。

2018年10月,Chrome在PC 客户端69版本加入画中画的特性,但在该版本中画中画是默认关闭的,如果想开启该特性,需要在浏览器执行以下操作:

  1. 输入chrome://flags并按下回车键
  2. 在搜索框依次搜索三个关键词enable-experimental-web-platform-features(启用正在开发的实验性Web平台功能)、enable-Surfaces-for-videos(启用合成到Surface而不是视频的VideoLayer)、enable-picture-in-picture(为video开启画中画特性)并将选项值置为Enabled
  3. 重启chrome浏览器
  4. 在含有视频的页面使用鼠标右击视频区域,点击菜单栏中的「画中画」选项观看视频
  • 正式开启

到了70版本已默认开启该特性,安装chrome扩展插件可进入画中画,进入画中画后,页面选项卡会出现一个蓝色的图标,以提醒用户该页面正在播放视频。

画中画图标

支持webRTC的视频流

Chrome 71中的画中画支持播放MediaStream对象的视频(例如getUserMedia(),getDisplayMedia(),canvas.captureStream())。这意味着可以显示包含用户网络摄像头视频流的画中画窗口,即可以

显示webRTC的视频流。

FireFox

目前Firefox的画中画功能还在测试之中,需要Firefox超前测试版Nightly才能开启画中画模式,具体步骤如下:

  1. 打开about:config设置页
  2. 搜索media.videocontrols.picture-in-picture.enabled点击切换,让其置为true
  3. 重启浏览器
  4. 打开含有视频页面,开始播放视频
  5. 在视频区域鼠标右键,会出现画中画菜单
  6. 开启画中画

需要注意的是,Chrome 与 Firefox 的画中画模式略有不同,Chrome 开启画中画后,浏览器内的视频将不再播放,而 Firefox 则相当于启用了双屏播放,画中画和原标签页同步播放,而且目前的画中画功能甚至没有关闭画中画视频的选项,因此必须再次鼠标右键单击才能关闭画中画功能。


开发者如何使用画中画

对于开发者而言,让用户体验到画中画模式带来的效果是最令人兴奋的,感谢浏览器爸爸提供了相应的API供我们开发者调用。由于safari实现的时间太早,而谷歌又用自己的一套API,导致API目前尚未标准化(好消息是画中画Web API的规范 已经在WICG草案阶段中了,大体上和chrome的API规范一致,具体可猛戳此处),我将对目前已支持的浏览器(chrome和safari)分别介绍其Web API:

在chrome上运行

先来看一个示例(示例中的视频源来自腾讯):

画中画-chrome示例

我们来看上述示例中用到的属性和方法:

  • document.pictureInPictureEnabled

该属性用来判断当前文档是否支持使用画中画所示的功能。(不能理解为浏览器是否支持,因为即便浏览器支持的情况下,用户禁用画中画功能也会返回false)

  • document.pictureInPictureElement

该属性返回当前文档内存在的画中画元素对象,如果不存在返回null,否则返回video element

  • video.requestPictureInPicture()

这个API是真正去请求视频进入画中画模式的,结果会返回一个promise,在promise成功回调中拿到一个pipWindow对象,这个对象包含:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{ width, height, resize }

width和height分别是视频进入画中画窗口的宽高,resize可以监听一个事件回调,在画中画窗口发生变化时触发。

① 为何API挂载到video上而不是document上?

因为一个页面可能会存在多个video,所以需要指定触发画中画的video元素。

② 那么什么情况下API会调用失败?

  1. 系统不支持画中画
  2. 由于限制性功能策略,不允许document使用画中画。
  3. 视频元数据未加载(videoElement.readyState === 0)
  4. 视频文件只有音频
  5. video元素设置了disablePictureInPicture新属性
  6. 画中画的请求调用不是通过用户手势事件(例如按钮点击)处理的,此处需要注意像mouseovermouseentermousemovemouseleavescrollonload等事件都不算用户手势事件。
  • document.exitPictureInPicture()

当我们想主动退出画中画,可以调用这个API,其结果也会返回一个promise。

① 为何API挂载到document而不是video上?

因为目前一个页面最多仅允许一个video显示在画中画窗口上。对于开发者而言,不需要退出画中画的是哪个video,因此只需要挂载到document上就可以了。

  • onenterpictureinpicture和onleavepictureinpicture

当我们想监听video是否真正进入/退出画中画时,有时候进入/退出画中画并不是我们通过调用requestPictureInPicture/exitPictureInPicture来触发的,比如用户通过chrome插件让视频进入画中画,这个时候需要监听这两个事件,来获取一些有用的信息并进行上报之类的行为。

在safari上运行

由于safari早在2016年就原生支持了画中画,因此API和chrome是完全不一致的。在safari里我们可以把“画中画”理解为播放模式的概念,safari中的播放模式只有三种,分别是inlinepicture-in-picturefullscreen

我们先来看一个简单的示例:

画中画-safari示例

从上面示例可以看出,画中画相关属性和方法都是挂载到具体的视频元素上。

我们来看上述示例中用到的属性和方法:

  • video.webkitSupportsPresentationMode(mode)

该方法是检测video元素所支持的“演示模式”(一般理解为播放模式),这里传参mode支持三个有效值:picture-in-pictureinlinefullscreen

一般有两种方式来判断是否支持画中画。第一种就是上述示例所介绍的,第二种即:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
let supportsPiP = false;
try {
    supportsPiP = video.webkitSupportsPresentationMode('picture-in-picture');
} catch(e) {
    supportsPiP = false;
}

如果webkitSupportsPresentationMode传入无效值,会抛出error,如下所示:

输入无效值

  • video.webkitPresentationMode

这个属性值返回的其实就是上面播放模式的三个有效值之一。可以用该属性判断当前video所处的模式是否为画中画。

  • video.webkitSetPresentationMode(mode)

这个方法可以设置当前模式,当mode='picture-in-picture',就等效于chrome中的video.requestPictureInPicture()。当mode='inline',就等效于chrome中的document.exitPictureInPicture()。需要注意的是,在safari里调用此方法进入/退出画中画,都没有返回值,当然也不会报错。

  • onwebkitpresentationmodechanged

当前播放模式发生变化时可以通过这个事件监听,无论是进入/退出画中画,都会触发此事件的监听回调。需要注意的是这里不会返回画中画窗口下的对象信息(包括窗口width、height等)

无论在safari/chrome,如果画中画内播放的是实时音视频流,浏览器会在退出画中画时暂停掉视频的播放,需要在退出画中画后手动触发视频流继续播放。

polyfill兼容

根据目前画中画的支持情况,这里有一个画中画polyfill库可以兼容到chrome和safari


自动画中画

在WICG Picture-in-Picture草案中提到了自动画中画的特性:

“ 某些页面的video元素想要自动进入/退出画中画,例如,当用户在Web应用程序与其他应用tab之间来回切换时,视频Web应用程序将受益于一些自动画中画行为。但很遗憾,用户手势目前是做不到的,所以就需要Auto Picture-in-Picture了!”

我们只需要给video元素加入一个新属性autopictureinpicture

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<video autopictureinpicture></video>

这意味着不需要开发者手动调用方法来执行画中画的行为,当页面文档隐藏时,最近设置了autopictureinpicture属性的video元素就会自动进入Picture-in-Picture(如果允许画中画的话),当页面文档可见时,画中画中的视频元素会自动离开。


参考文档

让 Chrome 与 Firefox 实现系统级视频画中画效果

Picture-in-Picture

https://github.com/WICG/picture-in-picture/

https://developers.google.com/web/updates/2018/10/watch-video-using-picture-in-picture

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
JZ2440开发板直连电脑实现三者互PING
Ubuntu:资料光盘Ubuntu 9.10 连接方式:JZ2440用网线直接连接电脑 要解决的问题
韦东山
2020/09/30
2.1K0
JZ2440开发板直连电脑实现三者互PING
路由器如何无线无线桥接
在面积较大的环境(如别墅、写字间等),路由器无线覆盖范围有限,部分区域信号较弱到或存在信号盲点。无线WDS桥接功能可以扩展无线覆盖范围,实现信号增强、移动漫游的需求。
知识与交流
2022/03/29
4K0
路由器如何无线无线桥接
水星 - TPLink 路由器桥接
1,设置桥接的时候,基本上市面上的路由器只需要具有桥接(WDS)功能都可以桥接,只不过不用的品牌型号,可能设置方法麻烦一些,但现在很多路由器支持一键桥接,非常方便。类似下面这个水星路由器:
浩Coding
2019/07/03
3K0
【Linux笔记】pc机_开发板_ubuntu互ping实验
最近入手了一块百问网imx6ul开发板,一方面想系统性地学一次嵌入式Linux,争取下一份工作往这个方向混一口饭吃,另一方面也想用一用NXP的芯片。
正念君
2020/03/09
2.2K0
【Linux笔记】pc机_开发板_ubuntu互ping实验
PING问题解决方法_20190305
我们深受windows、ubuntu、开发板之间互PING问题的困扰, 特别为这个问题录了视频(https://v.qq.com/x/page/h0505eg7z0m.html) 无奈还是有很多很多同学不看视频直接发问,或者说看了视频也解决不了问题,所以我再试图用几页文档解决这个问题。 这是ping问题解决方法最新文档,遇到问题首先看这里,也希望这是最后一个文档。
韦东山
2020/09/30
2.6K0
PING问题解决方法_20190305
wds的了解
WDS是英文Wireless Distribution System的简称,中文名称是:无线分布式系统。WDS功能就是一种帮助无线基站与无线基站进行对接的一个系统,比如我们在家使用无线路由器进行无线上网的时候,因为路由器的无线信号受到墙壁或一些物体的遮挡使信号大大减少,这个时候我们可以利用路由器中的WDS功能来增强无线路由器的信号传输,让网络更加顺畅,WIFI(无线)信号通信也变得非常高速稳定。
时代疯
2021/07/21
1.9K0
i.mx287学习笔记-ubuntu虚拟机网络配置同时连接WIFI上外网和连接以太网与i.mx287开发板通信
右击WLAN(无线网络连接)图标选择属性,点击共享,按下图配置WLAN网络共享到VMnet8
Gnep@97
2023/08/10
9290
i.mx287学习笔记-ubuntu虚拟机网络配置同时连接WIFI上外网和连接以太网与i.mx287开发板通信
【黑苹果】解决linux和黑苹果下usb无线网卡兼容问题
简单的说,就是在自己的电脑上安装苹果系统(MAC OS)。但由于苹果公司的软硬件限制,导致装系统这么一个在WIN系统中平常的事情,变成很多极客爱好者的专业。比如,我们的毛老师~
Chris生命科学小站
2023/02/28
4K0
【黑苹果】解决linux和黑苹果下usb无线网卡兼容问题
stm32mp157开发板网卡接口测试
注意:既然是在开发板和电脑之间测试网络,那双方需要有网络连接。两者之间需要有一个路由器,开发板通过网线与路由器连接。而电脑与路由器之间,可以使用网线连接,也可以使用 WIFI 连接。
韦东山
2020/09/30
2.3K1
stm32mp157开发板网卡接口测试
记录一次路由器问题
  今天去领导家帮忙换路由器顺带组网,发生了戏剧性的一幕。早上刚去非常顺利的将新的路由器换上,设置好了。但是房间的信号还是很差,考虑到是三堵板墙的缘故。 想法是是将闲置的AC1200作为副路由,放在卧室。 想法很美好,现实很残酷。尝试了用2个卧室的网线口连接还是没有网络信号,初步猜测是2个房间的线路或者接口都有问题,无奈没带工具只能进一步确定是哪里的问题。
CodeWwang
2022/08/24
1K0
如何让带有华硕固件的路由器桥接到你家里客厅的路由器?
最近家里的台式机无线网卡正好坏了,家里正好有一个闲置的路由器,一条闲置的网线,网上正好有华硕的固件(好巧哦~),于是准备把客厅的路由器的Wifi信号桥接到我房间的路由器(带华硕固件),然后映射到LAN口,并发射wifi信号。
可定
2020/06/15
2.7K0
韦东山:VMWARE使用NAT方式彻底解决开发板无法挂载ubuntu文件的问题(多图)
我们写过很多ping问题的解决方法文章,但是最近我们发现之前用的桥接模式太复杂:需要开发板,Windows,ubuntu三者都ping通,步骤太多,很繁琐。最近我们研究出VMware 设置成NAT模式,然后进行端口映射,只要开发板和windows能一边ping通(比如开发板能PINGWindows或windows能PING开发板),开发板就能挂载ubuntu的文件,是怎么做到的呢?下面将系统讲解…
韦东山
2020/09/30
2.3K0
韦东山:VMWARE使用NAT方式彻底解决开发板无法挂载ubuntu文件的问题(多图)
如何让VMware虚拟机的Ubuntu16.04系统浏览网络?
先声明 本文使用的虚拟机: VMware Workstation 14 Pro 本文使用的Ubuntu : ARM裸机1期加强版配套的Ubuntu16.04
韦东山
2020/09/30
1.2K0
如何让VMware虚拟机的Ubuntu16.04系统浏览网络?
如何让虚拟机的Ubuntu上网?
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/144268.html原文链接:https://javaforall.cn
全栈程序员站长
2022/08/31
1.5K0
嵌入式Linux开发板_WIFI无线网卡驱动移植
有线就插上网线,没什么好说的;无线的话一种是将WIFI模块集成焊接在板子上,另一种是WIFI模块以USB的方式接到板子上。
韦东山
2020/09/30
8.2K0
嵌入式Linux开发板_WIFI无线网卡驱动移植
VMWARE桥接模式下路由器arp表中虚拟机mac地址与宿主机mac地址相同
折腾虚拟机的时候,发现在路由器 IP与MAC映射表 里面虚拟机的虚拟机mac地址竟然跟宿主机相同,但是之前没遇到过这个问题。 路由器为TL-WDR5620 3.0 驱动 2.5.122 VMWARE版本15 pro(15.5.1 build-15018445)
用户6948990
2025/04/03
1131
VMWARE桥接模式下路由器arp表中虚拟机mac地址与宿主机mac地址相同
中国芯-国产系统+国产处理器-迅为2K1000开发板网络快速测试方法
232 串口线连接的 usb 转串口的 usb 接口一端连接到电脑的 usb 接口上。
用户9167207
2022/05/11
7870
中国芯-国产系统+国产处理器-迅为2K1000开发板网络快速测试方法
路由器工作模式
无线路由器上一般有Router(无线路由)模式、AP(接入点)模式、Repeater(中继)模式、Bridge(桥接)模式、 Client(客户端)模式。
为为为什么
2024/05/25
3380
Windows 7笔记本创建wifi热点供手机上网教程
用智能手机的朋友会发现这样一个问题,智能手机比普通手机上网更耗流量。这是因为智能手机应用(软件)丰富,而且大部分应用都会自动联网。为此,许多人每月包了上百M的流量套餐,但用的时候还是小心翼翼,生怕流量超了手机被扣费。 今天给大家介绍下Windows 7系统笔记本创建wifi热点供手机上网的方法。通过创建wifi热点,共享笔记本的有线宽带,大部分支持wifi功能的智能手机就可以通过笔记本的共享网络畅快上网了。 工具/原料 带无线网卡、支持承载网络且系统为Win7的笔记本 有线宽带/无线宽带 步骤一、查
hbbliyong
2018/03/06
5.8K0
Windows 7笔记本创建wifi热点供手机上网教程
VM连接忘记IP的S7-200 SMART的步骤
搞工控的朋友们,电脑中要安装的软件种类多,把软件分类后安装在虚拟机中的人也大有人在。
剑指工控
2021/11/08
1.8K0
VM连接忘记IP的S7-200 SMART的步骤
推荐阅读
相关推荐
JZ2440开发板直连电脑实现三者互PING
更多 >
LV.2
这个人很懒,什么都没有留下~
目录
  • 何为画中画
  • 在浏览器中使用画中画
  • 浏览器支持情况
    • Safari
    • Chrome
    • 支持webRTC的视频流
    • FireFox
  • 开发者如何使用画中画
    • 在chrome上运行
    • 在safari上运行
    • polyfill兼容
    • 自动画中画
  • 参考文档
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档