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

目录

介绍

一、基础使用

二、播放器配置

三、实现弹幕功能

四、总结


介绍

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值