视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
HTML5实现微信播放全屏的方法详解
2020-11-27 15:08:54 责编:小采
文档


在ios和安卓手机里的微信下播放视频时,会遇到不少问题,例如需要手动点击,视频才会播放,并且视频会跳出微信框,出现控制条,如果视频不是腾讯视频,播放完毕会出现腾讯视频的广告推送等问题,如何解决呢,下面通过本文给大家分享下HTML5微信播放全屏问题的解决办法

在ios和安卓手机里的微信下播放视频时,会遇到不少问题,例如需要手动点击,视频才会播放,并且视频会跳出微信框,出现控制条,如果视频不是腾讯视频,播放完毕会出现腾讯视频的广告推送等问题

解决办法:给video标签加一些属性,调用h5原生video。

<video
 id="videoALL" 
 src="video/01.mp4" 
 poster="images/1.jpg" /*视频封面*/
 preload="auto" 
 webkit-playsinline="true" /*这个属性是ios 10中设置可以
 让视频在小窗内播放,也就是不是全屏播放*/ 
 playsinline="true" /*IOS微信浏览器支持小窗内播放*/ 
 x-webkit-airplay="allow" 
 x5-video-player-type="h5" /*启用H5播放器,是wechat安卓版特性*/
 x5-video-player-fullscreen="true" /*全屏设置,
 设置为 true 是防止横屏*/>
 x5-video-orientation="portraint" /*播放器支付的方向,
 landscape横屏,portraint竖屏,默认值为竖屏*/
 style="object-fit:fill">
</video>

poster="images/1.jpg":属性规定视频下载时显示的图像,或者在用户点击播放按钮前显示的图像。如果未设置该属性,则使用视频的第一帧来代替。

preload="auto" :属性规定在页面加载后载入视频。

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

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

x-webkit-airplay="allow"暂时无法确切的知道其作用,但是小编猜测,这个属性应该是使此视频支持ios的AirPlay功能。使用AirPlay可以直接从使用iOS的设备上的不同位置播放视频、音乐还有照片文件,也就是说通过AirPlay功能可以实现影音文件的无线播放,当然前提是播放的终端设备也要支持相应的功能。

x5-video-player-type:启用同层H5播放器,就是在视频全屏的时候,p可以呈现在视频层上,也是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,true支持全屏播放,false不支持全屏播放。

其实,ISO 微信浏览器是Chrome的内核,相关的属性都支持,也是为什么X5同层播放不支持的原因。安卓微信浏览器是X5内核,一些属性标签比如playsinline就不支持,所以始终全屏。

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

解决办法:给video加上object-fit: fill;的style属性。如果还是有黑边有可能是视频尺寸不合适。

<p id="videobox">
 <video 
 id="videoALL" 
 src="mp4.mp4" 
 poster="1.jpg" 
 preload="auto" 
 webkit-playsinline="true" 
 playsinline="true" 
 x-webkit-airplay="allow" 
 x5-video-player-type="h5" 
 x5-video-player-fullscreen="true" 
 x5-video-orientation="portraint"
 style="object-fit:fill">
 </video> 
 <p id="btn" onclick="playcontr()"></p>
</p>
<p id="videoend"><p id="againbtn" onclick="playcontr()"></p></p>
*{
 padding: 0;
 margin: 0;
 }
 #videobox{position: absolute;width: 100%;height: 100%;background-color: green;background-image: url(1.jpg);background-size: 100% 100%;background-position: top;overflow: hidden;}
 #videoALL{
 height: auto;
 position: absolute;
 width: 100%;
 top: 0;
 left: 0;
 object-fit: fill;
 display: block;
 background-size: cover;
 overflow: hidden;}
 #btn,#againbtn{width: 81px;height: 75px;position: absolute;top: 50%;left:50%;margin-top: -37.5px;margin-left: -40.5px;background-image: url(btn.png);background-size: 100% 100%;}
 #videoend{position: absolute;background-color: pink;display: none;background-image: url(2.jpg);background-size: cover;background-position: top;}
<script>
var videoALL = document.getElementById('videoALL'),
 videobox = document.getElementById('videobox'),
 btn = document.getElementById('btn'),
 videoend = document.getElementById('videoend');
var clientWidth = document.documentElement.clientWidth;
var clientHeight = document.documentElement.clientHeight;
videoALL.style.width = clientWidth + 'px';
videoALL.style.height = 'auto';
document.addEventListener('touchmove', function(e){e.preventDefault()}, false);
function stylep(pId){
 pId.style.width = clientWidth + 'px';
 pId.style.height = clientHeight +200+ 'px'; 
}
stylep(videobox);
stylep(videoend);
var u = navigator.userAgent; 
var isAndroid = u.indexOf('Android') > -1 || u.indexOf('Adr') > -1; //android终端 
var isiOS = !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/); //ios终端 
function playcontr(){
 if (isAndroid) {
 videoALL.style.width = window.screen.width + 'px';
 videoALL.style.height = window.screen.height + 'px'; 
 }
 videobox.style.display = "block";
 videoALL.play();
 btn.style.display = "none";
 videoend.style.display = "none";
};
videoALL.addEventListener('pause',function(){ 
 videoALL.style.width = clientWidth + 'px';
 btn.style.display = "block";
}) 
videoALL.addEventListener("ended",function(){
 videoALL.pause();
 videobox.style.display = "none";
 videoend.style.display = "block";
});
</script>

【相关推荐】

1. Html5免费视频教程

2. 关于H5新标签的浏览器兼容问题的详解

3. 教你如何用H5无刷新改变当前url的实例详解

4. 通过phonegap操作数据库的的教程详解

5. H5中indexedDB 数据库的使用方法详解

下载本文
显示全文
专题