最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • Win7 IE11中使用Videojs播放HLS视频

    正文概述 掘金(junlinguo11)   2021-01-19   836

    起因

    需求大概就是页面支持播放HLS视频,并且最低适配到ie11。

    播放器选用了Video.js7,Video.js7内置了videojs-http-streaming (VHS)插件,原生支持播放HLS视频。与Vue结合体验很好:

    播放器源码大概是这样,还引入了videojs-playlist用于实现播放列表:

    <template>
      <div class="video">
        <video ref="videoPlayer" class="video-js"></video>
      </div>
    </template>
    
    <script>
    import videojs from 'video.js';
    import 'videojs-playlist';
    
    export default {
      name: 'VideoPlayer',
      props: {
        playlist: {
          type: Array,
          required: true,
        },
        selectedVideoIndex: {
          type: Number,
          default: 0,
        },
      },
      data() {
        return {
          player: null,
        };
      },
      watch: {
        playlist(newValue) {
          if (!this.player) return;
    
          this.player.playlist(newValue);
          this.player.playlist.autoadvance(0);
        },
        ...
      },
      mounted() {
        const that = this;
    
        this.player = videojs(
          this.$refs.videoPlayer,
          {
            controls: true,
            fill: true,
            autoplay: true,
            preload: true,
          },
          function onPlayerReady() {
            this.on('canplay', that.handleVideoCanPlay);
            this.on('waiting', that.handleVideoWaiting);
            this.on('play', that.handleVideoStart);
            this.on('pause', that.handleVideoPause);
            this.on('playlistitem', that.handleVideoChange);
            this.on('error', (err) => that.handleError(err));
          }
        );
      },
      methods: {
        ...
      },
    };
    </script>
    <style scoped>
    ...
    </style>
    
    

    功能测试和兼容性测试阶段都没有发现什么问题,直到一位同事用他的win7笔记本打开了播放页面。。。

    Win7 IE11中使用Videojs播放HLS视频

    结果就是在win7的ie11上完全播不了视频,立即谷歌原因,找到:

    • github.com/videojs/vid…
    • juejin.cn/post/684490…

    解决方式

    根据上面的链接,videojs的开发者建议在win7 ie11上利用flash播放器播放HLS视频,于是我们需要引入两个库:

    • videojs-flash 允许videojs通过flash播放视频
    • videojs-flashls-source-handler 提供了特殊的swf文件,允许flash播放HLS视频

    修改代码

    1. 首先在播放器组件引入两个库:
    import videojs from 'video.js';
    import 'videojs-playlist';
    import 'videojs-flash';
    import '@brightcove/videojs-flashls-source-handler';
    
    1. 然后在新建播放器实例时,声明techOrder属性,优先使用html5播放器,当无法播放时使用flash播放器:
      mounted() {
        const that = this;
    
        this.player = videojs(
          this.$refs.videoPlayer,
          {
            controls: true,
            fill: true,
            autoplay: true,
            preload: true,
            techOrder: ['html5', 'flash'],
          },
          function onPlayerReady() {
            this.on('canplay', that.handleVideoCanPlay);
            this.on('waiting', that.handleVideoWaiting);
            this.on('play', that.handleVideoStart);
            this.on('pause', that.handleVideoPause);
            this.on('playlistitem', that.handleVideoChange);
            this.on('error', (err) => that.handleError(err));
          }
        );
    }
    
    1. 最重要的是提供那个特殊的swf文件(用于播放HLS视频)的位置,供videojs-flash取用

    这里使用的是官方提供的CDN链接,但更推荐将此文件部署在自己的服务器上取用

      mounted() {
        const that = this;
    
        this.player = videojs(
          this.$refs.videoPlayer,
          {
            controls: true,
            fill: true,
            autoplay: true,
            preload: true,
            techOrder: ['html5', 'flash'],
            flash: {
              swf: 'https://unpkg.com/@brightcove/videojs-flashls-source-handler/dist/video-js.swf',
            },
          },
          function onPlayerReady() {
            this.on('canplay', that.handleVideoCanPlay);
            this.on('waiting', that.handleVideoWaiting);
            this.on('play', that.handleVideoStart);
            this.on('pause', that.handleVideoPause);
            this.on('playlistitem', that.handleVideoChange);
            this.on('error', (err) => that.handleError(err));
          }
        );
    }
    

    代码修改到此结束,想看效果?别忘了下载Flash Player,不然还是播放不了的。

    Flash Player下载

    下载完成后刷新页面!我靠,怎么还是播不了。。。只不过这回换了个报错:

    VIDEOJS: ERROR: (CODE:0 MEDIA_ERR_CUSTOM)  MediaError {type: "FLASHLS_ERR_CROSS_DOMAIN", origin: "flash", message: ""}
    

    解决跨域

    查询了一下问题原因

    github.com/videojs/vid… www.cnblogs.com/tv151579/p/…

    总结一下,也就是说我们页面域(a.com)下的swf文件会自动去请求媒体文件域(b.com)根目录下的一个crossdomain.xml文件,来确认该媒体文件能否被页面域访问。如果没有该文件或域名不匹配,则会报跨域错误。

    crossdomain.xml配置规则

    配置好了crossdomain.xml,将它部署到媒体文件域(b.com)根目录即可。

    当你刷新播放页面能够看到这个请求被成功处理,说明该文件已成功部署 Win7 IE11中使用Videojs播放HLS视频

    截止目前,win7 IE11上已能成功播放HLS视频!!! 接下来的工作就是需要给用户一个升级或者下载Flash Player的提示~


    起源地下载网 » Win7 IE11中使用Videojs播放HLS视频

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元