H5案例分享:video的简单操作及在IOS和Android下的差异

2016-07-08 H5案例分享 H5案例分享

  这次小编与大家分享一下,如何对video做一些简单基本的操作,包括了播放器的播放、暂停,音量的读取、设置的相关操作。

一、获取影片总时长

  对video操作进行操作之前,应先给video标签加个id,便于我们获取video元素,这样我们就可以开启对video的探索之旅。首先要得到的是影片的一些信息,其中一个就是总时长。

 

<video id="video" controls preload="auto" width="100%" x-webkit-airplay="true" webkit-playsinline="true" poster="images/cover1.jpg" src="mp4/1.mp4"></video>

 

获取video视频总时长,要用到video的一个事件loadedmetadata,这个事件的触发表示元数据(媒体的一些基本信息)已经加载完成,用addEventListener监听事件

    var video = document.getElementById('video');//获取video元素

    myVideo.addEventListener("loadedmetadata", function(){

      //要执行的代码

    });

这时已经监听了,那么接下来要做的就是获取总时长,其实就是用到了video的一个属性:duration

    var video = document.getElementById('video');//获取video元素

    video.addEventListener("loadedmetadata", function(){

       totalTime = video.duration;//获取总时长

    });

需要注意的是获取到的在总时长的单位为秒,显示的时候可根据需要去转换。 

二、播放、暂停

  我们经常会需要对video设置播放或者暂停,播放或者暂停用到的video的两个方法就是play和pause

         //播放

       function play(){

           video.play();

       }

 

       //暂停

       function pause(){

           video.pause();

       }

三、获取影片的播放时间和设置播放点

  很多时候我们都想知道video视频播到哪了,这需要监听一个事件和获取一个属性的值,用到的是video的timeupdate事件和currentTime属性

    //更新播放时间点

   video.addEventListener("timeupdate", function(){

      var currentTime = video.currentTime; //获取当前播放时间

     console.log(currentTime); //在调试器中打印

 

     // 如果播放时间等于视频总时间,就暂停播放

     if(currentTime == totalTime){

        pause();

     }

   });

设置播放点,设置播放点用得还是currentTime属性,currentTime属性是可读写的,要注意的是设置值的单位是秒,如果播放点不是秒为单位那就要进行转换 

         //设置播放点

       function playBySeconds(num){

           video.currentTime = num;

       }

       playBySeconds(30); // 从30秒开始播放

四、音量的获取和设置

   获取音量可以直接用volume属性,但是在这里还要介绍的是音量改变的触发事件,方面以后需要自定义UI使用,那就是volumechange事件

     //改变音量

     video.addEventListener("volumechange", function(){

         var videoVolume = video.volume;//获取当前音量

         console.log(videoVolume);//在调试器中打印

     });

要注意的是音量的范围值为0~1,一般在UI中都是用百分比,所以需要的时候要进行转换

音量是可以通过改变属性来设置的,跟播放的时间点是相似的,只不过音量设置的是volume属性。

//设置音量

     function setVol(num){

         video.volume = num;

     }

     setVol(0.5);

案例演示:

 

五、一些常用且需要重点关注的video事件

event iOS Android
play 只是要播放视频,响应的是video.play()方法,并不代表已经开始播放 和iOS一样,仅是响应video.play()方法
durationchange 会执行一次,一定会获取到视频的duration 可能会执行多次,只有最后一次才能获取到真实的duration,前面的duration都是0;但低版本Android可能获取到的duration是0或1;(本文提到的低版本Android大部分是4.1以下)
canplay 可以认为是视频元素没有问题,可以运行,没有更多含义了,基本用不上 同iOS
canplaythrough 会有明确的缓冲,表示可以流畅播放了; 没有什么用,视频仍然会卡住,数据可能还没有开始加载;
playing 明确表示播放开始了; 依然没有用,视频可能并没有开始播放;
progress 有明确的下载,可以获取到当前的buffer,并且全部下载完毕后不在触发; 不一定有明确的数据下载,并且全部下载完毕后依然继续触发;
timeupdate 会有明确的进度变化,可以获取到currentTime; 进度不一定变化,currentTime可能总是0,但是第一次有currentTime变化的timeupdate事件一定代表了视频开始播放了;
error iOS中会有明确的错误抛出; Android中某些浏览器会莫名其妙的抛出error;
stalled 网络状况不佳,导致视频下载中断; 在没有play之前,也可能会抛出该事件。

 

六、属性差异

attributes iOS android
poster
封面图片
支持,但是加载速度明显比在中要慢; 不一定支持(浏览器厂商的实现标准不统一);
preload
预加载
iPhone不支持; 可能支持;
autoplay
自动播放
iPhone Safari中不支持,但在webview中可能被开启;iOS开发文档明确说明蜂窝网络下不允许autoplay; 可能支持;
loop
循环播放
支持 可能支持;
controls
控制条
支持,但是需要开始播放了才显示 基本都支持显示或者不显示
width和height 一定给出明确的属性设置,且不能为0; 如果不设置,仅仅通过CSS样式去控制视频大小,可能会导致标签失效。

 

七、其他怪异bug和不友好表现

iOS android
物理位置覆盖在video区域上的元素,click和touch等事件会失效,比如一个a链接如果覆盖在video上,那么点击后没有任何效果。 -
iOS8.0+中,单页面播放视频超过16个,再播放的视频全部MediaError解码异常无法播放。 -
iPhone的Safari会弹出一个全屏的播放器来播放视频,iPad则支持内联播放。iOS7+ 如果webview(比如微信)开启了webview.allowsInlineMediaPlayback = YES;,可以通过设置webkit-playsinline属性支持内联播放; 支持内联播放,但某些厂商会用自己的播放器劫持原生的视频播放;
下载视频时,会先发送一个2字节的请求来获取视频元数据(比如时长),然后再不断的发送分包续传(206)请求来下载视频,抓包显示请求数和请求量至少有一倍的冗余(x2),这个严重的bug在iOS8中有明显的修复,但是分包的206请求仍然会有冗余数据的下载,浪费了流量。 比iOS的处理方式好,没有第一个2字节请求,没有流量损耗;
- 低版本Android(<=4.0.4)中,video如果在有相对和决定定位的层中,可能会导致整个页面错位。
- 某些浏览器厂商会劫持video,用其“自己”的播放器来播放视频,“破坏”了产品本身的播放体验,那么只能case by case的解决了。
加载视频时没有进度提示,视觉上看不出是播放完了还是卡住了; 加载视频时,大都会显示一个自带的loading UI。

  


以上为“H5案例分享”团队原创文章,转载请注明出处!

标签

分享:
海报
案列链接
下载截图
收藏案例
已收藏
分享到微信朋友圈
打开微信,点击底部的“发现”,
使用“扫一扫”即可将网页分享至朋友圈。

相关推荐:

在移动端调用腾讯街景

html5移动开发细微之美

关注微信号:h5-share,获取更多创意H5案例分享!也可访问H5案例分享网站www.h5anli.com,搜索查阅~


阅读原文

微信扫一扫
关注该公众号

收藏

微信极速登录/注册

对汉语支持不错,别对小五说英文

微信公众号

提交案例

请pc端输入网址

"h5anli.com"

下载截图压缩包~

标签已提交成功

小编正在审核

请等待一下下啦

哎呀

标签已存在

换个新的呗~