一、m3u8文件

第一次接触这种m3u8格式的视频文件,开始以为类似与.mp4这种,所以在项目中我通过html5提供的video标签做播放功能发现并不能成功,后来了解到M3U8文件是一种UTF-8编码格式的M3U文件,而M3U文件是记录一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放,种种格式常见在直播视频,监控视频。
简单的说,m3u8存放的是播放列表,视频以另一种格式储。如果使用mp4那么在多个分块直接播放时,就会出现卡顿。
m3u8不是video标签的支持的标准格式,也就是说这样的常规操作

<video width="320" height="240" controls><source src="a.m3u8"  type=application/x-mpegURL>
</video>

是无法实现的。

二、遇到的问题

看了许多解决问题的文章: https://my.oschina.net/u/3263153/blog/1805378.类似与此都是使用videojs这个开源内容,外加一层皮肤。我也尝试了很多次,反反复复地安装和卸载video.js和videojs-contrib-hls两个包,出现的问题是不论实在全局或者是需要的组件里面一旦import这两个包就会报错,也尝试着通过源码解决问题,但始终没能成功。
看了一些文章,有说是因为videojs版本的问题,很多朋友使用videojs 7.0+时,也会出现这种问题,也有说是因为node.js的内部自带了video.js当我们再install video.js就会产生冲突。说法不一,我也都尝试过,始终没有成功。

二、解决方法

刚刚说过m3u8是存放的是视频列表,而不是视频文件。
贴代码

 playVideo () {this.$refs.videolist.innerHTML='';this.videoList.push(this.vidoeSrc)let idArr = [];this.videoList.forEach((item,index)=>{var dynamicDom = document.createElement('div');dynamicDom.style.width = 30 +'%';dynamicDom.style.float = 'left';dynamicDom.style.overflow = 'hidden';dynamicDom.id = 'site' + index;dynamicDom.className ='wd50005 vh50005 pl005 pr005 pb005 ml005'let obj = {};obj.id = dynamicDom.id;//dom对应的idobj.url = this.videoItem.playurl// 测试视频// obj.url = "https://bitdash-a.akamaihd.net/content/sintel/hls/playlist.m3u8"idArr.push(obj);console.log(idArr);this.$refs.videolist.appendChild(dynamicDom);});this.mountVideoFn(idArr);},mountVideoFn(idArr){for(var i = 0;i < idArr.length;i ++){var player = 'player'+i;player = new TcPlayer(idArr[i].id, {m3u8: idArr[i].url,autoplay: this.videoAutoPlay,// coverpic: "http://www.test.com/myimage.jpg",width: "100%", height: "100%" });}},

动态生成了一个视频播放的容器,点击播放的时候遍历拿到每一条视频。

beforeDestroy() {this.videoAutoPlay = false;this.$refs.videolist.innerHTML='';},

在mounted钩子函数中调用一次函数获取视频列表。
在beforeDestroy钩子函数中初始化这个容器以及暂停自动播放。

这里面还有很多学问,像字幕,加密,清晰度等,我暂时还没有接触,以后遇到了再和大家分享

第一次在Vue项目中播放m3u8格式视频遇到的问题和解决方法相关推荐

  1. vue项目中使用组件库设置样式不生效的解决方法

    scoped 实现原理 实现组件的私有化,不对全局造成样式污染 ,我们使用scoped 作用:声明的样式只对当前组件生效 <style lang="less" scoped& ...

  2. vue使用原生videojs 播放m3u8格式的视频——播放m3u8格式视频(一)

    vue使用原生video播放m3u8格式的视频 1.安装依赖 2.页面引入插件(这里我是页面单独引入,减少项目体积) 3.页面中的使用 常见问题 4.实现过程 5.实现.m3u8格式视频播放方法 1. ...

  3. uniapp H5 项目 播放 m3u8格式视频

    uniapp H5 项目 播放 m3u8格式视频 阐述 在项目中,可能会获取一些直播流地址,比如最常见的就是.m3u8视频格式.在小程序可以直接使用video 标签就可以直接播放,因为小程序有自己的引 ...

  4. 通过Vue+flvjs在HTML5中播放flv格式视频文件—demo及api

    目前主流浏览器不能直接嵌入并且播放FLV文件,所以直接用video标签播放是行不通的. 因此提供两种解析方法 嵌入一个swf媒体播放文件,并利用该文件来播放你预设的文件. 这里推荐dplayer--h ...

  5. video插件播放m3u8格式视频(存原生)

    video插件播放m3u8格式视频(存原生) 这里使用原生的javascript实现m3u8格式视频播放. 使用了包括video.min.js库和HLS插件. 1-基础使用 <!DOCTYPE ...

  6. Video 标签播放 m3u8 格式视频

    在不借助流媒体播放器的前提下,直接播放 m3u8 格式的视频文件 更多精彩 更多技术博客,请移步 IT人才终生实训与职业进阶平台 - 实训在线 写在前面的话 为什么要播放 m3u8 格式的视频 对于一 ...

  7. srs服务器播放文件,使用SRS+ffmpeg搭建流媒体服务器播放m3u8格式视频

    1.简介 srs是一个简单的流媒体开源直播软件,ffmpeg是完整的跨平台解决方案,用于记录,转换和流传输音频和视频. 2.相关 官网下载页面:点击我到达 在线演示播放页面:点击我到达 Git页面:点 ...

  8. video标签播放m3u8格式视频-------html页面

    m3u8是苹果公司推出一种视频播放标准,是m3u的一种,不过 编码方式是utf-8,是一种文件检索格式,将视频切割成一小段一小段的ts格式的视频文件,然后存在服务器中(现在为了减少I/o访问次数,一般 ...

  9. vue项目Error: Cannot find module ‘xxx’类报错的解决方法

    现发现只要是报错 Error: Cannot find module 'xxx'(例如 Error: Cannot find module 'webpack')这类的问题都可以用下面的方法解决. 报错 ...

最新文章

  1. centos 7 文档服务器,centos 7 web服务器
  2. 第十三周项目二-动物这样叫(1)
  3. 小米6自动重启android,小米6充电重启怎么办 小米6充电自动重启解决方法
  4. POJ 3241Object Clustering曼哈顿距离最小生成树
  5. 将json 填入表格_如何将Google表格用作JSON端点
  6. 当浙江“十万企业上云“遇见中国软件生态大会
  7. 对象删除某个属性_JS对象基本用法
  8. c++下字符串分割函数split实现
  9. 关于域名的那些“彩蛋”
  10. css盒模型(附图解)
  11. POJ 3083 Children of the Candy Corn(DFS + BFS)
  12. 极域电子教室64位破解版|极域电子教室软件64位破解版下载v6.0
  13. 计算机硬盘大小一般都是整数,电脑硬盘如何精准整数分区
  14. excel表格筛选某一列重复数据
  15. 19.IIC通信:PCF8591:数模/模数转换芯片
  16. OAF: 怎样创建 DFF
  17. 计算机视觉基础知识:射影变换,仿射变换,相似变换(比例变换),刚性变换
  18. CocosEditor For JS (Cocos2d-JS) 教程聚合和代码下载
  19. 利用kali暴力破解获取windows账号密码
  20. SPRING系列一之 依赖注入

热门文章

  1. postman接口自动化(三)变量设置与使用
  2. 系列推荐 |《最强的 VLC 多媒体开发教程》
  3. 几何分布的期望公式的推导
  4. 设备管理---要点练习及总结
  5. 跟着小马哥学系列之 Spring AOP(AbstractAutoProxyCreator 详解)
  6. 云创大数据荣膺英特尔“行业贡献奖”
  7. 逆向初学者做题记录3.28
  8. winform 鼠标拖动移动图片位置
  9. 第七周 项目四-队列数组
  10. (已解决)579B但答案仍旧错误terminate called after throwing an instance of ‘ std::bad_array_length‘,