原文地址:https://github.com/gnipbao/iblog/issues/11css
随着 4G 的广泛以及 WiFi 的普遍使用,手机上的网速已经足够稳定和高速,以视频为主的 HTML5 也愈来愈广泛了,相比帧动画,视频的表现更加丰富,这里介绍一些实践经验html
<video id="video" src="video.mp4" controls = "true" poster="images.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>
<video id="video" src="xx.mp4" playsinline webkit-playsinline></video>
android始终不能自动播放,很少说。值得一提的是经测如今ios10后版本的safari和微信都不让视频自动播放了(顺带音频也不能自动播放了),但微信提供了一个事件WeixinJSBridgeReady,在微信嵌入webview全局的这个事件触发后,视频仍能够自动播放,这个应该是如今在ios端微信的视频自动播放的比较靠谱的方式,其余如手q或者其余浏览器,建议就引导用户出发触屏的行为操做出发比较好。html5
document.addEventListener("WeixinJSBridgeReady", function (){ video.play(); video.pause(); }, false)
ios10之后对于video出了新策 感兴趣能够了解一波 https://webkit.org/blog/6784/new-video-policies-for-ios/android
对于video或者audio等媒体元素,有一些方法,经常使用的有play(),pause();也有一些事件,如loadstart
,canplay
,canplaythrough
,ended
,timeupdate
....等等。
在移动端有一些坑须要注意,不要轻易使用媒体元素的除ended
,timeupdate
之外event事件,在不一样的机子上可能有不一样的状况产生,例如:ios下监听canplay
和canplaythrough
(是否已缓冲了足够的数据能够流畅播放),当加载时是不会触发的,即便preload="auto"
也没用,但在pc的chrome调试器下和android下,是会在加载阶段就触发。ios须要播放后才会触发。总之就是如今的视频标准还不尽完善,有不少坑要注意,要使用前最好本身亲测一遍。就是当第一次播放视频的时候ios端,若是网络慢,视频从开始播到能展示画面会有短暂的黑屏(处理视频源数据的时间),为了不这个黑屏,能够在视频上加个div浮层(能够一个假的视频第一帧),而后用timeupdate
方法监听,视屏播放及有画面的时候再移除浮层。ios
video.addEventListener('timeupdate',function (){ //当视频的currentTime大于0.1时表示黑屏时间已过,已有视频画面,能够移除浮层(.pagestart的div元素) if ( !video.isPlayed && this.currentTime>0.1 ){ $('.pagestart').fadeOut(500); video.isPlayed = !0; } })
听说腾讯的android团队的x5内核团队放开了视频播放的限制,视频不必定调用它们那个备受诟病的视频播放器了,x5-video-player-type="h5"
属性这个属性好像就有点那个意思,虽然体验仍是有点...(导航栏也会清理)但至少播放器控件没有了,上层能够浮div或者其余元素了,这个仍是值得一提。还有一点值得说的是,带播放器控件的隐藏.git
<div class="videobox" ontouchmove="return false;"> <video id="mainvideo" src="test.mp4" x5-video-player-type="h5" playsinline webkit-playsinline></video> </div>
好比这个videobox在android下隐藏,只用display:none貌似仍是不行的,但加个z-index:-1,设置成-1就能够达到隐藏播放器控件的目的了。github
html5--移动端视频video的android兼容,去除播放控件、全屏等
MDN-Video
视频H5のVideo标签在微信里的坑和技巧
移动端HTML5视频播放优化实践
微信端视频播放问题web