ArtPlayer.js:一款现代化 HTML5 视频播放器
frigidpluto Views: ...
推荐一款现代化、功能全面的 HTML5 视频播放器 ArtPlayer.js,支持高度自定义和扩展,适用于 Web 和移动端视频播放场景。
核心功能与特点
-
功能丰富且高度可定制
- 支持主流视频格式(e.g.,
.mp4)和流媒体协议(通过集成flv.js、hls.js、dash.js等库)。 - 直接兼容
.vtt、.ass、.srt字幕格式,支持多字幕插件(如artplayer-plugin-multiple-subtitles)。 - 提供弹幕功能(
artplayer-plugin-danmuku)、画中画(artplayer-plugin-document-pip)等扩展插件。
- 支持主流视频格式(e.g.,
-
技术架构清晰易维护
- 代码高度解耦,逻辑模块化,便于调试和新增功能。
-
插件生态与扩展性
- 提供丰富的插件(如广告支持
artplayer-plugin-vast、字幕解析artplayer-plugin-libass)。 - 支持与其他库(如
webtorrent.js)集成,适应不同流媒体需求。
- 提供丰富的插件(如广告支持
安装与使用
- 安装方式:
- npm:
npm install artplayer - CDN: 直接引入
<script src="https://cdn.jsdelivr.net/npm/artplayer/dist/artplayer.js">
- npm:
- 基础用法示例:
let art = new Artplayer({ container: ".artplayer-app", url: "path/to/video.mp4", }); - 插件支持丰富:包括弹幕、HLS/DASH 控制、缩略图生成、字幕加载、视频章节、视频背景等,非常强大。
一条完整的 ArtPlayer.js 初始化代码示例
var art = new Artplayer({
container: ".artplayer-app",
url: "/assets/sample/video.mp4",
poster: "/assets/sample/poster.jpg",
volume: 0.5,
isLive: false,
muted: false,
autoplay: false,
pip: true,
autoSize: true,
autoMini: true,
screenshot: true,
setting: true,
loop: true,
flip: true,
playbackRate: true,
aspectRatio: true,
fullscreen: true,
fullscreenWeb: true,
subtitleOffset: true,
miniProgressBar: true,
mutex: true,
backdrop: true,
playsInline: true,
autoPlayback: true,
airplay: true,
theme: "#23ade5",
lang: navigator.language.toLowerCase(),
moreVideoAttr: {
crossOrigin: "anonymous",
},
settings: [
{
width: 200,
html: "Subtitle",
tooltip: "Bilingual",
icon: '<img width="22" height="22" src="/assets/img/subtitle.svg">',
selector: [
{
html: "Display",
tooltip: "Show",
switch: true,
onSwitch(item) {
item.tooltip = item.switch ? "Hide" : "Show";
art.subtitle.show = !item.switch;
return !item.switch;
},
},
{
default: true,
html: "Bilingual",
url: "/assets/sample/subtitle.srt",
},
{
html: "Chinese",
url: "/assets/sample/subtitle.cn.srt",
},
{
html: "Japanese",
url: "/assets/sample/subtitle.jp.srt",
},
],
onSelect(item) {
art.subtitle.switch(item.url, {
name: item.html,
});
return item.html;
},
},
{
html: "Switcher",
icon: '<img width="22" height="22" src="/assets/img/state.svg">',
tooltip: "OFF",
switch: false,
onSwitch(item) {
item.tooltip = item.switch ? "OFF" : "ON";
console.info("You clicked on the custom switch", item.switch);
return !item.switch;
},
},
{
html: "Slider",
icon: '<img width="22" height="22" src="/assets/img/state.svg">',
tooltip: "5x",
range: [5, 1, 10, 0.1],
onRange(item) {
return `${item.range[0]}x`;
},
},
{
html: "Button",
icon: '<img width="22" height="22" src="/assets/img/state.svg">',
tooltip: "tooltip",
onClick() {
return "Button clicked";
},
},
],
contextmenu: [
{
html: "Custom menu",
click(contextmenu) {
console.info("You clicked on the custom menu");
contextmenu.show = false;
},
},
],
layers: [
{
html: '<img width="100" src="/assets/sample/layer.png">',
click() {
window.open("https://aimu.app");
console.info("You clicked on the custom layer");
},
style: {
position: "absolute",
top: "20px",
right: "20px",
opacity: ".9",
},
},
],
quality: [
{
default: true,
html: "SD 480P",
url: "/assets/sample/video.mp4?q=480",
},
{
html: "HD 720P",
url: "/assets/sample/video.mp4?q=720",
},
],
thumbnails: {
url: "/assets/sample/thumbnails.png",
number: 60,
column: 10,
scale: 0.85,
},
subtitle: {
url: "/assets/sample/subtitle.srt",
type: "srt",
style: {
color: "#fe9200",
fontSize: "20px",
},
encoding: "utf-8",
},
highlight: [
{
time: 15,
text: "One more chance",
},
{
time: 30,
text: "谁でもいいはずなのに",
},
{
time: 45,
text: "夏の想い出がまわる",
},
{
time: 60,
text: "こんなとこにあるはずもないのに",
},
{
time: 75,
text: "终わり",
},
],
controls: [
{
position: "right",
html: "Control",
index: 1,
tooltip: "Control Tooltip",
style: {
marginRight: "20px",
},
click() {
console.info("You clicked on the custom control");
},
},
],
icons: {
loading: '<img src="/assets/img/ploading.gif">',
state: '<img width="150" height="150" src="/assets/img/state.svg">',
indicator: '<img width="16" height="16" src="/assets/img/indicator.svg">',
},
});
效果图:
类似的项目还是挺多的,比如 plyr,video.js,hls.js 等。 plyr 也是一款简单优雅,功能十分强大的视频播放器,笔者在 twitdown.com 这个项目上用的就是 plyr 播放器,非常推荐使用。


