html5 移动端视频video的android兼容(去除播放控件、全屏)

2020-04-25 07:27:58易采站长站整理

android下html5的视频播放一直是前端兼容的重灾区,各种体验差,被诟病已久。但之前的故宫穿越H5,和吴亦凡入伍H5,利用的视频技术,貌似又给人一种新面貌。

前段时间做某项目,恰好也是一个类似视频全屏的,下面跟大家分享下经历的坑和填坑的办法。

ios端问题其实没什么,基本都在android端,基本每一个带有视频的项目都会遇到的,当然有特殊需求的产生的情况另说了就,问题主要有几个方面:

全屏处理;
自动播放;
播放控制;
隐藏播放控件;

video全屏的处理

这个其实不难,只需在video标签加个

webkit-playsinline
属性即可,这个属性基本上在基于webkit内核的移动端都是没问题的,此全屏非彼全屏,它是在浏览器视窗内的全屏,并不是占居整个手机的全屏,当然我们做web端需要的就是在document的body内的视窗范围的全屏。


<video id="myvideo" src="test.mp4" webkit-playsinline="true"></video>

在ios下,视频被嵌入后,媒体的元数据加载完成后,会以全屏的形式显示出来,或者加个poster,可以看到画面。但在android下,多数机子是不显示视频画面的,要不就是显示一个黑色的还不是全屏的播放控件,即使及加个poster封面也不济于是。因为poster在android兼容的并不好,不如在视频上层加个div铺张图片,这个比较好的处理方式应该是:视频上加一层div做封面,由于android不允许视频上层有东西,所以首先将视频设为的

width:1px
,当播放后,上层的封面remove掉,同时
width:100%
或者你想要的宽度。

video的自动播放

这个的话就不多说了,相信大家跟我一样,试图寻找android下,页面加载完毕就可以自动播放,但现实是残酷的,android下是不允许自动播放的,即使你用了

video.play()
,也是不行的。必须有用户的主动触发,比如触摸了屏幕,有click或touch事件产生。不知以后android会不会改进,但至少目前来看是不行的。比较的好的办法是,引导用户触发,滑屏或touch的行为,然后调用video.play()播放,给用户一个自动播放的错觉。

video播放的控制

对于video或者audio等媒体元素,有一些方法,常用的有play(),pause();也有一些事件,如

'loadstart','canplay','canplaythrough','ended','timeupdate'
…..等等。

在移动端有一些坑需要注意,不要轻易使用媒体元素的除’ended’,’timeupdate’以外event事件,在不同的机子上可能有不同的情况产生,例如: