【H5】video兼容性问题以及解决对策

一:设置playsinline不全屏播放

 <video
      id="videoplay"
      src={[require("./../../assets/laterImg/westlake.mp4")]}
      playsInline={ true }           //react项目中警告,所以把true用{}包起来了
      webkit-playsinline="true"     //兼容ios
      x5-playsinline="true"        //兼容安卓
   /> 

二:设置 x5­video­player­fullscreen 全屏方式

<video id="videoplay" src="xxx" x5-video-player-type="h5" x5-video-player-fullscreen="true"/>
注意:需要重新监听resize事件监听窗口大小变化
window.onresize = function(){
videoplay.style.width = window.innerWidth + "px";
videoplay.style.height = window.innerHeight + "px";
}

三:设置 x5­video­orientation 播放器横竖屏方向

横屏
<video x5-video-orientation="landscape"/>
竖屏
<video x5-video-orientation="portrait"/>
跟随手机自动旋转
<video x5-video-orientation="landscape|portrait"/>
注: 此属性只在声明了 x5­video­player­type="h5" 情况下生效

四:设置 WeixinJSBridgeReady 自动播放

注意:用这种方法安卓版本的微信仍然不能实现自动播放,但是ios版本微信可以

index.html引入微信插件

<script src="http://res.wx.qq.com/open/js/jweixin-1.2.0.js" type="text/javascript" charset="utf-8"></script>

demo.js

//如果是react项目需要将这一大堆放在componentDIDMount中,vue项目放在mounted中,
//因为在这个生命周期才能够形成真正的dom
let videoplay = document.getElementById("videoplay");
if(videoplay){  
 document.addEventListener("WeixinJSBridgeReady",function() { 
          videoplay.play(); 
        }, false);
}

那么问题来了:我刚才说这个方法不兼容安卓版本的微信,但是如果需求不能改变的情况下怎么做呢,比较简单的做法有两种,这两种方法我都尝试了,下面分享出来:

实现自动播放全部兼容

方法一:将视频通过软件或者找公司的UI做成gif格式的,不用浪费太多时间,那么加载出来就是一张动图代码如下:
<img src={[require("./../../assets/laterImg/westlake.gif")]} width="96%"alt=""/> 

但是这个方法有很明显的缺点:1.做成GIF格式的动图所占大小偏大,2.清晰度上会受到一定的影响
如果公司在这两点有要求比较苛刻的话可以采取下一种方式

方法二:将原视频切成一帧一帧的图片,找公司UI,通过一个软件弄出来,很快的,这个时候自己一定要寻求公司其他UI同事的帮助,你需要做的是多想办法实现最终效果

具体实现:循环图片,设置定时器,在一个标签中变化图片的路径

import React, { Component } from "react";
class IndexT extends Component {
  state={
    pictures:[]
  }
  componentDidMount() {
    let pics = document.getElementById("pics");
    if(pics){
     let modals=[];
      for (let i = 0; i < 149; i++) {
        if(i<10){
          modals.push(<img src={require(`./../../assets/xihu/xihu_0000${i}.jpg`)} alt=""/>)  
        }else if(10<i & i < 100){
          modals.push(<img src={require(`./../../assets/xihu/xihu_000${i}.jpg`)} alt=""/>)  
        }else if(100<=i & i <149){
          modals.push(<img src={require(`./../../assets/xihu/xihu_00${i}.jpg`)} alt=""/>)  
        }
      }

      let pic = document.getElementById("pic");
      let time = 0;
      function cycle(){
       time++;
       pic.src=modals[time].props.src
       if(time === 147){
        time = 0 
       }
       setTimeout(cycle,66.7);
      }
      cycle()
    }
  }

  render() {
    return (
      <div id="pics" >
        测试一下
        <img src={require("./../../assets/xihu/xihu_00001.jpg")} alt="" id="pic" style={{width:"100%"}}/>
      </div>
    );
  }
}
export default IndexT;

完整项目代码可以拉取我传在gitHub上的代码https://github.com/topvae/h5video

另外还有一种自己没有尝试的方法,用canvas,由于自己没有做demo,在此不做过多解释,官网如下:https://developer.mozilla.org/zh-CN/docs/Web/API/Canvas_API/Manipulating_video_using_canvas

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 之前的项目中有使用的video的原因,所以也踩了不少的坑。好久之前的总结了,今天打算找出来共享一下使用vodeo标...
    ismyshellyiqi阅读 20,563评论 1 22
  • 做过微信H5视频的大胸弟们肯定受到过成吨的伤害甚至多到怀疑人生的地步,自动全屏,不能全屏,不能自动播放,Andro...
    不懂小彬阅读 16,797评论 1 4
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,250评论 4 61
  • 你有没有爱过一个不可能的人? 那种感觉就是,你们明明互相喜欢,有着很合的三观,在一起的时候能忘记所有的不快乐,看到...
    常小常的夏日阅读 457评论 0 5
  • 有本书叫《牛奶可乐经济学》,书里说,产品的设计不仅要考虑消费者的心理,更重要的是要符合成本和收益原则。 比如为什么...
    williie007阅读 264评论 1 0