video 标签在微信浏览器的问题解决方法

最近作的些web页面,内嵌许多小视频,在ios和安卓手机上播放时,遇到很多问题:前端

在微信浏览器内播放时,视频会自动全屏ios

解决办法:
给video标签加一些属性,调用h5原生video,我写了个例子,加了注释,若是有错误,烦指正,谢谢!web

<video class="video-source"
     width="100%"
     controls  /*这个属性规定浏览器为该视频提供播放控件*/  
     style="object-fit:fill"  /*加这个style会让 Android / web 的视频在微信里的视频全屏,若是是在手机上预览,会让视频的封面同视频同样大小*/
     webkit-playsinline="true"  /*这个属性是ios 10中设置可让视频在小窗内播放,也就是否是全屏播放*/  
     x-webkit-airplay="true"  /*这个属性还不知道做用*/ 
     playsinline="true"  /*IOS微信浏览器支持小窗内播放*/ 
     x5-video-player-type="h5" /*启用H5播放器,是wechat安卓版特性*/
     x5-video-orientation="h5" /*播放器支付的方向,landscape横屏,portraint竖屏,默认值为竖屏*/
     x5-video-player-fullscreen="true" /*全屏设置,设置为 true 是防止横屏*/
     preload="auto" /*这个属性规定页面加载完成后载入视频*/ 
</video>

若是你的video标签也加了上面的属性,那么,你的视频能够在IOS手机上的小窗口播放,同时,视频封面同视频的宽度与高度也保持一致了。浏览器

通过各类尝试,在iOS下,能够给video添加webkit-playsinline属性,使视频在页面上本来位置播放,但这个属性在安卓上无效。微信

/华丽丽的分割线,如下内容摘抄自网络,供参考/网络

IOS微信浏览器是Chrome内核,下面大部分属性都支持,安卓微信浏览器是X5内核,一些属性是不支持的,好比能够设置局部播放的属性 playsinline,所以,始终是全屏。ide

下面的内容用以解释上面的内容:布局

preload="auto" :属性规定在页面加载后载入视频。若是设置了 autoplay 属性,则忽略该属性。测试

通常参数可能的值:code

· auto - 当页面加载后载入整个视频

· meta - 当页面加载后只载入元数据

· none - 当页面加载后不载入视频

muted:当设置该属性后,它规定视频的音频输出应该被静音

controls="controls" :属性规定浏览器应该为视频提供播放控件。

autoplay="autoplay": 视频自动播放设置,可是有经验的人都应该知道,autoplay标签在手机上不兼容,APP中设置问题致使没法自动播放,不管安卓或IOS。须要模拟自动播放只能经过一些事件触发。

webkit-playsinline playsinline:视频播放时局域播放,不脱离文档流 。可是这个属性比较特别, 须要嵌入网页的APP好比WeChat中UIwebview 的allowsInlineMediaPlayback = YES webview.allowsInlineMediaPlayback = YES,才能生效。换句话说,若是APP不设置,你页面中加了这标签也无效,这也就是为何安卓手机WeChat 播放视频老是全屏,由于APP不支持playsinline,而ISO的WeChat却支持。

这里就要补充下,若是是想作全屏直播或者全屏H5体验的用户,ISO须要设置删除 webkit-playsinline 标签,由于你设置 false 是不支持的 ,安卓则不须要,由于默认全屏。但这时候全屏是有播放控件的,不管你有没有设置control。 作直播的可能用得着播放控件,可是全屏H5是不须要的,那么去除全屏播放时候的控件,须要如下设置:同层播放。

x5-video-player-type:启用同层H5播放器,就是在视频全屏的时候,div能够呈如今视频层上,也是WeChat安卓版特有的属性。同层播放别名也叫作沉浸式播放,播放的时候看似全屏,可是已经除去了control和微信的导航栏,只留下"X"和"<"两键。目前的同层播放器只在Android(包括微信)上生效,暂时不支持iOS。笔者想过为何同层播放只对安卓开放,由于安卓不能像ISO同样局域播放,默认的全屏会使得一些界面操做被阻拦,若是是全屏H5还好,可是作直播的话,诸如弹幕那样的功能就没法实现了,因此这时候同层播放的概念就解决了这个问题。不过笔者在测试的过程当中发现,不一样版本的ISO和安卓效果略有不一样。

x5-video-orientation:声明播放器支持的方向,可选值landscape 横屏, portraint竖屏。默认值portraint。不管是直播仍是全屏H5通常都是竖屏播放,可是这个属性须要x5-video-player-type开启H5模式

x5-video-player-fullscreen:全屏设置。笔者还未能领悟这个标签的用意,在测试过程当中发现,ture和false的设置会致使布局上的不同,如图 Click标签前后的位置。

另外补充下,ISO 微信浏览器是Chrome的内核,相关的属性都支持,也是为何X5同层播放不支持的缘由。安卓微信浏览器是X5内核,一些属性标签好比playsinline就不支持,因此始终全屏。

/貌似到这里,了解了为何安卓手机的全屏视频了/

还有个问题,在Android的微信里面,就算加上了上面的属性,还会出现上下有黑边,不能全屏的问题。

解决办法:给video加上object-fit: fill;的style属性。

/关于微信内置浏览器不能小窗口播放视频的问题-知乎答/

在最新的ios微信6.5.3及其以后的版本中,webview默认支持小窗播放,
开发者须要特别注意小窗播放须要前端同时适配iOS10和iOS10如下的低版本

适配建议:须要彻底按照如下代码设置video标签才可同时兼容不一样的iOS版本

<video webkit-playsinline playsinline> </video>

相关文章
相关标签/搜索