最近作了一些嵌入视频的活动,积累了点视频方面的经验,下面记录下别人和本身踩过的坑以及相应的解决方案。
一、碰到问题和解决方案
1.一、ios 网页中播放视频默认全屏(点击视频会弹出播放器进行全屏播放)。
解决不全屏播放能够添加下列属性webkit-playsinline='true' 和 playsinline='true' 若是设置上面属性尚未效果,那么能够再配合下面这个插件试试。 iphone-inline-video
备注:ios下在微博中打开网页播放视频会弹出播放器播放,设置playsinline属性无效,还必须使用上面那个插件,亲测有效。
1.二、andriod中video播放完后显示推荐视频
移动端浏览器中的video元素是比较特别的,早期不管是在iOS仍是Android的浏览器中,它都位于页面的最顶层,没法被遮盖。后来这个问题在iOS下获得了解决,可是Android的浏览器则问题依旧。X5是腾讯基于Webkit开发的渲染引擎,它提供了一种名叫「同层播放器」的特殊video元素以解决遮盖问题。经过设置css
x5-video-player-type="h5" 能够开启同层播放器,来避免播放后显示推荐视频的问题。 x5-video-player-fullscreen="true" //视频全屏播放 x5-video-orientation="portrait"//视频竖屏模式播放
1.三、视频的适配
目前设计师通常是按照iphone5或者iphone7的标准去设计视频,通常能够经过宽高100%来播放视频,若是发现视频仍是不行那么就须要根据实际状况设置 object-fit属性来解决了。 详见半深刻理解CSS3 object-position/object-fit属性
备注:在webkit内核浏览器下,默认是object-fit:contain。
1.四、js控制视频的播放
在ios中视频和音频通常都不会主动播放,除非用户主动去点击,因此须要经过js来监听界面的交互来控制视频的播放。
视频的播放和暂停主要是调用play和pause方法。 而视频播放过程当中若是须要一些用户的交互主要是经过timeupdate方法来监听当前的播放时间,看一段代码:ios
var isStop = false; videoElem.on('timeupdate', function () { var curTime = parseInt(videoElem[0].currentTime); if (curTime == 152) {//该时间点展现交互蒙层 $('.js_first_stop').removeClass('hide'); } else if (curTime > 152 && curTime == 153) { if (!isStop) {//解决ios暂停后再次点击播放不了问题,由于该处触发了屡次,可是andriod没有该问题。 isStop = true; videoElem[0].pause(); } } else if (curTime == 248) { $('.js_second_stop').removeClass('hide'); } });
在ios中监听timeupdate事件并暂停的视频的时候须要引入一个全局的isStop变量,否则下次点击继续播放的时候没反应(timeupdate的时候触发了屡次暂停),可是andriod是没有这个问题的。 判断视频结束能够监听视频的ended事件css3
videoElem.on('ended',function(){});
或者监听视频的timeupdate事件,而后判断ended属性,若是为true则表示结束,false表示未结束。git
videoElem.on('timeupdate',function(){ if(videoElem[0].ended){ //播放结束 } }
另外在andriod端开启了同层播放器,微信端也提供了2个监听进入同层播放器和退出同层播放器的事件。 进入同层播放器事件(开始播放视频)。github
videoElem.on("x5videoenterfullscreen", function(){}
点击左上角返回键退出同层播放器。web
videoElem.on('x5videoexitfullscreen',function(){}
最后须要注意的是在andriod端播放视频后是不会主动退出同层播放器的。后续若是有展现的界面,也会在播放器中展现,感受很怪异。这里能够经过连接跳转来解决。
1.五、canvas播放视频
canvas能够播放视频,可是在某些andriod机上会看到有很严重的锯齿,而且有些andriod浏览器播放的时候只有声音而没有图像。
1.六、视频编码
mp4格式的视频要h.264编码方式,否则某些ios只有声音而没有图像。
最后,一个完整的video配置的以下,仅供参考canvas
<video class="js_video" style="object-fit: cover; width: 100%; height: 100%;" preload="load" playsinline="true" webkit-playsinline="true" x5-video-player-type="h5" x5-video-player-fullscreen="true" x5-video-orientation="portrait"src="https://video.mdcdn.cn/friend2018.mp4"></video>