关于“吴亦凡入伍”H5背后的技术—兼容android

在“吴亦凡入伍”H5刷爆朋友圈之后,看到网上有较多同学对背后的技术感兴趣,正好借着机会跟大家分享一下。如果你正好也遇到在android下视频自动播放和两个视频连续播放(中间不需要触发)的问题,希望本文会对你有所帮助。

关于这个H5大概的实现原理,网上已经有人分析的很详细,我这里就不多做介绍了。

这次要分享是在兼容android下遇到的难点和兼容的思路:

第一个问题就是为了实现 Page1中里面图片中的人物要突然动起来,然后走出页面,那么video在初始化的时候就不能出现播放的icon,在IOS下设置一个poster就好了, 但在android下video对poster支持不是那么友好,加上会有千奇百怪的初始化播放效果:

在不设置controls下,video初始化android各平台的效果 (如下图)

解决方法其实很简单,就是在video上面覆盖一张图片(图片为视频的第一帧),当开始播放的时候,再隐藏这个图片来达到模拟poster的效果。这样做就引发另外一个问题,这个页面的video的宽度是自适应,意思就是宽度和高度会随着屏幕的宽度等比缩放,那么覆盖在video上面这个的高宽也不能是固定的,也要跟着video等比缩放。

这里我们就会用到保持元素宽高比的技巧,为元素添加的padding-top百分比值。因为padding取值百分比时候,是相对于包含块的宽度而定的。我们的视频1比例是580X386,所以padding-top的值为386/580=66.55%。实现代码如下:

第二个就是两个视频连续播放的问题(中间不需要触发)。

 


 

android下视频播放是需要用户主动触发的。用户主动触发行为比如:touch、click(注意:zepto的tap是触发不了),类似setInterval此类 或者touch之后setTimeout再播放,都是行不通的。

我们的需求是用户进到页面,当页面滚动一定高度之后,开始播放视频1,视频1播放完毕,不需要用户手动触发接着播放视频2。

转化到前端的逻辑:用户滚动页面一定高度之后,要连续播放视频1,2 中间用户是没有用户触发行为的。

解决思路: 当用户有触发行为时,就同时初始化视频1和视频2,给视频1添加ended事件,视频1播放完毕后就直接播放视频2 [v2.play()]

然而现实却很残酷(在android下会提示解析错误或者弹框让你选择文件打开方式)

既然上面的方法不行,那就用另外一种方法:当用户第一次触屏页面的时候去初始化视频2,然后等用户滚动页面一定高度的时候再去播放视频1,当视频1播放完毕,在回调里面直接播放视频2:

但这样还是会报错,我在想是不是canplay的事件发生的时候,video还没有初始化完成,但文档里面又找不到video初始化完成的API。

于是把逐个看似跟video初始化完成差不多的事件全都试了个遍,包括oncanplaythrough oncanplay onplay onplaying onprogress onreadystatechange ontimeupdate... 结果统统都不行。

后来经过反复调试和测试,发现一个规律,把视频2在自带的控制条上手动触发播放,等开始播放之后,再手动暂定,然后再播放1,等视频1结束后调用视频2 是正常的,也不会报错。

基本上可以总结成一个规律:只要视频2已经播放过,哪怕一帧就行,这样当视频1播放完毕之后再play视频2,就是正常的!

好既然找出规律来,那么就好办了,怎么监视视频播放过呢?由于没有现成的api.只能用别的事件来控制了~

因为在之前已试过video的N多事件,这时候该 timeupdate 登场了。 文档解释是:当播放位置改变时(比如当用户快进到媒介中一个不同的位置时)运行的脚本。

逻辑就是只要有视频播放的时候,这个事件就会不断地被触发。当有了播放时间(currentTime>0)了,就说明已经播放过了,然后暂停它。等着再次被play();

兼容android尝试能不能只需要一次滚屏事件就完成这个交互,不过又掉进android里面的touchmove、touchend的坑里。

总结android下

一、不能存在两个初始化的video,会报错

二、没有用户主动触发行为,play()执行是无效的,但在该视频在已经被播放的情况下是可以不用用户主动触发直接Play()是可以的(必须是已经播放过,即使初始化完成,直接Play()也是不行的)。

最后关于兼容腾讯新闻app和IOS自带浏览器的问题在这里就不细说了。另外在某些iphone5和5S在safari下,如果当前页面的后面有全屏的视频,即使不显示,位置也不在视窗内。点击页面时会出现“点透”的BUG,页面上的任何触屏事件都捕获不到,就是触屏事件全被看不到的video抢去,解决方法就在video隐藏的时候设置 width:1px; height:1px; 等到播放的时候再设置成全屏的宽高。

__(来自:腾讯网)

时间: 2024-10-25 08:37:40

关于“吴亦凡入伍”H5背后的技术—兼容android的相关文章

Digg工程师讲述Digg背后的技术

虽然最近业绩有所下滑,也出现了一些技术故障,但Digg作为首屈一指的社会化新闻网站,其背后的技术还是值得一探,Digg工程师 Dave Beckett 在今年4月份写一篇名为<How Digg is Built>的文章,非常系统地将Digg背后的技术展现给大家,非常值得一看. 一.Digg提供的服务 一个社会化的新闻网站 对个人来说它又是一个私人社会化新闻发布平台 一个广告平台 一个开放API的平台 博客及文档系统 二.Digg 的核心功能 文章提交功能 – 提交你认为有价值的新闻 文章列表功

阿里巴巴2016双11背后的技术(不一样的技术创新)

每年的"双11"是阿里技术的大阅兵和创新能力的集中检阅.2016年的"双11"背后,更是蕴藏了异常丰富的技术实践与突破. 历经1个月的编写,最终27篇精华技术文章入册<不一样的技术创新-阿里巴巴2016双11背后的技术>(以下简称<不一样的技术创新>)一书.这27篇"24K纯度"的技术干货,是阿里"双11"八年来技术演进结果的最新展示,凝聚了阿里工程师的智慧和创造力. 所有参与<不一样的技术创新&

【转发】前腾讯搜索技术专家:为你揭露产品ASO背后的技术

作者:王亮,曾在腾讯搜搜,搜狗从事过多年的搜索引擎算法研发,目前响应国家号召,投身于轰轰烈烈的全民创业中 Aso工具基本是App运营人员的标配了,目前有ann9,appannie,searchman,sensortower等众多aso工具,“鸟哥笔记”也有很多文章介绍这些工具的使用方法.但从小老师就教育我们,“知其然,并知其所以然”,才能学的更好,才能考上更好的大学,才能#¥%#¥%¥#...,作为从事搜索技术多年的码农,这里就为大家讲讲aso背后的技术. 网站需要搜索优化,对应的,app就需要

音频透传背后的技术实现

现在市面上流行的电视盒大部分都是Android,"音频透传"是一个经常见到的词,那到底什么是音频透传.音频透传背后的技术实现到底如何,引起了我的兴趣,因此花了点时间研究了一下.由于是针对全志H8的电视盒方案进行分析,因此分析的结果不具有普遍性,可能其它的方案在技术实现上有所不同. 在开始分析前先查找了一下关于"透传"这个概念的解释,根据度娘的说法是"透传即是透明传送,即传送网络无论传输业务如何,只负责将需要传送的业务传送到目的节点,同时保证传输的质量即可,

探寻百度AI3.0背后的技术实践

2018年7月28日,安卓绿色联盟携手百度联盟和华为终端开放实验室共同举办的<探寻百度AI3.0背后的技术实践>主题技术沙龙在北京西二旗华为大厦圆满落幕.来自百度简单搜索.百度安全.百度AIG.百度地图.百度云的五位资深技术专家围绕AI这个主题进行了精彩的技术分享,吸引了近200名开发者现场参与. 1.简单搜索中的技术架构和人工智能落地 百度资深安卓研发工程师高扬从事多年安卓和移动端的开发工作,目前主要专注于简单搜索的Android端架构以及人工智能的技术落地. 高扬表示,现阶段人工智能相关的

揭秘央视春晚直播背后的技术硬实力

2020年1月24日晚间8点,一首开年贺岁歌舞<春潮颂>拉开了鼠年春晚的序幕.<这就是街舞>.2019第一神曲<野狼Disco>的改编版本<过年迪斯科>.<风雪饺子情>.<走过场>等众多的节目更是将春晚推向了一波又一波的高潮. 今年的春晚不仅演员阵容庞大,就连主持人阵容进行了"大换血",各种创新的节目更是赢得观众的阵阵喝彩.本届春晚堪称一场科技的视觉盛宴,其中春晚舞台首次打造三层立体舞美,同时运用飞屏技术营造出36

如何把一个H5网站打包成安卓(Android)/苹果(IOS)APP

今天我们来讲解一下如何把一个H5网站打包成安卓(Android)/苹果(IOS)APP,并且安装到手机中.而且不需要很高的技术门砍!只有网址,没有源码,没问题!通过以下步骤,几分钟,将网站变成手机app. 前提条件:网站是H5网站,或者是手机版网站,总之要能在手机端正常显示才行. 打包平台:勾勾街 一.打开勾勾街官网 (http://www.gogojie.com) 二.注册一个账号 三.登录账号,进入后台 四.选择打包的类型 (1)苹果IOS APP点击右上角的“马上创建IOS APP”按钮,

创建兼容Android Studio和eclipse的AS工程

创建兼容Android Studio和eclipse的AS工程 虽然我的博客名叫eclipse_xu,但是我已经将近一年多没有用过eclipse了,早已拜在Android Studio门下.但是,最近的项目由于要兼容eclipse和Android Studio,让一些还未脱贫的朋友也能使用AS创建的工程,所以,找到了一种能够同时兼容ant和gradle的方式,来创建兼容的工程. 创建普通的Android Studio工程 非常简单,创建好之后,我们切换到project标签,目录结构是这样的: 但

【转】Unity上同时兼容Android和IOS的JSON库

转自卡神博客Unity上同时兼容Android和IOS的JSON库 虽然说JSON解析很常见,而且也经常看见大家讨论怎么解析.但是还是很多人经常出现各种问题.这篇文章就一次性帮你解决JSON解析的问题. 本篇文章使用JSON解析在真实项目中使用,同时兼容PC.android和IOS.没啥好说,一个C#写的解析JSON的工具类,在unity中能正常解析. 不太好用的JSON解析库:LitJson在IOS上不稳定,有时正常,有时不正常..MiniJson据说支持不完整,没测试. 本文给出的JSON解