开发与产品的战争之自动播放视频

开发与产品的战争之自动播放视频

起因

产品提了个需求,对于网站上的宣传视频,进入页面就自动播放。但是基于我对chromium内核的一些浅薄了解,我当时就给拒绝了: “浏览器不允许”。(后续我们浏览器默认都是chromium内核的,其它内核的应该也是如此,只是我自己没一一验证)

但是,产品拿着一堆竞品过来:“你看看,这个行,这个也行,你们开发行不行”。

作为技术,最怕这种时刻,丢了自己的脸事小,明显这个产品打击面有点大,不能怂,先整理思路,一会甩他脸上。

下面,我们开始来了解了解视频自动播放这个需求。

使用过video标签的肯定知道,现在像下面添加autoplay字段,或者获取元素执行play()方法现在已经不起作用了。

<video id="video" src="/1.mp4" autoplay controls></video>
let el = document.getElementById('video');
el.play();

那么原因到底在哪呢?其实一个视频能否播放取决于浏览器的播放策略。

播放策略

依稀记得几年前的浏览器是可以自动播放的,后来chrome一家独大后,开始折腾了,限制自动播放视频,但是这个其实真是为用户考量。试问,你正在摸鱼,但是忘了关声音,突然播放视频并且声音…

所以呢,在2018年Chrome就提出了这种自动播放的策略,主要是为了照顾用户的体验感。

Chrome自动播放限制的考量

正如您可能已经注意到的,Web浏览器正在朝着更严格的自动播放策略发展,以改善用户体验,最大限度地减少安装广告拦截程序的动机,并减少昂贵的数据流量消耗。这些更改旨在为用户提供更大的播放控制权,并使拥有合法用例的视频发布者受益。

Chrome的自动播放政策

  • 静音自动播放总是允许的。

  • 在下列情况下允许使用声音自动播放:

    • 用户已经与域进行了交互(点击,tap等强交互)。

    • 在桌面上,用户的媒体参与指数阈值(MEI)已被越过,这意味着用户以前播放带有声音的视频。

    • 在移动设备上,用户已将该网站添加到移动设备的主屏幕或者在桌面安装了PWA。

  • 顶部框架可以将自动播放权限授予其iframe以允许自动播放声音。

媒体参与度

媒体参与度(Media Engagement)是指用户与媒体内容进行互动的程度,可以通过多个指标来衡量。这些指标主要包括观看时间、观看率、转化率、交互行为等。Chrome基于这个媒体参与度有一套自己算法,我们可以通过:chrome://media-engagement/ 查看。参与度高,就可能触发自动播放。

在这里插入图片描述

但是对于我们来说:

  1. 参与度无法更改
  2. 参与度算法在不停改动与改进

分析策略

我们可以看到,针对自动播放视频,其实chrome还是给了一些方法的。

第一条,静音时可触发自动播放。但是这个感觉就是一个GIF啊。

<video id="video" src="/1.mp4" autoplay controls  muted></video>

在这里插入图片描述

第二条,又有三种情况:

用户已经和页面产生了强交互,一般桌面端的点击,移动端的tap。鼠标移动等等都不算强交互。这其实还是违背我们自动播放的产品需求的,毕竟我都点击了,但是有时候也只能采用这个方案;

在移动设备上,将网站添加主屏幕或者安装PWA。其实这个咱们国内几乎可以忽略,有没有注意过有时有的网站上地址栏会出现一个加号,有兴趣的可以自己研究研究。因为咱们有别的大杀器,比如小程序。

我们着重看看第二条,我上面提到,产品拿着竞品来打脸,他就是因为触发了这条,才可以自动播放,但是这个对于第一次访问网站或者访问不多的人,还是有问题啊。并且这个参与度无法更改并且不是稳定不变的。

第三条,简单理解,父级如果符合了第一条第二条,那么内嵌的iframe可以继承自动播放权限,这玩意等于没说。

所以,其实到了这一步,我们就可以找产品搬扯去了,但是作为一个负责任的技术,我们还要给他一个解决方案,不能做只反驳不思考的开发者。

解决方案

有了以上的限制和了解,不点击有声音的完美的自动播放我们其实已经可以放弃了(整个弹窗广告,不关不行的那种?😄)。但是为了保命以及用户体验,我们其实经常遇到的有两个方案。

因为我们无法了解用户的媒体参与度,能不能先尝试自动播放,不能播放让用户点击播放?

答案肯定是可以的。这个解决方案简单也很常用。

<body><video id="video" src="/1.mp4"></video><button id="btn" onclick="playViedo()">播放</button><script>const btn = document.getElementById('btn');const el = document.getElementById('video');async function playViedo() {try {await el.play();btn.style.display = 'none';} catch (error) {btn.style.display = 'block';}}playViedo()</script>
</body>

在这里插入图片描述

其实我们经常浏览视频网站,发现一个现象,进去后自动播放视频了,但是莫名其妙给我页面静音了,得手动点击音量按钮。这其实就是另一种方案,因为静音可以播放,那就先静音播放,然后检测有没有声音,有的话继续播放,没有的话显示解除静音按钮,让用户去自己点击

对于声音,我们可以判断音轨是否在运行来判定,这个方案我感觉目前更好一点。

<body><video id="video" src="/1.mp4" muted></video><button id="btn" onclick="playViedo()">解除静音</button><script>const btn = document.getElementById('btn');const el = document.getElementById('video');function playViedo() {el.play();const ctx = new AudioContext();const isRunning = ctx.state == 'running';ctx.close();if (isRunning) {el.muted = false;btn.style.display = 'none';}else{btn.style.display = 'block';}}playViedo()</script>
</body>

在这里插入图片描述

尾声

好了,这下你可以理直气壮并且带着办法去找产品了。其实以上场景也只是一个简单的玩笑,以前一直只是知道这么个问题,也知道问题在哪,但是这次看到一个视频讲这些,趁着这个契机我就想着自己也将其完整的整理一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/775.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习】Vision Transformer

一、Vision Transformer Vision Transformer (ViT)将Transformer应用在了CV领域。在学习它之前&#xff0c;需要了解ResNet、LayerNorm、Multi-Head Self-Attention。 ViT的结构图如下&#xff1a; 如图所示&#xff0c;ViT主要包括Embedding、Encoder、Head三大部分。Class …

OpenHarmony鸿蒙南向开发案例:【智能燃气检测设备】

样例简介 本文档介绍了安全厨房案例中的相关智能燃气检测设备&#xff0c;本安全厨房案例利用轻量级软总线能力&#xff0c;将两块欧智通V200Z-R/BES2600开发板模拟的智能燃气检测设备和燃气告警设备组合成。当燃气数值告警时&#xff0c;无需其它操作&#xff0c;直接通知软总…

VOS3000加装登陆服务器安全防护系统有用吗

VOS3000是一款专业的软交换系统&#xff0c;它主要用于中小规模的VoIP运营业务&#xff0c;包括运营费率设定、套餐管理&#xff0c;账户管理、业终端管理、网关管理、数据查询、卡类管理、号码管理、系统管理等功能1。而关于加装登陆服务器安全防护系统是否有用&#xff0c;这…

2.4 Web容器配置:Tomcat

2.4 Web容器配置 2.4.1Tomcat配置1.常规配置2. HTTPS配置 *********** 2.4.1Tomcat配置 1.常规配置 在SpringBoot项目中&#xff0c;可以内置Tomcat、Jetly、Undertow、Netty等容器。 当开发者添加了spring-boot-starter-web依赖之后&#xff0c;默认会使用Tomcat作为Web容器…

基于Springboot+Vue的Java项目-网上点餐系统开发实战(附演示视频+源码+LW)

大家好&#xff01;我是程序员一帆&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;Java毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计 &am…

【EdgeBox-8120AI-TX2】Ubuntu18.04 + ROS_ Melodic + 星秒PAVO2单线激光 雷达评测

大家好&#xff0c;我是虎哥&#xff0c;好久不见&#xff0c;最近这断时间出现了一点变故&#xff0c;开始自己创业&#xff0c;很多事需要忙&#xff0c;所以停更了大约大半年&#xff0c;最近一切已经理顺&#xff0c;所以我还是抽空继续我之前的FLAG&#xff0c;CSDN突破十…

牛客NC314 体育课测验(一)【中等 图,BFS,拓扑排序 Java,Go、PHP】

题目 题目链接&#xff1a; https://www.nowcoder.com/practice/1a16c1b2d2674e1fb62ce8439e867f33 核心 图&#xff0c;BFS,拓扑排序&#xff0c;队列参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修…

数据库——实验9 存储过程的使用

1. 存储过程的定义 存储过程是一系列预先编辑好的、能实现特定数据操作功能的SQL 代码集&#xff0c;它与特定的数据库相关联&#xff0c;存储在SQL Server服务器上。用户可以像使用自定义的函数一样重复调用这些存储过程&#xff0c;实现它所定义的操作。 2. 存储过程的类型…

后台管理系统加水印(react)

效果 代码图片 代码 window.waterMark function (config) {var defaultConfig {content: 我是水印,fontSize: 16px,opacity: 0.3,rotate: -15,color: #ADADAD,modalId: J_waterMarkModalByXHMAndDHL,};config Object.assign({}, defaultConfig, config);var existMarkModal…

镜舟科技荣获金科创新社 2024 年度金融数据智能解决方案奖

近日&#xff0c; 镜舟科技凭借领先的金融实时数仓构建智能经营解决方案&#xff0c;在“金科创新社第六届金融数据智能优秀解决方案评选”活动中&#xff0c;成功入选“数据治理与数据平台创新优秀解决方案”榜单。 金科创新社主办的“鑫智奖”评选活动&#xff0c;旨在展示…

【解决】Caused by: javax.net.ssl.SSLHandshakeException: PKIX path building failed

问题原因&#xff1a; 在Java8及高版本以上的版本在源应用程序不信任目标应用程序的证书&#xff0c;因为在源应用程序的JVM信任库中找不到该证书或证书链。也就是目标站点启用了HTTPS 而缺少安全证书时出现的异常 解决方案&#xff1a; 我使用的是忽略证书验证 public clas…

【配电网故障定位】基于二进制矮猫鼬优化算法的配电网故障定位 33节点配电系统故障定位【Matlab代码#82】

文章目录 【获取资源请见文章第6节&#xff1a;资源获取】1. 配电网故障定位2. 二进制矮猫鼬优化算法3. 算例展示4. 部分代码展示5. 仿真结果展示6. 资源获取 【获取资源请见文章第6节&#xff1a;资源获取】 1. 配电网故障定位 配电系统故障定位&#xff0c;即在配电网络发生…

vscode微博发布案例

样例: CSS代码: * {margin: 0;padding: 0; }ul{list-style: none; }.w {width: 900px;margin: 0 auto; }.controls textarea {width: 878px;height: 100px;resize: none;border-radius: 10px;outline: none;padding-left: 20px;padding-top: 10px;font-size: 18px; }.controls…

UE4 相机围绕某点旋转

关卡&#xff08;一个相机CameraActor&#xff0c;一个Cube(名叫Target)&#xff09;&#xff1a; 关卡蓝图里的逻辑(为了大家看得清楚&#xff0c;特意连得很紧凑&#xff0c;也比较乱&#xff0c;不然一张截图放不下)&#xff1a; 只对Yaw 只Pitch: 同样对Roll: 围绕任…

汇编语言——将BX中的无符号数和有符号数以二进制、八进制、十六进制、十进制形式输出

文章目录 将BX中的无符号数以二进制形式输出将BX中的无符号数以八进制形式输出将BX中的无符号数以十六进制形式输出将BX中的无符号数以十进制形式输出将BX中的有符号数以十进制形式输出 将BX中的无符号数以二进制形式输出 利用移位指令会影响CF&#xff0c;默认dl30h(数字0)&a…

基于Springboot的社区帮扶对象管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的社区帮扶对象管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

软航H5 PDF签章产品经nginx代理之后浏览器中PDF盖章时提示:签章失败:网络错误 的问题排查及解决办法

目录 问题现象 问题排查思路 问题处理办法 附&#xff1a;软航H5 PDF签章产品介绍 软航电子签章系统 软航版式文档签批系统 问题现象 问题描述&#xff1a;在系统中集成了软航H5 PDF签章产品&#xff0c;软航H5 PDF签章产品的对应服务是通过nginx代理的&#xff0c;在奇安…

leetcode199 二叉树的右视图

题目 给定一个二叉树的 根节点 root&#xff0c;想象自己站在它的右侧&#xff0c;按照从顶部到底部的顺序&#xff0c;返回从右侧所能看到的节点值。 示例 输入: [1,2,3,null,5,null,4] 输出: [1,3,4] 解析 这道题首先能想到的办法&#xff0c;就是使用迭代法层次遍历&…

Spring Cloud+Uniapp 智慧工地云平台源码 智慧工地云平台AI视频分析应用

目录 AI应用与环境治理 设备管理与危大工程 塔吊安全监管 智慧工地APP端 智慧工地硬件设备 智慧工地主要功能模块 智慧工地可以通过以下几个方面为建筑行业赋能&#xff1a; 1.提高工程效率 2.提高工程安全性 3.提高工程质量 4.提高工程管理效率 绿色施工 质量管理…

遥感图像分割 | 基于一种类似UNet的Transformer算法实现遥感城市场景图像的语义分割_适用于卫星图像+航空图像+无人机图像

项目应用场景 面向遥感城市场景图像语义分割场景&#xff0c;项目采用类似 UNet 的 Transformer 深度学习算法来实现&#xff0c;项目适用于卫星图像、航空图像、无人机图像等。 项目效果 项目细节 > 具体参见项目 README.md (1) 安装依赖 conda create -n airs python3.8…