Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >网页背景H5视频自动播放---PC端、移动端兼容问题完美解决方案(IOS、安卓、微信端)

网页背景H5视频自动播放---PC端、移动端兼容问题完美解决方案(IOS、安卓、微信端)

作者头像
Tz一号
发布于 2020-09-10 08:13:16
发布于 2020-09-10 08:13:16
3.9K01
代码可运行
举报
文章被收录于专栏:Tz一号Tz一号
运行总次数:1
代码可运行

最近公司官网需要使用视频当做banner背景且自动播放,并且因为是官网需要做到PC端和移动端都可以适配兼容,这些问题很是头疼;

兵来将挡,水来土掩,进过查阅相关技术资料,现已完美兼容PC端和移动端。下面就为大家详细讲解:

PC端:

PC端相应简单些,浏览器对<video>标签的兼容还是很好的,但是想要在浏览器中当做Banner视频自动播放就必须设置这些属性来更好地实现;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<video
// 设置后,音频会初始化为静音,注意浏览器只有设置静音,才能自动播放
 muted
// 视频会马上自动开始播放,不会停下来等着数据载入结束。
autoplay="autoplay"
// 布尔属性;指定后,会在视频结尾的地方,自动返回视频开始的地方
 loop="loop"
// 一个布尔属性,标志视频将被“inline”播放,即在元素的播放区域内。
x5-playsinline="true"
playsinline="true"
webkit-playsinline="true"
// 一个布尔属性,用于禁用使用有线连接的设备(HDMI、DVI等)的远程播放功能。
x-webkit-airplay="allow"
// 这个视频优先加载
preload="auto"
// 启用同层H5播放器,就是在视频全屏的时候,div可以呈现在视频层上,也是WeChat安卓版特有的属性。同层播放别名也叫做沉浸式播放
x5-video-player-type="h5"
// :全屏设置。它又两个属性值,ture和false,true支持全屏播放
x5-video-player-fullscreen="true"
>
// <source> 标签为媒介元素(比如 <video> 和 <audio>)定义媒介资源。
<source src="indexMove.mp4" type="video/mp4">
</video>

同上面方法设置后,PC网页就可以实现自动播放了。Demo地址(码云):https://gitee.com/tzlibai/video-demo.git

移动端:

移动对于<video>标签极度不友好,以上面PC的设置在微信客户端中无法实现自动播放,在Safari、 谷歌浏览器、QQ浏览器均有各类奇葩问题无法实现完美效果;

视频的实现的局限:

  1. iOS下不能自动播放,需要至少touch一次屏幕,这个有时候还挺烦人的,例如我们想做一个H5 app闪屏的时候就蛋疼了。
  2. 不能在中间穿插棒棒的交互效果,例如,需要视频某一帧暂停,鼠标hover或者touch的时候,当前画面有交互效果,就很不好处理。
  3. 播放的速率不能随心所欲控制,视频完成也就定死了。
  4. 如果有些信息是动态的,需要与用户信息关联,则视频方案也会面临很大的调整,因为总不可能每一个用户生成一个不一样的视频,需要辅助额外手段满足需求(例如CSS覆盖定位)。

此时又当如何处理呢?

我们可以使用序列图片,通过JS脚本,来模拟视频播放效果,以上所有局限将通通可以规避。

序列图片视频化技术高性能实现方法:

实现原理如下:

  1. 图片DOM对象预加载,放在内存中;
  2. 播放开始,页面append当前图片DOM,同时移除上一帧DOM图片(如果有),保证页面中仅有一个图片序列元素;

对,很简单,没什么高超的技巧,但就是这种实现策略,对页面的开销是最小的,最终运行体验是最好的。

眼见为实,您可以狠狠地点击这里:序列图片实现视频播放效果demo

效果之流畅,体验之良好,十有八九都会认为是视频,其实不是,就是图片,不断的图片DOM增删实现的类似视频效果。

核心JS代码如下(完整代码见demo),假设container容器元素,我们的图片已经预加载到store对象中,结构如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var store = {
    length: 47,
    1: img1,
    2: img2,
    ...
    47: img47    
};
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var index = 1;
container.innerHTML = '';
// 依次append图片对象
var step = function () {
    if (store[index - 1]) {
        container.removeChild(store[index - 1]);
    }    
    container.appendChild(store[index]);
    // 序列增加
    index++;
    // 如果不超过最大限制,播放下一帧
    if (index <= 47) {
        // 42是按照每秒24帧计算的值
        setTimeout(step, 42);
    }
};
step();

container.removeChild(store[index - 1])移除之前一帧图片DOM,container.append(store[index])则是插入当前一帧DOM,人的肉眼习惯连续性感知事物,因此,这种删除和添加,用户是无感知的,于是一个流程的播放效果即达成,根据实践,就算每帧图片在几百K大小主流设备也能hold住。

由于本质上播放的是DOM对象,因此,我们不仅可以播放图片DOM,还可以是有着丰富HTML结构的<div>元素,于是,什么样的交互实现都不在话下,比方说视频中要出现用户的姓名,怎么办,很简单啊,<div>元素中定位下就好了。

现在,技术实现已经对设计没有任何限制啦,剩下的就是产品和设计的创意,下一个爆款H5就是你了!

番外技能:如何把视频变成序列图片?

1、电脑打开premiere cc 2017,导入视频编辑好。

2、编辑好视频后,按导出快捷键Ctrl+M调出导出页面,然后格式选择JPEG格式。

3、点击输出名称选择保存路径。

4、设置好格式和保存路径后,点击底部的导出,等待图片的导出就可以了。

关于性能其他需要注意的

人眼的跟踪能力要比大猩猩之类要弱的,因此,实际开发,并不一定需要每秒24帧的播放速率,你每秒18帧,对于一个H5运营活动而言,用户是无感知的。每秒18帧的播放可以节约不少请求和加载数据量,性能上也能有所提高,权衡来看,是推荐的,毕竟我们不是去参加动画比赛,是一个在线的web产品。

设计师喜欢使用非常高清的图片,实际上,没有必要,注意度,2倍尺寸,30%~40%的图片质量足够了,效果也非常好,这也是经过实践的,大家如果和设计师意见不一致,就可以让她看我写的这段话。有效降低不必要的图片尺寸,可以大大节约内存的开销,也是可以提高播放的性能和品质的。

于是,三管齐下:高性能技术实现策略,适当降低帧率,优化图片尺寸,必定助你H5炫酷效果流畅至极,好评如潮,boss交口称赞!

本文序列化图片视频方案参考链接:https://www.zhangxinxu.com/wordpress/2018/05/image-sequence-html5-video-play/

如果大家有任何疑问即可留言反馈,会在第一时间回复反馈,谢谢大家!

本人使用GSAP框架搭建的个人网站也上线啦!有兴趣可以访问 zhaohongcheng.com 查看,感谢~

本人uni-app影视项目已经重磅开源,一套代码套发布到H5、APP、小程序等多个平台!有兴趣可以访问Dcloud官方插件市场https://ext.dcloud.net.cn/plugin?id=1839 查看,感谢~

本文为Tz张无忌文章,读后有收获可以请作者喝杯咖啡,转载请文章注明出处:https://www.cnblogs.com/zhaohongcheng/

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
视频H5 video最佳实践
随着 4G 的普遍以及 WiFi 的广泛使用,手机上的网速已经足够稳定和高速,以视频为主的 HTML5 也越来越普遍了,相比帧动画,视频的表现更加丰富,这里介绍一些实践经验。
gnip
2020/10/28
4.9K0
网页视频autoplay兼容及解决方案
自动播放是指无需经过用户的同意就可以开始播放视频。这包括在video元素使用autoplay属性或者通过JavaScript代码直接调用video元素的play方法。 <video src="/video.mp4" autoplay> 和 videoElement.play();
用户6256742
2024/07/31
7120
网页视频autoplay兼容及解决方案
H5视频自动播放踩坑杂记
最近的一次业务需求中,偶然接到了这么一个需求:“用户首屏可以自动播放一段视频,希望点击再全屏”。
不换
2024/04/30
1.4K0
H5视频自动播放踩坑杂记
H5直播避坑指南
作者简介: 文赫,2015年加入腾讯,作为前端开发工程师参与过手Q游戏公会,游戏中心,企鹅电竞等项目,具有丰富的移动端开发和直播开发经验。 导语 企鹅电竞项目,直播和视频播放是其中的核心。面对着产品同学不断的询问:为什么h5的体验这么差?为什么不能和app的播放体验保持一致?我们对着h5不明确的文档和不同浏览器的怪异表现欲哭无泪。 经过一系列的调研爬坑,斩荆披棘,我们一步步提升了体验,做到了和app基本一致的体验。在摸索优化背后,我们也想把这些问题和解决方法总结下来,让其他同学做到直播的时候可以自豪的说,这
小时光
2018/01/15
5.7K0
H5直播避坑指南
H5案例分享:微信视频播放全屏问题(转)
   在ios和安卓手机里的微信下播放视频时,会遇到不少问题,例如需要手动点击,视频才会播放,并且视频会跳出微信框,出现控制条,如果视频不是腾讯视频,播放完毕会出现腾讯视频的广告推送,今天我们就来看一下如何规避这些问题。
山河木马
2019/03/05
7K1
走进安卓的重灾区----video
html5的video已经出来很久了。在ios上使用基本上没什么毛病,但是安卓下就是一个重灾区了,各种体验差。这几天搞了安卓的兼容,简直是要吐血。所以特意总结了一些强势的坑点。
winty
2019/12/21
1.7K0
复杂帧动画之移动端video采坑实现
Airbnb 开源项目,通过解析 AE 动画为 json 数据,支持跨平台的动画效果解决方案;lottie 在辅导中已经有实际应用,使用过的同学都表示对其实现效果和开发速度表示称赞和推荐。
IMWeb前端团队
2019/12/04
2.5K0
仿抖音视频全屏播放&滑动切换
随着移动技术的快速迭代,数据流量费用的快速下降,视频、直播正成为全民的媒体盛宴,我司必然也不会缺席此次盛宴,这里讲述的是通过h5实现仿抖音视频全屏播放&滑动切换的效果,供我司直播鉴定回放视频使用。
前端小tips
2021/11/30
4.4K0
仿抖音视频全屏播放&滑动切换
关于直播卖货系统平台在微信浏览器中音视频播放的问题
Android 上,因为各个软件使用的浏览器渲染引擎不一样,所以直播卖货系统页面播放的效果差异也很大,这里主要以微信为主。微信使用的是腾讯浏览器自带的X5内核。
云豹kj的晨曦
2020/09/17
1.4K0
关于直播卖货系统平台在微信浏览器中音视频播放的问题
复杂帧动画之移动端video采坑实现
本文由 IMWeb 首发于 IMWeb 社区网站 imweb.io。点击阅读原文查看 IMWeb 社区更多精彩文章。 在企鹅辅导品牌页中,我们需要实现一个动画如下: 页面滚动到动画区域,播放动画, 对应动画部分如下: 帧动画当前的实现有以下几种方式: GIF 动画 大家比较熟悉的图片格式 lottie(http://airbnb.io/lottie/) Airbnb 开源项目,通过解析 AE 动画为 json 数据,支持跨平台的动画效果解决方案;lottie 在辅导中已经有实际应用,使用过的同学都表示
用户1097444
2022/06/29
2.4K0
复杂帧动画之移动端video采坑实现
视频H5Video标签在微信里的坑和技巧(转)
随着 4G 的普遍以及 WiFi 的广泛使用,手机上的网速已经足够稳定和高速,以视频为主的 HTML5 也越来越普遍了,相比帧动画,视频的表现更加丰富,前段时间开发了一个以视频为主的移动端 HTML5,在这里介绍一些实践经验。
山河木马
2019/03/05
2.8K0
视频H5Video标签在微信里的坑和技巧(转)
EasyNVR纯H5摄像机直播解决方案前端解析之:RTSP安防监控实时直播的网页H5自动播放方案
我们很多安防、互联网、直播的应用场景中,在打开一路直播流后,极少看到需要点击播放按钮才能直播 播放视频流的情况,但是由于H5场景的播放需要兼容的浏览器非常多,这样的情况下经常会遇到各种各样的摄像机网页播放的问题,比如这里解析的视频流自动播放的问题:
EasyNVR
2020/04/23
5.1K0
EasyNVR纯H5摄像机直播解决方案前端解析之:RTSP安防监控实时直播的网页H5自动播放方案
超强H5视频播放器!!!
大家好,我是开源小妹!今天给大家介绍一款强大的HTML5视频播放插件。现在在网页中插入视频的需求越来越多了,自己写的话则需要考虑以下问题:
永恒君
2022/12/06
2.1K0
超强H5视频播放器!!!
关于“吴亦凡入伍”H5背后的技术—兼容android【 前端篇】
作者:nicky, 腾讯Tgideas 前端开发工程师 在“吴亦凡入伍”H5刷爆朋友圈之后,看到网上有较多同学对背后的技术感兴趣,正好借着机会跟大家分享一下。如果你正好也遇到在android下视频自动播放和两个视频连续播放(中间不需要触发)的问题,希望本文会对你有所帮助。 关于这个H5大概的实现原理,网上已经有人分析的很详细,我这里就不多做介绍了。 这次要分享是在兼容android下遇到的难点和兼容的思路: 第一个问题就是为了实现 Page1中里面图片中的人物要突然动起来,然后走出页面,那么video在初始
腾讯大讲堂
2018/02/12
8260
关于“吴亦凡入伍”H5背后的技术—兼容android【 前端篇】
H5 项目实用
如果你关闭自动识别后 ,又希望某些电话号码能够链接到 iPhone 的拨号功能 ,那么可以通过这样来声明电话链接 ,
White feathe
2021/12/08
5.5K0
听说你也在开发年终盘点?送你一篇详尽的踩坑实战~
年终了,听说你也在开发年终盘点?也许你可以看看这篇腾讯 ABCmouse 圣诞年终盘点活动页的踩坑实战记录。 圣诞节的时候 ABCmouse 为用户精心准备了一份圣诞礼物,你也想看下吗?快来扫下这个神奇的二维码... 好吧,知道你可能不想扫码 '__' ,直接看下图吧(截取了其中一段) 当然了,这篇文章不是介绍整个开发过程(实际上本身开发周期很短,开发才三天,另外两天bugfix和视觉还原,时间非常赶)。这篇文章主要记录我在开发的过程的过程的一些经验总结和遇到的坑。 坑一:视频坑 这次的年终盘点在前
用户1097444
2022/06/29
7700
听说你也在开发年终盘点?送你一篇详尽的踩坑实战~
移动端自动播放视频
TS(Transport Stream,传输流)是一种封装的格式,它的全称为MPEG2-TS。是一种视频格式,一般用于实时流媒体和广播电视领域。
程序员不务正业
2021/03/03
2.1K0
从零开发弹幕视频播放器
这是一个系列文章。本文章将介绍,如何制作一个简单的视频播放器。用少量关键的代码来实现视频播放器核心功能。
羽月
2022/10/09
4.5K0
从零开发弹幕视频播放器
图片或视频充当网页背景+过渡动画
这是目前的主页预览图。上一个版本带有学校logo,根据比赛规则,删掉了学校logo。
WuShF
2024/03/15
2610
图片或视频充当网页背景+过渡动画
前端-video 标签沉浸式播放解决方案
“沉浸播放式”这个概念是我从Android开发里面的沉浸式引申过来的一个概念,沉浸式其实就是隐藏页面顶部的status bar和底部的navigation bar之后呈现出来的页面,一般用户很容易把沉浸式状态栏和透明化状态栏混为一谈,他们的区别如下:
grain先森
2019/03/29
2.2K0
前端-video 标签沉浸式播放解决方案
相关推荐
视频H5 video最佳实践
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验