当前位置:   article > 正文

在vue项目中使用vue-video-player播放m3u8视频文件_vue m3u8

vue m3u8

1.简介

Vue Video Player 是一个基于Vue.js 的视频播放器库,官方API Video.js API docs

m3u8是UTF-8编码格式。M3U8是指UTF-8编码的M3U文件,而M3U文件是记录了一个索引纯文本文件,打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。M3U8是一种常见的流媒体格式,主要以文件列表的形式存在,既支持直播又支持点播,尤其在Android、iOS等平台最为常用。

2.vue-video-player的安装

注意事项:

  • 记住下载这两个包就够了,千万不要下载video.js,因为vue-video-player会自动下载video.js,不然会冲突
  • videojs-contrib-hls该组件是要兼容m3u8格式视频才需要的,若是一般的mp4文件,则不需要
  • 需要注意的是如果你使用的是vue2,这里安装时要使用5以下的版本,目前最新的6.0.0版本只支持vue3.
  • 我这里老项目,所以本文以vue2为例
npm install vue-video-player@5.0.1 -save
npm install videojs-contrib-hls@5.15.0 -save 

 3.vue-video-player的使用

1.引入

在main.js文件里,引入vue-video-player的插件

import Vue from 'vue'

import VideoPlayer from 'vue-video-player'

//引入样式

import 'vue-video-player/src/custom-theme.css'

import 'video.js/dist/video-js.css'

import 'videojs-contrib-hls'

//使用组件

Vue.use(VideoPlayer)

2.简单使用

 在页面中,使用vue-video-player提供的<video-player>组件来播放视频

  1. <template>
  2. <div>
  3. <video-player class="video-player vjs-custom-skin" ref="videoPlayer" :options="playerOptions"></video-player>
  4. </div>
  5. </template>
  6. <script>
  7. export default {
  8. data() {
  9. return {
  10. playerOptions: {
  11. //视频url设置,直播流为例
  12. sources: [{
  13. src: 'https://d2zihajmogu5jn.cloudfront.net/bipbop-advanced/bipbop_16x9_variant.m3u8',//视频文件地址
  14. type: 'application/x-mpegURL'//视频类型,这里可以不写,如果写一定要写对,否则会无法播放
  15. }],
  16. // 其他设置项
  17. notSupportedMessage: "此视频暂无法播放,请稍后再试",//提示信息
  18. autoplay: true,//是否自动播放
  19. controls: true,是否显示控制栏
  20. poster: 'http://path/to/poster.jpg',//视频封面
  21. }
  22. }
  23. },
  24. mounted() {
  25. // 通过 ref 访问 videoPlayer 组件实例,播放
  26. this.$refs.videoPlayer.play()
  27. }
  28. }
  29. </script>

调用的时候使用这个对象操作,通过this.$refs.videoPlayer.player来设置属性和方法

this.$refs.videoPlayer.player

注意事项:

  • Vue Video Player 使用了 Video.js 库来实现视频播放,所以在使用前需要先引入 Video.js 的样式文件,video-player标签的class必须设置成“video-player vjs-custom-skin”,你引入的样式才能起作用。
  • Vue Video Player 默认使用了自定义主题样式,如果需要自定义样式,可以通过引入自定义的 CSS 文件来替换默认样式。
  • 可以通过修改 playerOptions 对象来配置播放器的行为,例如设置自动播放、是否显示控制栏等。
  • 可以通过 this.$refs.videoPlayer 来访问 videoPlayer 组件实例,并调用其提供的方法,例如播放、暂停等。
  • 支持添加多个 <source> 元素来支持不同格式的视频文件。
     

3.options常用属性

  • autoplay:是否自动播放,默认为false
  • controls:是否显示控制条(播放/暂停等),默认为true
  • muted:是否静音播放,默认false
  • loop:是否循环播放,默认false
  • playbackRats:定义课播放的速率,可以传入一个数组
  1. <vue-video-player
  2. :options="{ playbackRates: [0.5, 1, 1.5, 2] }">
  3. </vue-video-player>
  • poster:设置视频封面,图片地址
  • language:设置控件的语言;默认为’en’,可选值有’en’、'zh-CN’等。
  • sources:定义视频源,可以传入一个数组,每个元素包含一个源地址和类型(例如mp4或webm);默认为空。
  1. <vue-video-player
  2. :options="{ sources: [{ src: 'path/to/video.mp4', type: 'video/mp4' }] }">
  3. </vue-video-player>
  • aspectRatio:设置播放器的宽高比,可以传入一个字符串(形如’16:9’)或一个小数(宽度除以高度的比例);默认为空。

4.常用事件

  • ready:视频播放器准备好时触发。可以在该事件中执行一些初始化的操作,比如设置视频源、设置音量等。
  1. <video-player @ready="handleReady"></video-player>
  2. methods: {
  3. handleReady(player) {
  4. player.src = 'http://example.com/video.mp4';
  5. player.volume = 0.5;
  6. }
  7. }
  • start:视频开始播放时触发。可以在该事件中执行一些开始播放相关的操作,比如显示播放按钮、隐藏封面图等。
  • play:视频播放时触发。可以在该事件中执行一些播放相关的操作,比如显示暂停按钮、更新播放进度等。
  • pause:视频暂停时触发。可以在该事件中执行一些暂停相关的操作,比如显示播放按钮、暂停播放进度等。
  • ended:视频播放结束时触发。可以在该事件中执行一些播放结束相关的操作,比如显示重新播放按钮、跳转到下一个视频等。
  • error:视频出错时触发。可以在该事件中处理错误,比如显示错误提示、重新加载视频等。
  • timeupdate:视频播放时间更新时触发。可以在该事件中更新播放进度、展示视频当前时间等。
  • volumechange:视频音量变化时触发。可以在该事件中更新音量状态、展示当前音量等。
  • play:当音频/视频已开始或不再暂停时触发。
  • playing:当音频/视频在因缓冲而暂停或停止后已就绪时触发。
  • progress:当浏览器正在下载音频/视频时触发。
  • ratechange:当音频/视频的播放速度已更改时触发。
  • seeked:当用户已移动/跳跃到音频/视频中的新位置时触发。
  • seeking:当用户开始移动/跳跃到音频/视频中的新位置时触发。
  • stalled:当浏览器尝试获取媒体数据,但数据不可用时触发。
  • suspend:当浏览器刻意不获取媒体数据时触发。
  • timeupdate:当目前的播放位置已更改时触发。
  • volumechange:当音量已更改时触发。
  • waiting:当视频由于需要缓冲下一帧而停止时触发

5.常用方法

  • addTextTrack():向音频/视频添加新的文本轨道。
  • canPlayType():检测浏览器是否能播放指定的音频/视频类型。
  • load():重新加载音频/视频元素。
  • play():开始播放音频/视频。
  • pause():暂停当前播放的音频/视频。
  1. this.$refs.videoPlayer.player.play() // 播放
  2. this.$refs.videoPlayer.player.pause() // 暂停
  3. this.$refs.videoPlayer.player.src(src) // 重置进度条复制代码
6.一些回调函数demo

  1. <template>
  2. <div class='demo'>
  3. <video-player class="video-player vjs-custom-skin"
  4. ref="videoPlayer"
  5. :playsinline="true"
  6. :options="playerOptions"
  7. @play="onPlayerPlay($event)"
  8. @pause="onPlayerPause($event)"
  9. @ended="onPlayerEnded($event)"
  10. @waiting="onPlayerWaiting($event)"
  11. @playing="onPlayerPlaying($event)"
  12. @loadeddata="onPlayerLoadeddata($event)"
  13. @timeupdate="onPlayerTimeupdate($event)"
  14. @canplay="onPlayerCanplay($event)"
  15. @canplaythrough="onPlayerCanplaythrough($event)"
  16. @statechanged="playerStateChanged($event)"
  17. @ready="playerReadied"
  18. >
  19. </video-player>
  20. </div>
  21. </template>
  22. <script>
  23. export default {
  24. methods: {
  25. // 播放回调 视频系列 start
  26. onPlayerPlay(player) {
  27. console.log("player play!", player);
  28. },
  29. // 暂停回调
  30. onPlayerPause(player) {
  31. console.log("player pause!", player);
  32. },
  33. // 视频播完回调
  34. onPlayerEnded($event) {
  35. console.log(`player`, $event);
  36. },
  37. // DOM元素上的readyState更改导致播放停止
  38. onPlayerWaiting($event) {
  39. console.log(`player`, $event);
  40. },
  41. // 已开始播放回调
  42. onPlayerPlaying($event) {
  43. console.log(`player`, $event);
  44. },
  45. // 当播放器在当前播放位置下载数据时触发
  46. onPlayerLoadeddata($event) {
  47. console.log(`player`, $event);
  48. },
  49. // 当前播放位置发生变化时触发。
  50. onPlayerTimeupdate($event) {
  51. console.log(`player`, $event);
  52. },
  53. //媒体的readyState为HAVE_FUTURE_DATA或更高
  54. onPlayerCanplay(player) {
  55. console.log("player Canplay!", player);
  56. },
  57. //媒体的readyState为HAVE_ENOUGH_DATA或更高。这意味着可以在不缓冲的情况下播放整个媒体文件。
  58. onPlayerCanplaythrough(player) {
  59. console.log("player Canplaythrough!", player);
  60. },
  61. //播放状态改变回调
  62. playerStateChanged(playerCurrentState) {
  63. // console.log('player current update state', playerCurrentState);
  64. if (playerCurrentState.timeupdate > 3 * 60 && this.freeBl) {
  65. this.$refs.videoPlayer.player.pause();
  66. this.free = this.freeBl;
  67. }
  68. },
  69. //将侦听器绑定到组件的就绪状态。与事件监听器的不同之处在于,如果ready事件已经发生,它将立即触发该函数。。
  70. playerReadied(player) {
  71. console.log("example player 1 readied", player);
  72. },
  73. // 视频 end
  74. }
  75. }
  76. </script>
 
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/79523
推荐阅读
相关标签
  

闽ICP备14008679号