在vue项目中使用vue-video-player播放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>组件来播放视频

<template><div><video-player class="video-player vjs-custom-skin" ref="videoPlayer" :options="playerOptions"></video-player></div>
</template><script>
export default {data() {return {playerOptions: {//视频url设置,直播流为例sources: [{src: 'https://d2zihajmogu5jn.cloudfront.net/bipbop-advanced/bipbop_16x9_variant.m3u8',//视频文件地址type: 'application/x-mpegURL'//视频类型,这里可以不写,如果写一定要写对,否则会无法播放}],// 其他设置项notSupportedMessage: "此视频暂无法播放,请稍后再试",//提示信息autoplay: true,//是否自动播放controls: true,是否显示控制栏poster: 'http://path/to/poster.jpg',//视频封面}}},mounted() {// 通过 ref 访问 videoPlayer 组件实例,播放this.$refs.videoPlayer.play()}
}
</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:定义课播放的速率,可以传入一个数组
<vue-video-player 
:options="{ playbackRates: [0.5, 1, 1.5, 2] }">
</vue-video-player>
  • poster:设置视频封面,图片地址
  • language:设置控件的语言;默认为’en’,可选值有’en’、'zh-CN’等。
  • sources:定义视频源,可以传入一个数组,每个元素包含一个源地址和类型(例如mp4或webm);默认为空。
<vue-video-player 
:options="{ sources: [{ src: 'path/to/video.mp4', type: 'video/mp4' }] }">
</vue-video-player>
  • aspectRatio:设置播放器的宽高比,可以传入一个字符串(形如’16:9’)或一个小数(宽度除以高度的比例);默认为空。

4.常用事件

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

5.常用方法

  • addTextTrack():向音频/视频添加新的文本轨道。
  • canPlayType():检测浏览器是否能播放指定的音频/视频类型。
  • load():重新加载音频/视频元素。
  • play():开始播放音频/视频。
  • pause():暂停当前播放的音频/视频。
this.$refs.videoPlayer.player.play() // 播放
this.$refs.videoPlayer.player.pause() // 暂停
this.$refs.videoPlayer.player.src(src) // 重置进度条复制代码
6.一些回调函数demo
  <template><div class='demo'><video-player class="video-player vjs-custom-skin" ref="videoPlayer" :playsinline="true" :options="playerOptions"@play="onPlayerPlay($event)" @pause="onPlayerPause($event)"@ended="onPlayerEnded($event)"@waiting="onPlayerWaiting($event)"@playing="onPlayerPlaying($event)"@loadeddata="onPlayerLoadeddata($event)"@timeupdate="onPlayerTimeupdate($event)"@canplay="onPlayerCanplay($event)"@canplaythrough="onPlayerCanplaythrough($event)"@statechanged="playerStateChanged($event)"@ready="playerReadied"></video-player></div></template><script>export default {methods: {// 播放回调 视频系列 startonPlayerPlay(player) {console.log("player play!", player);},// 暂停回调onPlayerPause(player) {console.log("player pause!", player);},// 视频播完回调onPlayerEnded($event) {console.log(`player`, $event);},// DOM元素上的readyState更改导致播放停止onPlayerWaiting($event) {console.log(`player`, $event);},// 已开始播放回调onPlayerPlaying($event) {console.log(`player`, $event);},// 当播放器在当前播放位置下载数据时触发onPlayerLoadeddata($event) {console.log(`player`, $event);},// 当前播放位置发生变化时触发。onPlayerTimeupdate($event) {console.log(`player`, $event);},//媒体的readyState为HAVE_FUTURE_DATA或更高onPlayerCanplay(player) {console.log("player Canplay!", player);},//媒体的readyState为HAVE_ENOUGH_DATA或更高。这意味着可以在不缓冲的情况下播放整个媒体文件。onPlayerCanplaythrough(player) {console.log("player Canplaythrough!", player);},//播放状态改变回调playerStateChanged(playerCurrentState) {//   console.log('player current update state', playerCurrentState);if (playerCurrentState.timeupdate > 3 * 60 && this.freeBl) {this.$refs.videoPlayer.player.pause();this.free = this.freeBl;}},//将侦听器绑定到组件的就绪状态。与事件监听器的不同之处在于,如果ready事件已经发生,它将立即触发该函数。。playerReadied(player) {console.log("example player 1 readied", player);},// 视频 end}}</script>
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/175781.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机网络:快速了解网络框架

文章目录 前言一、什么是Internet&#xff1f;1.从具体构成角度什么是协议&#xff1f; 2.从服务角度3小结 二、网络边缘1.采用网络设施面向连接服务&#xff08;TCP&#xff09;2.采用基础设施的无连接服务&#xff08;UDP&#xff09; 三、网络的核心1.电路交换2.分组交换3.分…

时间数据与字符串间相互转换

1. 字符串转成时间 使用datetime.strptime from datetime import datetime start_date "2023-11-28" start_datetime datetime.strptime(start_date, "%Y-%m-%d") print(start_date,start_date) print(start_datetime,start_datetime) print(type(star…

Android : 获取、添加、手机联系人-ContentResolver简单应用

示例图&#xff1a; MainActivity.java package com.example.mygetdata;import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat;import android.Mani…

什么是关系型数据库?

什么是关系型数据库&#xff1f; 关系型数据库&#xff08;RDBMS&#xff09;是建立在关系模型基础上的数据库系统。关系模型是一种数据模型&#xff0c;它表示数据之间的联系&#xff0c;包括一对一、一对多和多对多的关系。在关系型数据库中&#xff0c;数据以表格的形式存储…

Vue项目上线后关闭chroma的vue-devtools调试工具

在项目的main文件中添加如下代码&#xff1a; // 通过设置环境变量 注释生产环境的debug devtools 生产提示 const isDebugMode process.env.NODE_ENV ! production; Vue.config.debug isDebugMode; Vue.config.devtools isDebugMode; Vue.config.productionTip isDebugM…

2024 年应该使用 Bun、Node.js 还是 Deno

2024 年应该使用 Bun、Node.js 还是 Deno 到 2024 年&#xff0c;构建基于 JavaScript 的现代 API 相对简单。我们可以使用Express.js等库并在几分钟内启动可用的 API。但是&#xff0c;现在最具挑战性的部分是选择正确的 JavaScript 引擎。 目前主流的三个运行时是&#xff…

Logstash 部署

目录 1.安装配置Logstash &#xff08;1&#xff09;安装 &#xff08;2&#xff09;测试文件 &#xff08;3&#xff09;配置 服务器 安装软件主机名IP地址系统版本配置LogstashElk10.3.145.14centos7.5.18042核4G 软件版本&#xff1a;logstash-7.13.2.tar.gz 1.安装配…

Android 单元测试初体验(二)-断言

[TOC](Android 单元测试初体验(二)-断言) 前言 当初在学校学安卓的时候&#xff0c;老师敢教学进度&#xff0c;翻到单元测试这一章节的时候提了两句&#xff0c;没有把单元测试当重点讲&#xff0c;只是说我们工作中几乎不会用到&#xff0c;果真在之前的几年工作当中我真的没…

95.STL-遍历算法 for_each

算法概述: 算法主要是由头文件 <algorithm> <functional> <numeric> 组成。 <algorithm> 是所有STL头文件中最大的一个&#xff0c;范围涉及到比较、 交换、查找、遍历操作、复制、修改等等 <numeric> 体积很小&#xff0c;只包括几个在序列上面…

第1章 爬虫基础

目录 1. HTTP 基本原理1.1 URI 和 URL1.2 HTTP 和 HTTPS1.3 请求1.3.1 请求方法1.3.2 请求的网址1.3.3 请求头1.3.4 请求体 1.4 响应1.4.1 响应状态码1.4.2 响应头1.4.3 响应体 2. Web 网页基础2.1 网页的组成2.1.1 HTML2.1.2 CSS2.1.3 JavaScript 2.2 网页的结构2.3 节点树及节…

kubenates的傻瓜式部署教程(K8S部署教程)

推荐配置 主节点2C4G&#xff0c;两个从节点2C2G即可 操作系统我用的centos 一、Dokcer环境安装&#xff08;阿里云环境&#xff09; 1.1 下载docker实例 sudo wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo…

【LeetCode】69. x的平方根

69. x的平方根 难度&#xff1a;简单 题目 给你一个非负整数 x &#xff0c;计算并返回 x 的 算术平方根 。 由于返回类型是整数&#xff0c;结果只保留 整数部分 &#xff0c;小数部分将被 舍去 。 **注意&#xff1a;**不允许使用任何内置指数函数和算符&#xff0c;例如…

人工智能 -- 技术概览

1、我们身处人工智能的时代 人们从早期做web开发&#xff0c;到移动端的开发&#xff1b;之后随着数据量的增大&#xff0c;人们开始研究高并发的问题&#xff1b;当数据量不断的增大&#xff0c;而人们希望数据不被浪费时&#xff0c;产生了大数据的技术&#xff0c;包括&…

正则表达式 通配符 awk文本处理工具

目录 什么是正则表达式 概念 正则表达式的结构 正则表达式的组成 元字符 元字符点&#xff08;.&#xff09; 代表字符. 点值表示点需要转义 \ r..t 代表r到t之间任意两个字符 过滤出小写 过滤出非小写 space空格 [[:space:]] 表示次数 位置锚定 例&#xff1a…

第三节HarmonyOS DevEco Studio了解基本工程目录

一、工程级目录 工程的目录结构如下。 目录详情如下&#xff1a; AppScope&#xff1a;存放应用全局所需要的资源文件。Entry&#xff1a;应用的主模块&#xff0c;存放HarmonyOS应用的代码、资源等。oh_modules&#xff1a;工程的依赖包&#xff0c;存放工程依赖的源文件。b…

Umi-OCR图片批量识别文字工具

OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/粘贴/批量导入图片&#xff0c;段落排版/排除水印&#xff0c;扫描/生成二维码。内置多国语言库。 项目地址&#xff1a;https://github.com/hiroi-sora/Umi-OCR

app分发平台应用费用一般要怎么评估的?

评估app分发平台应用的费用&#xff0c;需要考虑多个因素&#xff0c;包括但不限于以下几点&#xff1a; 项目范围和工作量&#xff1a;全面评估项目的范围和工作量&#xff0c;包括项目目标、技术、设计和开发周期等&#xff0c;有助于确定所需的团队规模、时间和预算。预算制…

深度学习之图像分类(十四)CAT: Cross Attention in Vision Transformer详解

IPSA和CPSA的处理流程、维度变换细节 FLOPs的计算方法、以及flops和划分的patch数目以及patch的维度计算关系 IPSA如何进行local attention、CPSA如何进行globe attention CAT的代码详细注释---需要学习完Transformer TNT、swin transformer、crossViT CAT: Cross Atten…

C语言——打印出所有的“水仙花数”

所谓水仙花数,是指一个3位数,其各位数字立方和等于该数本身。水仙花数是指一个三位数&#xff0c;它的每个位上的数字的立方和等于它本身。例如&#xff0c;153是一个水仙花数&#xff0c;因为1^3 5^3 3^3 153。 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>…

Scrapy爬虫异步框架(一篇文章齐全)

1、Scrapy框架初识 2、Scrapy框架持久化存储&#xff08;点击前往查阅&#xff09; 3、Scrapy框架内置管道&#xff08;点击前往查阅&#xff09; 4、Scrapy框架中间件&#xff08;点击前往查阅&#xff09; Scrapy 是一个开源的、基于Python的爬虫框架&#xff0c;它提供了…