完美解决微信video视频隐藏控件和内联播放问题

众所周知,微信浏览器下的html5视频播放兼容性一直是很头疼的问题,其中两个最主要的问题是隐藏播放控件和内联播放,在ios系统下这两个功能还比较好实现,重点是在android端,今天就给大家提供一个比较特殊的方法。

先看一下html代码格式:

<div class="videoBox">
<i class="fa fa-play-circle-o"></i>
<video id="video" x5-video-player-type="h5" x5-video-player-fullscreen="true" x-webkit-airplay="allow" webkit-playsinline playsinline poster="video.png" src="video.mp4"></video>
<canvas id="canvas" width="1920" height="1080"></canvas>
</div>

其中i标签是boostrap一个视频暂停icon,在这里是andriod自定义暂停控件。然后是video标签中的属性:
x5-video-player-type=”h5”,x5-video-player-fullscreen=”true”—这两个属性是叫做“同层播放器”,是微信andriod端特有的属性,有关这两个属性的文章请参考这里。
webkit-playsinline=”true”—这个属性是ios 10中设置可以让视频在小窗内播放,也就是不是全屏播放。
playsinline=”true”—ios微信浏览器支持小窗内播放。
因为没有加上controls属性,所以在ios端是没有播放控件的,如果在播放过程中想用到播放控件,可以在js中动态添加。

接下来是重点!也就是canvas标签:作用是将android端视频渲染到canvas,这样一来video标签的所有问题全部屏蔽。
canvas属性:width=”1920”,height=”1080”—大部分视频都是这个分辨率,如果不设置的话视频清晰度会降低或者失真。

接下来是js实现:
首先判断终端:

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终端

andriod下:

if(isAndroid){
$("#video").hide();
$("i.fa").show();
}else{
$("i.fa").hide();
$("#canvas").hide();
}

video标签隐藏,自定义暂停控件显示;反之如果是ios端自定义控件和canvas标签隐藏。
1
接下来是canvas的绘制:

var videoanimate;
canvas = document.getElementById(‘canvas‘);
context = canvas.getContext( ‘2d‘ );
context.fillStyle = ‘#fff‘;
context.fillRect( 0, 0, canvas.width, canvas.height );//绘制1920*1080像素的已填充矩形。
var img=new Image();//新建一个图片,模仿video里面的poster属性。
img.src="video.png";
context.drawImage(img,0, 0,canvas.width,canvas.height);//将图片绘制进canvas。
function animate() {//渲染方法。
if(video.paused){//判断视频是否暂停,如果暂停显示控件。
$(".video i.fa").show();
}
context.drawImage(video,0, 0,canvas.width,canvas.height);//将视频当中的一帧绘制到canvas当中。
videoanimate = requestAnimationFrame( animate );//每秒60帧渲染页面。关于此方法具体解释请自行百度。

$("#canvas,i.fa").click(function(){
if(isAndroid){
animate();//在这里调用。
if(!video.paused){//判断视频时候暂停。
video.pause();
}else{
video.play();
$(".video i.fa").hide();
}
}
})

原文地址:https://www.cnblogs.com/2019gdiceboy/p/11638559.html

时间: 2024-11-10 00:55:34

完美解决微信video视频隐藏控件和内联播放问题的相关文章

仿微信小视频录制控件

本文为用 MediaRecorder 录制小视频的控件,可以设置视频录制的时间.空间大小.初始时是否打开摄像头等. 此控件为组合控件,继承自 LinearLayout ,为防止出错,需实现 android.media.MediaRecorder.OnErrorListener 接口. 1. [文件] MovieRecorderView.java ~ 9KB 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2

完美解决微信下拉上拉

转http://note.youdao.com/share/?id=f13df2c846cac5d4f0e24a715d8372a6&type=note#/ 完美解决微信下拉上拉回弹 1.使用jroll.js完美解决,下载jroll.js. 2.DOM结构为: class container 为滑动页面 3.添加css #wrapper { position: absolute; top: 44px; bottom: 0; width: 100%; } 4.编写js <script src=

ASP.NET中,HiddenField隐藏控件的用法

HiddenField控件就是隐藏输入框的服务器控件,他能让你保存那些不必显示在页面上的且对安全性需求不高的数据.也许这个时候应该有这么一个疑问,为什么有了ViewState.Session和Cookie等状态保存机制,还需要用起HiddenField呢? 增加HiddenField,其实是为了让整个状态管理机制的应用程度更加全方面.因为不管是ViewState.Cookie还是Session,都有其失效的时候,比如用户因某种需求设置ViewState为false,或环境条件限制使用Cookie

解决Jquery对input file控件的onchange事件只生效一次的问题

如题,解决办法的代码如下: 1. $('#fileId').live('change',function(){ //逻辑添加.... }); 2. $('#fileId').change(function(){ $('#inputFileID').replaceWith('<input name="fileToUpload" type="file" id="inputFileID" />'); }); 解决Jquery对input f

video 全屏,播放,隐藏控件。

requestFullscreen全屏具体实现 1.进入全屏 function full(ele) { if (ele.requestFullscreen) { ele.requestFullscreen(); } else if (ele.mozRequestFullScreen) { ele.mozRequestFullScreen(); } else if (ele.webkitRequestFullscreen) { ele.webkitRequestFullscreen(); } el

记录下帮助一位网友解决的关于android子控件的onTouch或onClick和父OnTouch 冲突的问题。

前三天收到位网友的私信求助,问题大概如标题所示.具体是下面的情况,个人感觉,这个问题挺有趣,也会在实际项目开发中很常见.不想看前奏的请直接跳至解决方法. 问题原型: 父控件是自定义的 LinearLayout,目的是实现下拉刷新,这个自定义View的实现下拉操作思想是通过检测 onTouch 事件,然后,子控件有一个 scrollView,它是完全为了实现下滚和滚到底部实现加载更多的监听.看到这,我相信任何一个有类似项目开发经验的人,都会感到很熟悉的.下拉刷新+下滑加载更多. 在 scrollV

Android自定义控件系列 十:利用添加自定义布局来搞定触摸事件的分发,解决组合界面中特定控件响应特定方向的事件

这个例子是比较有用的,基本上可以说,写完这一次,以后很多情况下,直接拿过来addView一下,然后再addInterceptorView一下,就可以轻轻松松的达到组合界面中特定控件来响应特定方向的触摸事件了. 请尊重原创劳动成果,转载请注明出处:http://blog.csdn.net/cyp331203/article/details/45198549,非允许请勿用于商业或盈利用途,违者必究. 在写Android应用的过程之中,经常会遇到这样的情况:界面包含了多个控件,我们希望触摸在界面上的不

解决嵌入WinForm的WPF控件无法显示图片问题

解决办法是在控件初始化时,通过下面方法再次加载图片: ucCanvas.CreateCoordinateImage.Source = GetImageIcon(global::MainApplication.Properties.Resources.DL_Coordinate2); private static BitmapImage GetImageIcon(System.Drawing.Bitmap bitmap) { BitmapImage bitmapImage = new Bitmap

解决微信video全屏的问题,不在本页面播放

在微信浏览器中使用video标签,点击播放会跳出本页面,自动进行全屏播放,原因是自动跳转到手机微信内置的浏览器中去播放去了!!! 在video中加上连个属性就好了,反正最近的一个项目,我是这样做的就好了, <video id="videoID"webkit-playsinline="true" x-webkit-airplay="true"  playsinline="true"x5-video-player-type=