浅谈html5 video 移动端填坑记

2020-04-22 07:44:00易采站长站整理

据说,其有个白名单,白名单下的视频资源,就不会全屏。但是腾讯已经不能再增加白名单了。尿性,无解。。。。。。

目前还有一个解决办法,就是使用h5  canvas 播放 video

canvas 播放视频

使用canvas 遇到的坑:video 必须加 x5-video-player-type="h5" 属性,否则,在移动端就会卡死不能播放视频,个人认为是因为视频被接管的原因导致。


<div class="wrapper">
<video id="video" style="display: none" autoplay src="video.mp4" x5-video-player-type="h5"></video>
<canvas id="canvas"></canvas>
</div>
<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 在播放视频时,会出现短暂的黑屏,然后正常显示。

解决方法:

在视频上层覆盖一个 添加一个div并用一张图片填充,制造播放前加载假象。然后监听事件 timeupdate ,视频播放有画面时移除这个“div块”


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.没有找到资源