一款可以发送弹幕的播放器,快来看看

news2025/1/11 22:45:59

目录

介绍

一、基础使用

二、播放器配置

三、实现弹幕功能

四、总结


介绍

NPlayer是一款功能强大、响应式、可定制的播放器,基于TypeScript和Sass编写。NPlayer支持高定制,你可以轻松定制图标、主题颜色等,还可以集成插件,实现更复杂的功能(弹幕播放、视频清晰度切换等)。

文档:Powerful danmaku video player | NPlayer

一、基础使用

NPlayer不仅支持vue2/3,还支持react,详看官方文档,本文以Vue3+TS整合为例子,带大家体验一下这款播放器。

下载依赖

pnpm i -S nplayer @nplayer/vue

在安装好依赖之后,还需要在main.ts中注册该插件

import {createApp} from 'vue'
import './style.css'
import App from './App.vue'
import NPlayer from "@nplayer/vue";

const app = createApp(App)
app.use(NPlayer)
app.mount('#app')

编写组件代码,只需要简单配置就可以实现播放功能,当然功能远远不至于止,请继续往下看,记得要在options中把视频播放链接替换自己的,用官网的加载不出来。

<script setup lang="ts">
import {PlayerOptions} from "nplayer";

// 播放器实例
let player = null;
const setPlayer = (p) => {
    // 设置播放器实例
    player = p;
};
// 播放器配置
const options: PlayerOptions = {
    // 视频播放链接
    src: "",
};
</script>

<template>
    <NPlayer :options="options" :set="setPlayer"/>
</template>

<style scoped>

</style>

这样就实现基础的播放功能

二、播放器配置

在实现完播放功能之后,我们可以根据自己的需求,对播放器进行进一步的配置,比如设置封面、快进时长、控制条配置等等。

以下是笔者自己整理的常用的一些配置,更详细可以看官网

参数

描述

src

视频地址

autoSeekTime

视频加载成功时自动跳转到的时间点(跳转后该参数会自动设为 0),你可以用这个参数实现记忆上次用户观看时间

controls

播放器底部控制条,该参数是二维数组,可以配置播放按钮、全屏等按钮的位置

settings

设置菜单配置,配置视频播放速度

contextMenus

配置视频右键菜单选项

contextMenuToggle

是否偶数次单击右键时显示浏览器默认右键菜单

plugins

插件列表,用户可以添加插件、自定义插件等

i18n

当前播放器语言,如 enzh

shortcut

是否开启快捷键功能

seekStep

单次快进、快退的步长,快捷键中会使用到

volumeStep

单次增加、降低音量的步长,快捷键中会使用到

themeColor

主题色

posterBgColor

海报背景色

progressBg

进度条背景

progressDot

进度条上的点

volumeProgressBg

音量条背景

volumeBarLength

音量条长度

volumeVertical

垂直音量条

loadingEl

自定义视频 loading 元素

openEdgeInIE

是否在 Win10 的 IE 中自动打开 Edge

posterEnable

是否启用海报功能

poster

海报图片地址

部分配置示例

// 播放器配置
const options: PlayerOptions = {
    // 视频播放链接
    src: "",
    // 单次快进、快退的步长,以秒为单位
    seekStep: 5,
    // 垂直音量进度条方向:true为垂直,false为横向
    volumeVertical: true,
    // 音量进度条宽度
    volumeBarLength: "120px",
    // 启用或禁用海报,默认为true
    posterEnable: true,
    // 视频封面
    poster: '',
    // 插件配置
    plugins: [
        {
            apply(player: Player) {
                // 播放器挂载
                player.on('Mounted', () => console.log('mounted'))
                // 播放器播放
                player.on('Play', () => console.log('play'))
            },
        },
    ],
    // 播放器底部控制条配置
    controls: [
        ['play', 'volume', 'time', 'spacer', 'danmaku-settings', 'airplay', 'settings', 'web-fullscreen', 'fullscreen'],
    ],
};

三、实现弹幕功能

要实现NPlayer弹幕功能,需要安装插件@nplayer/danmaku,它可以保持大量弹幕而不卡顿,并且支持非常多的设置,比如弹幕防碰撞、弹幕速度、字体、速度、透明度、显示区域、发送弹幕等

pnpm i -S @nplayer/danmaku

准备弹幕列表,弹幕列表必须按照 time 从小到大排序。如果获取的弹幕是无序的,那么在传入之前需要自己进行排序处理一下。

还可以通过 danmaku 对象的 appendItemsresetItems 等方法,添加和重置弹幕。

先演示静态效果,新增items.ts文件,存储静态的弹幕列表

export default [
    {
        text: "口技 ",
        time: 0
    },
    {
        text: "傻袍子 ",
        time: 0,
        color: "#2196F3"
    },
    {
        text: "233真的是摔啊 ",
        time: 1,
        color: "#2196F3"
    },
    {
        text: "同时出土可以减少被吃的数量 ",
        time: 1,
        color: "#673AB7"
    },
    {
        text: "女孩子可以养一只 ",
        time: 1
    },
    {
        text: "真正的黑恶势力 ",
        time: 1,
        color: "#2196F3"
    },
    {
        text: "你 ",
        time: 1,
        color: "#673AB7"
    },
    {
        text: "开学前一天的我 ",
        time: 2,
        color: "#E91E63"
    },
    {
        text: "好灵活啊 ",
        time: 3
    },
    {
        text: "猞猁尾巴很短的 这个尾巴长 ",
        time: 4
    },
    {
        text: "碰到贝爷。。。 ",
        time: 4
    },
    {
        text: "啊啊啊啊啊啊啊啊啊啊啊 ",
        time: 4,
        color: "#673AB7"
    },
    {
        text: "非主流发型 ",
        time: 4
    },
    {
        text: "carcass。。 ",
        time: 5,
        color: "#E91E63"
    },
    {
        text: "好久沒見到老虎了啊…… ",
        time: 6,
        color: "#2196F3"
    },
    {
        text: "前面说黄鸡宠物的别跑 ",
        time: 6
    },
    {
        text: "哇 大猫 ",
        time: 6,
        color: "#2196F3"
    },
    {
        text: "鸳鸯戏水就是这么来的 ",
        time: 7
    },
    {
        text: "落叶这一幕,是梁思成与林徽因里面的! ",
        time: 7
    },
    {
        text: "口技了得 ",
        time: 7
    },
    {
        text: "不追求难道要坐等灭绝吗。。。 ",
        time: 8
    },
    {
        text: "爪子毛茸茸的 ",
        time: 8,
        color: "#E91E63"
    },
    {
        text: "还弹起来了 ",
        time: 9
    },
    {
        text: "30厘米 ",
        time: 9
    },
    {
        text: "又被对面打野抓了 ",
        time: 10,
        color: "#673AB7"
    }
];

然后开始为播放器添加弹幕功能,控制条新增danmaku-settings,为了在控制台中显示弹幕控制按钮

// 引入弹幕插件
import Danmaku from "@nplayer/danmaku";
// 静态弹幕列表
import items from "./items.ts";

// 弹幕插件配置
const danmakuPlugin = new Danmaku({
    // 弹幕列表
    items,
    // 是否显示发送弹幕的输入框
    autoInsert: true
})
// 弹幕插件事件
const danmakuEvent = {
    apply(player) {
        // 用户发送弹幕之前触发
        player.on('DanmakuSend', (opts) => {
            console.log(opts)
        })
        // 用户更新弹幕设置后触发
        player.on(player.danmaku.DANMAKU_UPDATE_OPTIONS, () => {
            console.log(player.danmaku.opts)
        })
    }
}

const options: PlayerOptions = {
    //...
    // 插件配置
    plugins: [
        {
            apply(player: Player) {
                // 播放器挂载
                player.on('Mounted', () => console.log('mounted'))
                // 播放器播放
                player.on('Play', () => console.log('play'))
            },
        },
        danmakuPlugin,
        danmakuEvent
    ],
    // 播放器底部控制条配置
    controls: [
        ['play', 'volume', 'time', 'spacer', 'danmaku-settings', 'airplay', 'settings', 'web-fullscreen', 'fullscreen'],
    ],
};

至此就实现了弹幕功能,如果想要发送弹幕,可以直接在底部控制台中输入内容,然后通过弹幕插件事件中的DanmakuSend获取用户输入的弹幕内容,拿到这个数据就可以进行前后台交互(进行网络请求,将弹幕存储到数据库中)

四、总结

通过本文了解了NPlayer播放器,并进行了简单的框架整合,实现了视频播放、弹幕功能,也进行一些基础配置,如果想要进行更高定制,可以自己查看官网探究探究,总之这款视频插件还是不错的

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

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

相关文章

C语言如何快速求值

题目&#xff1a;一个整数&#xff0c;它加上100后是一个完全平方数&#xff0c;再加上168又是一个完全平方数&#xff0c;请问该数是多少&#xff1f; 程序分析&#xff1a; 假设该数为 x。 1、则&#xff1a;x 100 n2, x 100 168 m2 2、计算等式&#xff1a;m2 - n2…

WPS 备注白条,演讲者模式看不到

问题描述&#xff1a; 演讲者模式的样子会变成白条&#xff0c;如&#xff1a; 解决方案&#xff1a; 清楚格式----清除备注的格式。因为之所以会出现这种情况&#xff0c;应该是备注变成了某种格式。 实现方式:

武汉流星汇聚:亚马逊跨境电商领航者,推动全球商业影响力新篇章

在全球化浪潮席卷而来的今天&#xff0c;跨境电商已成为推动世界经济一体化的重要力量&#xff0c;而亚马逊&#xff0c;作为这一领域的先驱与巨头&#xff0c;凭借其独特的商业模式、庞大的市场覆盖以及卓越的客户服务&#xff0c;在跨境电商市场中占据了举足轻重的地位。 亚…

28 支付服务Payment kit基本使用

新增订单(后续所有的操作都是基于订单) > 请求后端接口支付 携带订单id 请求后端支付接口(web组件的src)后端接受到请求后 会整合该笔订单所有信息 请求支付宝支付宝会返回一个该笔订单的支付链接由于我们使用的是web组件 这个支付链接会被打开 进入到支付流程支付完成后 支…

青龙面板本地部署流程结合内网穿透使用手机远程本地服务器薅羊毛

文章目录 前言一、前期准备本教程环境为&#xff1a;Centos7&#xff0c;可以跑Docker的系统都可以使用。本教程使用Docker部署青龙&#xff0c;如何安装Docker详见&#xff1a; 二、安装青龙面板三、映射本地部署的青龙面板至公网四、使用固定公网地址访问本地部署的青龙面板 …

NLP发展脉络-->特征优化阶段

NLP特征优化阶段 文本预处理特征提取降维与特征选择特征组合与扩展特征选择与评估特征工程的优化模型可解释性偏统计和规则的特征化阶段优缺点优点缺点 这是NLP的一个发展阶段。今天&#xff0c;我们就来了解一下NLP的特征优化阶段。特征优化在NLP的发展中曾经是一个至关重要的…

【案例58】WebSphere输出日志输出慢导致线程被阻塞

问题现象 系统非常卡顿 问题分析 分析javacore文件&#xff0c;寻找关键字&#xff0c;Flat locked by 3LKMONOBJECT org/apache/logging/log4j/core/appender/OutputStreamManager0x000000060FB6B3C0: Flat locked by "WebContainer : 3" (J9VMThread:0x0…

Ubuntu22.04安装深度学习的GPU环境详细教程(小白图文,显卡驱动、CUDA、cuDNN、PyTorch一步到位)

摘要&#xff1a;本博客详细介绍了如何在 Ubuntu 22.04 系统上安装和配置深度学习环境&#xff0c;包括 NVIDIA 驱动、CUDA Toolkit、cuDNN、Miniconda 及 PyTorch 等关键组件。文章从安装前的注意事项开始&#xff0c;逐步讲解了如何切换国内软件源以提升下载速度&#xff0c;…

【Android Studio】Webview 内核升级得三种方法(续)

【Android Studio】Webview 内核升级得三种方法&#xff08;续&#xff09; 前言对原理学习中对应的重点进行一个记录针对网页加载流量进行一个监控 前言 在之前的博文【Android Studio】Webview 内核升级得三种方法中&#xff0c;介绍了内核升级的三种方法&#xff0c;并提出…

ECCV2024|港中文提出文本生成3D方法DreamDissector,能够生成具有交互的多个独立对象。

DreamDissector 是一种文本生成3D对象的方法&#xff0c;通过将多对象文本生成的NeRF输入并生成独立的纹理网格&#xff0c;提供了对象级别的控制和多种应用可能性。 DreamDissector 可以生成具有合理交互的多个独立纹理网格&#xff0c;方便各种应用&#xff0c;包括对象级别的…

NFTScan | 08.19~08.25 NFT 市场热点汇总

欢迎来到由 NFT 基础设施 NFTScan 出品的 NFT 生态热点事件每周汇总。 周期&#xff1a;2024.08.19~ 2024.08.25 NFT Hot News 01/ CryptoPunk 5822 今日以未公开价格售出&#xff0c;曾在 2022 年以 8000 ETH 售出 8 月 19 日&#xff0c;据 nft now&#xff0c;CryptoPun…

企业终端电脑监控管理系统有哪些?推荐四款全功能级的电脑监控管理系统

企业终端电脑监控管理系统是现代企业管理中不可或缺的一部分&#xff0c;它们主要用于提升信息安全、防止数据泄露、提高工作效率&#xff0c;并确保企业合规性。以下是一些常见的企业终端电脑监控管理系统&#xff1a; 1. 安企神 7天试用免费版https://work.weixin.qq.com/ca…

学习笔记——IP组播——IP组播基本概述

二、IP组播基本概述 IP组播技术有效地解决了单播和广播在点到多点应用中的问题。组播源只发送一份数据&#xff0c;数据在网络节点间被复制、分发&#xff08;PIM&#xff09;&#xff0c;且只发送给需要该信息的接收者。 1、前言 网络中存在各种各样的业务&#xff0c;从流…

★ OJ题 ★ 二叉树

Ciallo&#xff5e;(∠・ω< )⌒☆ ~ 今天&#xff0c;我将和大家一起做一些二叉树的OJ题~ 目录 一 单值二叉树 二 相同的树 三 对称二叉树 四 二叉树的前序遍历 五 另一颗树的子树 六 二叉树遍历 一 单值二叉树 965. 单值二叉树 - 力扣&#xff08;LeetCode…

Android平台原生音视频编解码MediaCodec

MediaCodec介绍 MediaCodec是Android平台上的一个多媒体编解码器&#xff0c;它可以用于对音频和视频进行编解码。通过MediaCodec&#xff0c;开发者可以直接访问底层的编解码器&#xff0c;实现更高效的音视频处理。同时&#xff0c;MediaCodec也支持硬件加速&#xff0c;可以…

java中的Opencv:Opencv简介与开发环境部署

文章目录 1.Opencv简介Opencv的应用 2.Java使用OpenCV进行图像操作opencv安装java项目中集成Opencv 3.Opencv常用的API 1.Opencv简介 OpenCV &#xff08; Open Source Computer Vision Library &#xff09;是一个广泛应用于计算机视觉和图像处理领域的开源库。它提供了丰富的…

Android12上调试nxp的wifi模块支持5G频段的ap和sta同时共存

我们使用的是nxp的88W8987模块 在使用过程中发现,不能分享出5g的热点,通过log发现国家码没有正常设置,驱动那边加载相关数据库失败 通过与供应商和度娘等排查,需要下载regulatory.db,进行insmod加载才可以,rk默认没有处理,因为rk默认适配的博通的模块,自带了国家码相关…

SAP DYNP_VALUES_UPDATE/READ 更新/获取屏幕字段函数用法

【函数】Function DYNP_VALUES_READ, DYNP_VALUES_UPDATE 【作用】实时获取和更新屏幕上的最新值。 【场景】GUI选择屏幕&#xff0c;选择公司代码&#xff0c;过滤所属公司下的项目&#xff1b;选择项目过滤所属的分期。 REPORT zdynp_values_read MESSAGE-ID 00 NO STANDAR…

grbl下载、编译与修改

一、下载 官方基本grbl https://github.com/grbl/grbl官方优化后的grbl https://github.com/gnea/grbl官方适配mega2560的grbl https://github.com/gnea/grbl-Mega/ 二、编译 arduino最新 为了防止出现问题&#xff0c;将arduino更新到最新是必要的。压缩和加载库 压缩&…

文件上传不断流,下载不限速的企业网盘推荐——可道云teamOS

在信息爆炸的时代&#xff0c;企业文件的传输与管理成为了日常工作中不可或缺的一环。面对海量数据的传输需求&#xff0c;如何确保文件上传的流畅性、下载的高效性&#xff0c;同时又能兼顾文件管理的便捷性&#xff0c;成为了许多企业面临的难题。 今天&#xff0c;我要向大…