html5 移动端视频video的android兼容(去除播放控件、全屏)
副标题[/!--empirenews.page--]
android下html5的视频播放一直是前端兼容的重灾区,各种体验差,被诟病已久。但之前的故宫穿越H5,和吴亦凡入伍H5,利用的视频技术,貌似又给人一种新面貌。 前段时间做某项目,恰好也是一个类似视频全屏的,下面跟大家分享下经历的坑和填坑的办法。 ios端问题其实没什么,基本都在android端,基本每一个带有视频的项目都会遇到的,当然有特殊需求的产生的情况另说了就,问题主要有几个方面: 全屏处理; 自动播放; 播放控制; 隐藏播放控件; video全屏的处理 这个其实不难,只需在video标签加个webkit-playsinline属性即可,这个属性基本上在基于webkit内核的移动端都是没问题的,此全屏非彼全屏,它是在浏览器视窗内的全屏,并不是占居整个手机的全屏,当然我们做web端需要的就是在document的body内的视窗范围的全屏。 <video id="myvideo" src=http://www.jb51.net/html5/"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事件,在不同的机子上可能有不同的情况产生,例如: 关于控制的问题还想说一点就是android在播放视频时会有个控件初始化的过程,在全屏视频想伪装成非视频时,是我们很不想看到的,我的解决思路是这样: “去除”android下的播放控件条 重头戏来了,相信这个这个问题已困扰无数的前端开发人员,再搜寻这个问题的解决方法时,几乎所有的文章都是告诉你android下,播放器的控件是去不了的。其实似乎确实是这样的,但你看了故宫穿越H5,和吴一凡那个H5后,会发现,在android下,也是没有控制条的。最初看到那些H5视频我首先并没有去看他们的内容多么新颖,传播量多么广,我是第一时间测试了android下的兼容问题,发现并没有出现控制条。在我研究半天未果时,在一篇技术帖中看到说:因是腾讯自己的项目,微信是腾讯自己的,他们在浏览器里做了一些配置,对旗下出品的H5有所“优待”,才能确保视频的顺利“乔装”。 上面的说法我并没有真正核实过,但好像是这么回事,非常有幸我做的那个视频项目也是腾讯的,其实是有机会可以向他们证实一下以上说法的,但即使是这样的,也只有腾讯的项目有这样的解决办法,对于广大的开发者来说似乎并太不公平,我试图找到一种解决去除播放控件的解决方案,下面是我花了很多心思找到的一种解决办法,看似很简单也不那么高大尚,但确实解决了问题,跟大家分享: 我这里只看android的情况,ios基本没什么问题,就忽略啦。 怎么办呢,不是腾讯自己的项目就没办法了嘛?再我搜了N多资料未果后,发现了一个细节,控制条始终是最下方的,可不可以让视频的尺寸放大些,将控制条顶到浏览窗口外面,就看不到了嘛,于是我将视频宽高放大到120%-----控件条神奇的‘消失’了(其实是顶到视窗外面了),惊喜万分啊。 具体思路和实现如下: html中将video标签外包一层, <div class="videobox"> <video id="mainvideo" webkit-playsinline="true" src=http://www.jb51.net/html5/"http:/7xvl2z.com1.z0.glb.clouddn.com/nigg2.mp4"></video> </div> 初始样式表如下: html,body { padding: 0; margin: 0; width: 100%; height: 100%; -webkit-user-select: none; user-select: none; overflow: hidden; } .videobox { width: 100%; height: 100%; position: absolute; left: 0; top: 0; overflow: hidden; } video {width: 1px;display: blcok;} /* 注:html,body里的overflow:hidden,非常重要,不能省。 因为微信android的播放器是脱离DOM结构的,也不会响应click、touch等事件。 如果视频尺寸大了,会产生滚动条,必须在html和body加overflow:hidden, 在videobox加没用的。 */ 当视频要播放时改变video的宽度(高度会等比缩放,即使自定义高度也是没用的,会被忽略) (编辑:广西网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |