Vue3 視頻播放器完整指南 – @videojs-player/vue 從入門到精通

前言

在?Vue?3 生態中,視頻播放功能是許多應用的核心需求。@videojs-player/vue?是一個專門為?Vue 3?設計的視頻播放器組件,基于成熟的 Video.js?庫構建,提供了簡單而強大的視頻播放解決方案。

主要特性

  • Vue 3 組件化:原生 Vue 3 組件,完美融入組合式 API
  • 功能豐富:支持多種視頻格式、直播流、字幕等
  • 高度可定制:支持主題、插件、控制欄等多種自定義選項
  • TypeScript 支持:完整的類型定義
  • 響應式設計:自適應不同屏幕尺寸

安裝方式

# npm
npm install video.js @videojs-player/vue# yarn
yarn add video.js @videojs-player/vue# pnpm
pnpm add video.js @videojs-player/vue

快速上手

基礎用法

<template><div class="text-center"><h2 class="text-2xl font-bold p-2">基礎視頻播放器</h2><VideoPlayersrc="https://vjs.zencdn.net/v/oceans.mp4"poster="https://github.surmon.me/images/poster/oceans.png":controls="true":fluid="true"/></div>
</template><script setup>
import { VideoPlayer } from "@videojs-player/vue";
import "video.js/dist/video-js.css";
</script>

自定義配置

<template><div><h2>自定義配置播放器</h2><VideoPlayer :options="videoOptions" @ready="onPlayerReady" /></div>
</template><script setup>
import { ref } from "vue";
import { VideoPlayer } from "@videojs-player/vue";
import "video.js/dist/video-js.css";const videoOptions = ref({autoplay: "muted", // 自動播放controls: true, // 是否顯示控制欄responsive: true, // 是否響應式fluid: true, // 是否自適應父容器寬度loop: true, // 是否循環播放playbackRate: 2, // 播放速度playbackRates: [0.5, 1, 1.5, 2], // 播放速度選項sources: [{src: "https://vjs.zencdn.net/v/oceans.mp4",type: "video/mp4",},],poster: "https://github.surmon.me/images/poster/oceans.png",
});const onPlayerReady = (player) => {console.log("播放器已準備就緒", player);
};
</script>

高級用法

播放器控制

<template><divclass="min-h-screen bg-gradient-to-br from-slate-900 via-purple-900 to-slate-900 p-8"><div class="max-w-4xl mx-auto"><!-- 標題 --><h1class="text-3xl font-bold text-white text-center mb-8 bg-gradient-to-r from-blue-400 to-purple-400 bg-clip-text text-transparent">視頻播放器演示</h1><!-- 視頻播放器容器 --><divclass="bg-white/10 backdrop-blur-sm rounded-2xl p-6 shadow-2xl border border-white/20"><video-player:options="videoOptions"@mounted="handleMounted"class="w-full h-auto max-w-full rounded-xl overflow-hidden shadow-lg"/></div><!-- 控制按鈕區域 --><divclass="mt-8 bg-white/10 backdrop-blur-sm rounded-2xl p-6 shadow-2xl border border-white/20"><h2 class="text-xl font-semibold text-white mb-4 text-center">播放控制</h2><div class="flex flex-wrap gap-4 justify-center"><button@click="play"class="px-6 py-3 bg-gradient-to-r from-green-500 to-emerald-600 hover:from-green-600 hover:to-emerald-700 text-white font-semibold rounded-lg shadow-lg hover:shadow-xl transform hover:scale-105 transition-all duration-200 flex items-center gap-2"><svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"><path d="M8 5v10l8-5-8-5z" /></svg>播放</button><button@click="pause"class="px-6 py-3 bg-gradient-to-r from-yellow-500 to-orange-600 hover:from-yellow-600 hover:to-orange-700 text-white font-semibold rounded-lg shadow-lg hover:shadow-xl transform hover:scale-105 transition-all duration-200 flex items-center gap-2"><svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"><path d="M5 4h3v12H5V4zm7 0h3v12h-3V4z" /></svg>暫停</button><button@click="mute"class="px-6 py-3 bg-gradient-to-r from-red-500 to-pink-600 hover:from-red-600 hover:to-pink-700 text-white font-semibold rounded-lg shadow-lg hover:shadow-xl transform hover:scale-105 transition-all duration-200 flex items-center gap-2"><svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"><pathd="M9.383 3.076A1 1 0 0110 4v12a1 1 0 01-1.617.794L5.617 14H3a1 1 0 01-1-1V7a1 1 0 011-1h2.617l2.766-2.794a1 1 0 011-.13zM14.657 2.929a1 1 0 011.414 0A9.972 9.972 0 0119 10a9.972 9.972 0 01-2.929 7.071 1 1 0 01-1.414-1.414A7.971 7.971 0 0017 10c0-2.21-.894-4.208-2.343-5.657a1 1 0 010-1.414zm-2.829 2.828a1 1 0 011.415 0A5.983 5.983 0 0115 10a5.984 5.984 0 01-1.757 4.243 1 1 0 01-1.415-1.415A3.984 3.984 0 0013 10a3.983 3.983 0 00-1.172-2.828 1 1 0 010-1.415z"/></svg>靜音</button><button@click="setVolume(0.5)"class="px-6 py-3 bg-gradient-to-r from-blue-500 to-indigo-600 hover:from-blue-600 hover:to-indigo-700 text-white font-semibold rounded-lg shadow-lg hover:shadow-xl transform hover:scale-105 transition-all duration-200 flex items-center gap-2"><svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"><pathd="M9.383 3.076A1 1 0 0110 4v12a1 1 0 01-1.617.794L5.617 14H3a1 1 0 01-1-1V7a1 1 0 011-1h2.617l2.766-2.794a1 1 0 011-.13z"/></svg>設置音量</button><button@click="seekTo(30)"class="px-6 py-3 bg-gradient-to-r from-purple-500 to-violet-600 hover:from-purple-600 hover:to-violet-700 text-white font-semibold rounded-lg shadow-lg hover:shadow-xl transform hover:scale-105 transition-all duration-200 flex items-center gap-2"><svg class="w-5 h-5" fill="currentColor" viewBox="0 0 20 20"><pathd="M10 18a8 8 0 100-16 8 8 0 000 16zm1-12a1 1 0 10-2 0v4a1 1 0 00.293.707l2.828 2.829a1 1 0 101.415-1.415L11 9.586V6z"/></svg>跳轉到30秒</button></div></div></div></div>
</template><script setup>
import { ref, reactive } from "vue";
import { VideoPlayer } from "@videojs-player/vue";
import "video.js/dist/video-js.css";const player = ref();const videoOptions = reactive({controls: true,sources: [{src: "https://vjs.zencdn.net/v/oceans.mp4",type: "video/mp4",},],poster: "https://github.surmon.me/images/poster/oceans.png",
});const handleMounted = (payload) => {console.log("handleMounted", payload);player.value = payload.player;
};const play = () => {if (player.value) {player.value.play();}
};const pause = () => {if (player.value) {player.value.pause();}
};const mute = () => {if (player.value) {player.value.muted(!player.value.muted());}
};const setVolume = (volume) => {if (player.value) {player.value.volume(volume);}
};const seekTo = (time) => {if (player.value) {player.value.currentTime(time);}
};
</script>

直播流播放

<template><div><h2>直播流播放器</h2><VideoPlayer :options="liveOptions" @ready="onLivePlayerReady" /></div>
</template><script setup>
import { ref } from "vue";
import { VideoPlayer } from "@videojs-player/vue";
import "video.js/dist/video-js.css";const liveOptions = ref({controls: true,responsive: true,fluid: true,liveui: true,sources: [{src: "https://example.com/live-stream.m3u8",type: "application/x-mpegURL",},],
});const onLivePlayerReady = (player) => {};
</script>

字幕支持

<template><div><h2>字幕支持播放器</h2><VideoPlayer :options="subtitleOptions" @ready="onSubtitlePlayerReady" /></div>
</template><script setup>
import { ref } from "vue";
import { VideoPlayer } from "@videojs-player/vue";
import "video.js/dist/video-js.css";const subtitleOptions = ref({controls: true,responsive: true,fluid: true,sources: [{src: "https://vjs.zencdn.net/v/oceans.mp4",type: "video/mp4",},],tracks: [{kind: "subtitles",src: "https://example.com/subtitles-zh.vtt",srclang: "zh",label: "中文",default: true,},{kind: "subtitles",src: "https://example.com/subtitles-en.vtt",srclang: "en",label: "English",},],
});const onSubtitlePlayerReady = (player) => {};
</script>

常見問題

Q: 如何實現自動播放?

A: 由于瀏覽器限制,自動播放需要滿足以下條件之一:

  • 視頻設置為靜音(muted: true
  • 用戶已與頁面交互
<VideoPlayer autoplay="muted" />

Q: 如何處理跨域視頻?

A: 確保視頻服務器設置了正確的 CORS 頭,或在組件上添加?crossorigin?屬性:

<VideoPlayer :src="videoSrc" crossorigin="anonymous" />

總結

@videojs-player/vue?是 Vue 3 應用中實現視頻播放功能的最佳選擇之一,它簡單、可靠、高效,能夠滿足大多數視頻播放需求。無論是簡單的視頻展示還是復雜的流媒體應用,它都能提供出色的解決方案。

?Vue3 視頻播放器完整指南 - @videojs-player/vue 從入門到精通 - 高質量源碼分享平臺-免費下載各類網站源碼與模板及前沿技術分享

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/96941.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/96941.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/96941.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【靶場練習】--DVWA第一關Brute Force(暴力破解)全難度分析

注意&#xff0c;這一關必須要使用Burpsuite來抓包 目錄Low1.抓包2.發送到爆破模塊3.選擇爆破模式爆破模式介紹4.添加載荷5.添加字典6.爆破查看查看源碼Medium查看源碼High1.抓包2.在bp的extensions中找到CSRF Token Tracker&#xff0c;并安裝3.構造字典4.成功爆破查看源碼Imp…

Java語言——排序算法

一、基本概念排序&#xff1a;將n個數字按一定順序排列&#xff08;比如&#xff1a;升序&#xff0c;或者降序&#xff09; ^內部排序 &#xff1a;若整個排序過程不需要訪問外存便能完成&#xff0c;則稱此類排序問題為內部排序 ^外部排序&#xff1a;若參加排序的記錄數量很…

【Linux】人事檔案——用戶及組管理

目錄 1 用戶及組管理 2?用戶及用戶組管理命令 2.1 useradd&#xff1a;建立用戶 useradd命令用于建立用戶&#xff0c;該 2.2 passwd&#xff1a;更改用戶密碼 2.3 usermod&#xff1a;更改用戶信息 2.4 groupadd&#xff1a;建立用戶組 2.5 finger&#xff1a;查找并顯…

給定一個有序的正數數組arr和一個正數range,如果可以自由選擇arr中的數字,想累加得 到 1~range 范圍上所有的數,返回arr最少還缺幾個數。

給定一個有序的正數數組arr和一個正數range&#xff0c;如果可以自由選擇arr中的數字&#xff0c;想累加得 到 1~range 范圍上所有的數&#xff0c;返回arr最少還缺幾個數。 #include <iostream> #include <vector>using namespace std;void func1(std::vector<…

BigemapPro快速添加歷史影像(Arcgis衛星地圖歷史地圖)

這是Esri(Arcgis)官方提供的歷史影像數據&#xff0c;可放心使用。https://livingatlas.arcgis.com/wayback如何快速添加到Bigemap Pro軟件里&#xff0c;詳細步驟如下&#xff1a;復制下面的文本保存為 配置.bmmap,然后拖入軟件就可以了{"BmLayerVersion":"1.0…

[免費]基于Python的Django醫院管理系統【論文+源碼+SQL腳本】

大家好&#xff0c;我是python222_小鋒老師&#xff0c;看到一個不錯的基于Python的Django醫院管理系統&#xff0c;分享下哈。 項目視頻演示 https://www.bilibili.com/video/BV1iPH8zmEut/ 項目介紹 隨著人民生活水平日益增長&#xff0c;科技日益發達的今天&#xff0c;…

MyBatis 從入門到精通(第三篇)—— 動態 SQL、關聯查詢與查詢緩存

在前兩篇博客中&#xff0c;我們掌握了 MyBatis 的基礎搭建、核心架構與 Mapper 代理開發&#xff0c;能應對簡單的單表 CRUD 場景。但實際項目中&#xff0c;業務往往更復雜 —— 比如 “多條件動態查詢”“員工與部門的關聯查詢”“高頻查詢的性能優化” 等。本篇將聚焦 MyBa…

Linux內核中IPv4的BEET模式封裝機制解析

引言 在Linux網絡棧中,IPSec提供了網絡層的數據加密和認證服務。傳統的IPSec支持兩種模式:傳輸模式(Transport Mode)和隧道模式(Tunnel Mode)。然而,這兩種模式各有優缺點:傳輸模式開銷小但無法隱藏原始IP頭;隧道模式提供完全封裝但增加了開銷。 BEET(Bound End-to…

設計模式——創建型模式

什么是設計模式&#xff1f;設計模式是軟件工程中解決常見問題的經典方案&#xff0c;它們代表了最佳實踐和經驗總結。通過使用設計模式&#xff0c;開發者可以創建更加靈活、可維護和可擴展的代碼結構。設計模式不是具體的代碼實現&#xff0c;而是針對特定問題的通用解決方案…

我愛學算法之—— 位運算(上)

常見位運算 對于位運算&#xff1a; &&#xff1a;按位與&#xff0c;有0則0。 |&#xff1a;按位或&#xff0c;有1則1。 ^&#xff1a;按位異或&#xff0c;相同為0、不同為1。&#xff08;無進位相加&#xff09; ~&#xff1a;二進制位按位取反。 對于位運算的常見使用…

智能語音系統

智能語音系統通過技術手段讓機器能夠“聽懂”、“理解”并“回應”人類的語音&#xff0c;是實現人機交互的關鍵技術之一。下面我將為你梳理智能語音系統的核心組成部分、工作原理、應用場景以及面臨的挑戰。&#x1f9e0; 核心技術與工作原理智能語音系統之所以能實現人機交互…

水泵自動化遠程監測與控制的御控物聯網解決方案

一、行業背景與痛點分析水泵作為工業生產、農業灌溉、城市供水等領域的核心設備&#xff0c;其運行效率直接影響系統穩定性與運營成本。然而&#xff0c;傳統管理模式存在三大核心痛點&#xff1a;人工巡檢低效&#xff1a;偏遠地區水泵分布分散&#xff0c;依賴人工定期巡檢&a…

Python實現點云法向量各種方向設定

本次我們分享點云法向量定向的四種方法&#xff0c;分別是XYZ軸、相機位置、最小生成樹(MST)和質心設定方法。通常出現在三維點云處理、三維重建、計算機視覺或圖形學中&#xff0c;需要估計點云的法向量方向。它們的核心任務是&#xff1a;在已知點坐標和局部幾何結構&#xf…

騰訊云智能體開發平臺

提供全球領先的云計算服務騰訊云&#xff0c;騰訊集團傾力打造的云計算品牌&#xff0c;面向全世界各個國家和地區的政府機構、企業組織和個人開發者&#xff0c;提供全球領先的云計算、大數據、人工智能等技術產品與服務&#xff0c;以卓越的科技能力打造豐富的行業解決方案&a…

css flex布局,設置flex-wrap:wrap換行后,如何保證子節點被內容撐高后,每一行的子節點高度一致。

flex布局&#xff0c;設置flex-wrap&#xff1a;wrap換行后&#xff0c;如何保證子節點被內容撐高后&#xff0c;每一行的子節點高度一致。核心&#xff1a;需要設置父節點和子節點&#xff1a;align-items: stretch&#xff0c;兩個都要。代碼&#xff1a;<div class"…

Nginx_Tomcat綜合案例

要求 需求&#xff1a;通過 nginx 來代理兩個 tomcat 服務器&#xff08;反向代理&#xff09;&#xff0c;然后通過 https://www.nginx.com 來進行訪問。主機名IP軟件nginx192.168.30.10nginxtomcat1192.168.30.11java&#xff0c;tomcattomcat2192.168.30.12java&#xff0c;…

【Vue2手錄12】單文件組件SFC

一、知識回顧-Vue2項目基礎操作與環境配置 1.1 項目啟動 項目打開方式&#xff1a;直接將項目文件夾&#xff08;如my-app&#xff09;拖拽到 Visual Studio Code&#xff08;推薦編輯器&#xff09;&#xff0c;避免拖拽父級文件夾&#xff0c;防止路徑混亂。啟動命令&#xf…

VS2022下載+海康SDK環境配置實現實時預覽

一.VS2022下載去官網下載就可以了&#xff1a;https://visualstudio.microsoft.com/zh-hans/vs/下載Community版本是免費的。&#xff08;2&#xff09;下載后得安裝包VisualStudioSetup.exe打開&#xff1a;點擊繼續等待下載完成&#xff0c;出現如下界面&#xff0c;這里是選…

YOLO 模型從 PyTorch 轉換為 ONNX 并優化

YOLO 模型從 PyTorch 轉換為 ONNX 并優化 在深度學習部署中&#xff0c;ONNX&#xff08;Open Neural Network Exchange&#xff09; 已成為跨框架與跨平臺的標準格式。我們經常需要將 YOLOv8 在 PyTorch 中訓練好的模型轉換為 ONNX&#xff0c;并進行優化&#xff0c;以便在 …

推進新型信息基礎設施建設發展:蜂窩模組行業迎來結構性機遇

工信部副部長張云明在2025年9月9日國新辦新聞發布會上明確表示&#xff0c;將"扎實推進新型信息基礎設施建設發展"&#xff0c;并重點強調"打造新型工業網絡&#xff0c;推進蜂窩車聯網部署" 。這一政策表態對蜂窩模組行業產生深遠影響&#xff0c;將推動行…