html5video挪移打量解-
本文介绍了html5 video 挪移端填坑记,分享给大家,概括如下:
主动播放
设定autoplay属性
挪移阅读器中
但是在许多挪移阅读器里,都是请求会员的真实操纵来(touchend、click、doubleclick 或 keydown 事件等规范的事件)触发调取video.play(),才干主动播放影音视频。
dom.addEventListener('click', function () { video.play() })
微信中
也可以在 wx.ready()里触发video.play()
wx.ready(function () { video.play() })
内联播放
设定属性 webkit-playsinline playsinline
在iOS Safari和一些安卓的一些阅读器下播放视频的时候,不克不及在h5页面中播放视频,系统会主动接管视频
要是需要在h5页面内播放视频,需要在视频标签上加上 webkit-playsinline,在iOS10今后,需要加上playsinline,倡议同时加上这两个属性。同时还需要app支撑这种模式
webview.allowsInlineMediaPlayback = YES;
ios手Q和微信都支撑这种模式,但是android 微信就挂了
android 微信
android微信内置阅读器采纳腾讯X5内核,不遵循X5web规范,video强迫全屏就是其一。视频播放结束后还会涌现QQ本人的视频举荐
听说,其有个白名单,白名单下的视频资源,就不会全屏。但是腾讯已经不克不及再添加白名单了。尿性,无解。。。。。。
当前还有一个解决方法,就是运用h5 canvas 播放 video
canvas 播放视频
运用canvas 碰到的坑:video 必需加 x5-video-player-type="h5" 属性,不然,在挪移端就会卡死不克不及播放视频,个人以为是由于视频被接管的缘由致使。
《script》 var video = document.querySelector('#video') var canvas = document.querySelector('#canvas') var wrapper = canvas.parentNode var width = wrapper.offsetWidth var height = wrapper.offsetHeight var ctx = c.getContext('2d') var time = null canvas.width = width canvas.height = height canvas.addEventListener('click', function () { video.play() }) video.addEventListener('play', function () { time = window.setInterval(function () { ctx.drawImage(v, 0, 0, width, height); }, 20); }, false); video.addEventListener('pause', function () { window.clearInterval(time); }, false); video.addEventListener('ended', function () { window.clearInterval(time); }, false); 《script》
最后发明,虽然运用canvas播放视频,android微信中可以屏蔽全屏视频播放完的举荐视频。但是还没方法制止视频播放时 的全屏题目。还是得万恶的白名单。吐槽。。。。。。。。。。。。。。。。
更坑爹的是没有寻到js触发退出全屏的办法。
ios黑屏题目
ios 在播放视频时,会涌现短暂的黑屏,然后正常显示。
解决办法:
在视频上层遮盖一个 增加一个p并用一张图片添补,创造播放前加载假象。然后监听事件 timeupdate ,视频播放有画面时移除这个“p块”
video.addEventListener('timeupdate', function(){ if(video.currentTime > 0.1){ posterImg.hidden(); } })
Media 办法和属性
HTMLVideoElement和HTMLAudioElement 均继承自HTMLMediaElement
// 媒体差错 MediaObj.error; //null:正常 MediaObj.error.code; //1.会员终止 2.网络差错 3.解码差错 4.URL无效 //媒体目前状态 MediaObj.currentSrc; //返回目前资源的URL MediaObj.src = value; //返回或设定目前资源的URL MediaObj.canPlayType(type); //可否能播放某种格局的资源 MediaObj.networkState; //0.此元素未初始化 1.正常但没有运用网络 2.正鄙人载数据 3.没有寻到资源 MediaObj.load(); //从新加载src指定的资源 MediaObj.buffered; //返回已缓冲区域,TimeRanges MediaObj.preload; //none:不预载 metadata:预载资源信息 auto: //预备状态 MediaObj.readyState;//1:HAVE_NOTHING //2:HAVE_METADATA //3.HAVE_CURRENT_DATA //4.HAVE_FUTURE_DATA //5.HAVE_ENOUGH_DATA MediaObj.seeking; //可否正在seeking //回放状态 MediaObj.currentTime = value; //目前播放的位置,赋值可转变位置 MediaObj.startTime; //个别为0,要是为流媒体或者不从0开端的资源,则不为0 MediaObj.duration; //目前资源长度 流返回无穷 MediaObj.paused; //可否暂停 MediaObj.defaultPlaybackRate = value;//默许的回放速度,可以设定 MediaObj.playbackRate = value;//目前播放速度,设定后即将转变 MediaObj.played; //返回已经播放的区域,TimeRanges,对于此对象见下文 MediaObj.seekable; //返回可以seek的区域 TimeRanges MediaObj.ended; //可否完毕 MediaObj.autoPlay; //可否主动播放 MediaObj.loop; //可否轮回播放 MediaObj.play(); //播放 MediaObj.pause(); //暂停 //视频控制 MediaObj.controls;//可否有默许控制条 MediaObj.volume = value; //音量 MediaObj.muted = value; //静音 //TimeRanges(区域)对象 TimeRanges.length; //区域段数 TimeRanges.start(index) //第index段区域的开端位置 TimeRanges.end(index) //第index段区域的完毕位置 //【★★★**相干事件**★★★】 //事件分发 var eventTester = function(e){ Media.addEventListener(e,function(){ console.log((new Date()).getTime(),e) },false); } //事件监听 eventTester("loadstart"); //客户端开端要求数据 eventTester("progress"); //客户端正在要求数据 eventTester("suspend"); //推迟下载 eventTester("abort"); //客户端自动终止下载(不是由于差错引起) eventTester("loadstart"); //客户端开端要求数据 eventTester("progress"); //客户端正在要求数据 eventTester("suspend"); //推迟下载 eventTester("abort"); //客户端自动终止下载(不是由于差错引起), eventTester("error"); //要求数据时碰到差错 eventTester("stalled"); //网速失速 eventTester("play"); //play()和autoplay开端播放时触发 eventTester("pause"); //pause()触发 eventTester("loadedmetadata"); //成功猎取资源长度 eventTester("loadeddata"); // eventTester("waiting"); //期待数据,并非差错 eventTester("playing"); //开端回放 eventTester("canplay"); //可以播放,但半途可能由于加载而暂停 eventTester("canplaythrough"); //可以播放,歌曲全部加载结束 eventTester("seeking"); //寻觅中 eventTester("seeked"); //寻觅结束 eventTester("timeupdate"); //播放工夫转变 eventTester("ended"); //播放完毕 eventTester("ratechange"); //播放速率转变 eventTester("durationchange"); //资源长度转变 eventTester("volumechange"); //音量转变