├── .github
└── workflows
│ └── docs.yml
├── .gitignore
├── .husky
├── commit-msg
└── pre-commit
├── .npmignore
├── LICENSE
├── README.md
├── commitlint.config.js
├── docs
├── .vuepress
│ ├── components
│ │ ├── WPlayer.vue
│ │ └── danmaku.json
│ ├── config.ts
│ ├── public
│ │ ├── logo.png
│ │ └── player.css
│ └── styles
│ │ └── index.scss
├── README.md
├── examples
│ └── README.md
└── guide
│ ├── danmaku.md
│ ├── parameters.md
│ ├── quantity.md
│ ├── quick_start.md
│ ├── shortcut.md
│ └── streaming.md
├── examples
├── App.vue
├── danmaku.json
├── main.ts
└── vite-env.d.ts
├── index.html
├── package-lock.json
├── package.json
├── packages
├── components
│ ├── base-button.vue
│ ├── base-slider.vue
│ ├── base-switch.vue
│ ├── context-menu.vue
│ ├── danmaku-container.vue
│ ├── danmaku-send.vue
│ ├── player-buffering.vue
│ ├── player-control.vue
│ ├── player-msg.vue
│ └── svg-icon.vue
├── hooks
│ ├── config.ts
│ ├── full-screen.ts
│ ├── msg.ts
│ ├── options.ts
│ ├── quality.ts
│ └── shortcut-key.ts
├── icons
│ ├── fullScreen.svg
│ ├── loading.png
│ ├── pause.svg
│ ├── play.svg
│ ├── replay.svg
│ ├── setting.svg
│ ├── style.svg
│ └── volume.svg
├── index.ts
├── types
│ ├── danmaku.d.ts
│ ├── options.d.ts
│ └── shortcut-key.d.ts
└── wplayer.vue
├── tsconfig.json
└── vite.config.ts
/.github/workflows/docs.yml:
--------------------------------------------------------------------------------
1 | name: docs
2 |
3 | on:
4 | push:
5 | branches: [master]
6 | workflow_dispatch:
7 |
8 | jobs:
9 | docs:
10 | runs-on: ubuntu-latest
11 |
12 | strategy:
13 | matrix:
14 | node-version: [16.x]
15 |
16 | steps:
17 | - uses: actions/checkout@v3
18 | with:
19 | fetch-depth: 0
20 |
21 | # 生成静态文件
22 | - name: Build
23 | run: npm install && npm run build && npm run docs:build
24 |
25 | - name: Deploy
26 | uses: crazy-max/ghaction-github-pages@v3
27 | with:
28 | target_branch: gh-pages
29 | build_dir: docs/.vuepress/dist
30 | env:
31 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist
12 | dist-ssr
13 | *.local
14 | docs/.vuepress/.cache
15 | docs/.vuepress/.temp
16 |
17 | # Editor directories and files
18 | .vscode
19 | .idea
20 | .DS_Store
21 | *.suo
22 | *.ntvs*
23 | *.njsproj
24 | *.sln
25 | *.sw?
26 |
--------------------------------------------------------------------------------
/.husky/commit-msg:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | . "$(dirname -- "$0")/_/husky.sh"
3 |
4 | npx commitlint --edit $1
--------------------------------------------------------------------------------
/.husky/pre-commit:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | . "$(dirname -- "$0")/_/husky.sh"
3 |
--------------------------------------------------------------------------------
/.npmignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 | pnpm-debug.log*
8 | lerna-debug.log*
9 |
10 | node_modules
11 | dist-ssr
12 | *.local
13 | docs/.vuepress/.cache
14 | docs/.vuepress/.temp
15 |
16 | # Editor directories and files
17 | .vscode
18 | .idea
19 | .DS_Store
20 | *.suo
21 | *.ntvs*
22 | *.njsproj
23 | *.sln
24 | *.sw?
25 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2022 wzm
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # vue-wplayer 弹幕视频播放器
2 | 
3 | 
4 |
5 | ## 文档
6 | 示例: http://wplayer.kuukaa.fun/examples
7 |
8 | 文档: http://wplayer.kuukaa.fun/guide/quick_start.html
9 |
10 |
11 | ## 安装
12 | ```
13 | npm install vue-wplayer
14 | ```
15 |
16 | ## 示例
17 | ```js
18 |
19 |
24 |
25 |
26 |
33 |
34 |
54 | ```
55 |
56 | ## 参数
57 | |内容|类型|描述|默认值|
58 | |:-----|:-----|:-----|:-----|
59 | |resource|string 或 不同清晰度信息对象|视频资源|-|
60 | |type|string|视频类型|'mp4'|
61 | |blob|bool|mp4是否开启blob|false|
62 | |mobile|bool|是否为移动端|false|
63 | |theme|string|主题色|'#4b5cc4'|
64 | |playbackSpeed|[]| 播放速度|[0.5, 0.75, 1, 1.5, 2]|
65 | |danmaku.open|bool|是否开启弹幕|false|
66 | |danmaku.placeholder|string|弹幕输入提示|'在这里输入弹幕哦~'|
67 | |danmaku.data|[]|弹幕数据|-|
68 | |danmaku.send|function|发送弹幕回调函数|-|
69 |
70 |
--------------------------------------------------------------------------------
/commitlint.config.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | extends: [
3 | "@commitlint/config-conventional"
4 | ],
5 | rules: {
6 | 'type-enum': [2, 'always', [
7 | 'feat', //新功能(feature)
8 | 'fix', //修补bug
9 | 'docs', //文档(documentation)
10 | 'style', //格式(不影响代码运行的变动)
11 | 'refactor', //重构(即不是新增功能,也不是修改bug的代码变动)
12 | 'perf', //性能提升(提高性能的代码改动)
13 | 'test', //测试
14 | 'chore', // 不修改src或测试文件的其他更改
15 | 'revert', //撤退之前的commit
16 | 'build' //构建过程或辅助工具的变动(webpack等)
17 | ]],
18 | 'type-case': [0],
19 | 'type-empty': [0],
20 | 'scope-empty': [0],
21 | 'scope-case': [0],
22 | 'subject-full-stop': [0, 'never'],
23 | 'subject-case': [0, 'never'],
24 | 'header-max-length': [0, 'always', 72]
25 | }
26 | };
27 |
--------------------------------------------------------------------------------
/docs/.vuepress/components/WPlayer.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/docs/.vuepress/config.ts:
--------------------------------------------------------------------------------
1 | import { path } from '@vuepress/utils';
2 | import { defaultTheme, defineUserConfig } from 'vuepress';
3 | import { registerComponentsPlugin } from '@vuepress/plugin-register-components'
4 |
5 | export default defineUserConfig({
6 | lang: 'zh-CN',
7 | title: 'VueWPlayer',
8 | description: '基于vue + ts开发的弹幕播放器',
9 | head: [
10 | ['link', { rel: 'icon', href: '/logo.png' }]
11 | ],
12 | theme: defaultTheme({
13 | logo: 'logo.png',
14 | navbar: [
15 | { text: "示例", link: "/examples" },
16 | { text: "指南", link: "/guide/quick_start" },
17 | { text: "GitHub", link: "http://github.com/wangzmgit/vue-wplayer" }
18 | ],
19 | sidebar: {
20 | "/guide/": [
21 | "quick_start",
22 | "parameters",
23 | "shortcut",
24 | "danmaku",
25 | "streaming",
26 | "quantity"
27 | ]
28 | },
29 | notFound: [
30 | '这里什么都没有',
31 | '我们怎么到这来了?',
32 | '这是一个 404 页面',
33 | '看起来我们进入了错误的链接',
34 | ],
35 | backToHome: '返回首页',
36 |
37 | editLink: false,
38 | editLinkText: "编辑此页",
39 | lastUpdated: true,
40 | lastUpdatedText: "更新时间",
41 | contributors: false,
42 | contributorsText: "贡献者",
43 |
44 | openInNewWindow: '在新窗口打开',
45 | toggleColorMode: '切换夜间模式',
46 | toggleSidebar: '切换侧边栏',
47 | }),
48 | plugins: [
49 | registerComponentsPlugin({
50 | components: {
51 | WPlayer: path.resolve(__dirname, './components/WPlayer.vue'),
52 | },
53 | })
54 | ],
55 | });
--------------------------------------------------------------------------------
/docs/.vuepress/public/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangzmgit/vue-wplayer/d80f9965a87137eea49a1c5d88591a2d02281329/docs/.vuepress/public/logo.png
--------------------------------------------------------------------------------
/docs/.vuepress/public/player.css:
--------------------------------------------------------------------------------
1 | .container {
2 | width: 720px;
3 | }
4 |
5 | .player-container {
6 | height: 0;
7 | width: 100%;
8 | padding-bottom: 56.25%;
9 | position: relative;
10 | }
11 |
12 | .player {
13 | width: 100%;
14 | height: 100%;
15 | position: absolute;
16 | background-color: black;
17 | }
--------------------------------------------------------------------------------
/docs/.vuepress/styles/index.scss:
--------------------------------------------------------------------------------
1 | :root {
2 | scroll-behavior: smooth;
3 | --c-brand: #4b5cc4;
4 | --c-brand-light: #6372d6;
5 | }
6 |
7 | html.dark {
8 | --c-brand: #4b5cc4;
9 | --c-brand-light: #6372d6;
10 | }
--------------------------------------------------------------------------------
/docs/README.md:
--------------------------------------------------------------------------------
1 | ---
2 | home: true
3 | heroImage: /logo.png
4 | heroText: VueWPlayer
5 | tagline: 基于vue + ts开发的弹幕播放器
6 | actions:
7 | - text: 快速上手 →
8 | link: /guide/quick_start
9 | type: primary
10 | features:
11 | footer: MIT Licensed | Copyright © 2022-present
12 | ---
13 |
--------------------------------------------------------------------------------
/docs/examples/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## 示例
4 |
5 |
--------------------------------------------------------------------------------
/docs/guide/danmaku.md:
--------------------------------------------------------------------------------
1 | # 弹幕
2 |
3 | 弹幕部分完整配置如下
4 |
5 | ```js
6 | options: {
7 | ...
8 | danmaku: {
9 | open: true,
10 | placeholder: '在这里输入弹幕哦~',
11 | data: [],
12 | send: null
13 | }
14 | ...
15 | }
16 | ```
17 | ### 开启弹幕
18 |
19 | 播放器默认不开启弹幕功能,如需开启首先要把 `options.danmaku.open` 配置为 `true`。
20 |
21 | ### 弹幕数据
22 | 弹幕数据为一个弹幕信息数组,格式如下:
23 | ```js
24 | export interface danmakuType {
25 | time: number,
26 | color: string,
27 | type: number,
28 | text: string,
29 | }
30 | ```
31 |
32 | |内容|类型|描述|
33 | |:-----|:-----|:-----|
34 | |time|int|弹幕出现时间|
35 | |color|string|16进制颜色值|
36 | |type|int|弹幕类型 0滚动 1顶部 2底部|
37 | |text|string|弹幕内容|
38 |
39 | ### 发送弹幕
40 | 在单击发送弹幕后,会执行 `options.danmaku.send` 中传入的函数,函数参数与 [#弹幕数据](#弹幕数据) 中的 `danmakuType` 相同。
41 |
42 | ### 刷新弹幕数据
43 | 默认情况下,修改`options.danmaku.data`中的数据,播放器弹幕数据不会改变,如果需要动态修改弹幕数据,可增加`danmaku-key`配置,如以下代码所示
44 | ```vue
45 |
46 | ```
47 | `danmaku-key`为数字类型,改变后会重新加载`options.danmaku.data`中的数据,实现刷新弹幕列表。
48 |
--------------------------------------------------------------------------------
/docs/guide/parameters.md:
--------------------------------------------------------------------------------
1 | # 参数
2 | 1. `danmaku-key`用于更新弹幕列表,类型为`number`,非必填,具体使用参考[刷新弹幕数据](danmaku#刷新弹幕数据)
3 | 2. `options` 对象下有以下内容,其中 `resource` 为必填项
4 |
5 | |内容|类型|描述|默认值|
6 | |:-----|:-----|:-----|:-----|
7 | |resource|string 或 不同清晰度信息对象|视频资源|-|
8 | |type|string|视频类型|'mp4'|
9 | |mobile[1]|bool|是否为移动端|false|
10 | |blob[2]|bool|mp4是否开启blob|false|
11 | |theme|string|主题色|'#4b5cc4'|
12 | |playbackSpeed|[]| 播放速度|[0.5, 0.75, 1, 1.5, 2]|
13 | |danmaku.open|bool|是否开启弹幕|false|
14 | |danmaku.placeholder|string|弹幕输入提示|'在这里输入弹幕哦~'|
15 | |danmaku.data|[]| 详情请查看[#弹幕数据](danmaku#弹幕数据)|-|
16 | |danmaku.send|function|发送弹幕回调函数 详情请查看[#发送弹幕](danmaku#发送弹幕) |-|
17 |
18 | [1]. 如果在移动端使用但不开启此选项可能导致滑块无法滑动等问题。
19 |
20 | [2]. 在移动端部分浏览器会出现video标签被劫持的现象,导致进度条、弹幕等功能无法正常使用,如果使用blob类型则不会被劫持,
21 | 在flv、hls格式下,flv.js和hls.js已经自动处理为blob类型,而mp4如果使用blob类型需要等待视频加载完成才可播放,
22 | 对网络的要求较高,所以mp4没有默认使用blob类型。
--------------------------------------------------------------------------------
/docs/guide/quantity.md:
--------------------------------------------------------------------------------
1 | # 清晰度切换
2 |
3 | 如果一个视频有多个不同清晰度的链接,`options.resource` 可以传一个视频链接的对象,具体格式如下:
4 | ```js
5 | export interface QualityType {
6 | [key: number]: {
7 | name?: string,
8 | url: string,
9 | type?: string
10 | }
11 | }
12 | //每个视频可以单独指定视频类型,如果未指定类型则使用 `options.type` 的类型。
13 | ```
14 |
15 | 示例:
16 | ```js
17 | options: {
18 | ...
19 | resource: {
20 | 360: {
21 | name: '标清',
22 | type: "mp4",
23 | url: ''
24 | },
25 | 720: {
26 | name: '超清',
27 | type: "mp4",
28 | url: ''
29 | }
30 | }
31 | ...
32 | // 自定义清晰度切换
33 | customQualityChange: function(quality) {
34 |
35 | }
36 | }
37 | ```
--------------------------------------------------------------------------------
/docs/guide/quick_start.md:
--------------------------------------------------------------------------------
1 | # 快速开始
2 |
3 | ## 安装
4 |
5 |
6 | ```shell
7 | #使用npm安装
8 | npm install vue-wplayer
9 | #使用yarn安装
10 | yarn add vue-wplayer
11 | ```
12 |
13 | ## 引入 vue-wplayer
14 | #### 全局引入
15 | 在 main.js 中写入以下内容:
16 | ```js
17 | import { createApp } from 'vue'
18 | import App from './App.vue'
19 | import WPlayer from 'vue-wplayer';
20 |
21 | createApp(App).use(WPlayer).mount("#app");
22 | ```
23 |
24 | #### 局部引入
25 |
26 | 在需要引入播放器的组件或页面内加入以下内容:
27 | ```js
28 | import { WPlayer } from 'vue-wplayer';
29 | ```
30 |
31 | ## 使用
32 | 在 `template` 加入
33 | ```vue
34 |
35 |
36 |
37 | ```
38 | 播放器接收一个 `options` prop。通过修改 `options` 可以自定义播放器,详情请查看 [参数](parameters)。
39 |
40 |
41 | ## 完整示例
42 | ```vue
43 |
44 |
45 |
46 |
47 |
55 |
56 |
62 | ```
--------------------------------------------------------------------------------
/docs/guide/shortcut.md:
--------------------------------------------------------------------------------
1 | # 快捷键
2 |
3 | 播放器目前内置6个快捷键,当焦点元素不为 `input` 和 `textarea` 时生效。
4 |
5 | |快捷键|描述|
6 | |:-----|:-----|
7 | |space|播放/暂停|
8 | |双击|播放/暂停|
9 | |esc|退出全屏|
10 | |→|快进10秒|
11 | |←|快退10秒|
12 | |ctrl+m|镜像播放|
--------------------------------------------------------------------------------
/docs/guide/streaming.md:
--------------------------------------------------------------------------------
1 | # 流媒体
2 |
3 | :::tip
4 | 在视频类型不为`mp4`时,会执行 `options.customType` 传入的函数,函数传递两个参数,分别是播放器元素和视频链接。
5 | :::
6 |
7 | ## HLS
8 | 安装 hls.js
9 | ```
10 | npm install hls.js --save
11 | ```
12 |
13 | ```js
14 | import Hls from "hls.js";
15 |
16 | const hls = ref(null);
17 | const options = {
18 | resource: "视频链接",
19 | type: "custom",
20 | customType: function (player: HTMLVideoElement, url: string) {
21 | hls.value = new Hls()
22 | hls.value.loadSource(url);
23 | hls.value.attachMedia(player);
24 | hls.value.on(Hls.Events.ERROR, () => {
25 | console.error("资源加载失败");
26 | });
27 | },
28 | ...
29 | }
30 | ```
31 |
32 | ## FLV
33 | 安装 flv.js
34 | ```
35 | npm install flv.js --save
36 | ```
37 |
38 | ```js
39 | import flvjs from 'flv.js'
40 |
41 | const options = {
42 | resource: "视频链接",
43 | type: "custom",
44 | customType: function (player: HTMLVideoElement, url: string) {
45 | const flv = flvjs.createPlayer({
46 | type:'flv',
47 | url: url,
48 | });
49 | flv.attachMediaElement(player);
50 | flv.load();
51 | },
52 | ...
53 | }
54 | ```
55 |
56 | ## DASH
57 | 安装 dashjs
58 | ```
59 | npm install dashjs --save
60 | ```
61 |
62 | ```js
63 | import dashjs from "dashjs";
64 |
65 | let dash: dashjs.MediaPlayerClass;
66 |
67 | const options = {
68 | resource: "视频链接",
69 | type: "custom",
70 | customType: function (player: HTMLVideoElement, url: string) {
71 | dash = dashjs.MediaPlayer().create();
72 | dash.initialize(player, url, false);
73 | },
74 | ...
75 | }
76 | ```
--------------------------------------------------------------------------------
/examples/App.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
41 |
42 |
100 |
--------------------------------------------------------------------------------
/examples/danmaku.json:
--------------------------------------------------------------------------------
1 | [
2 | {
3 | "time": 3,
4 | "type": 0,
5 | "color": "#ffffff",
6 | "text": "我自愿的"
7 | },
8 | {
9 | "time": 4,
10 | "type": 0,
11 | "color": "#ffffff",
12 | "text": "我是被骗进来的(诚实)"
13 | },
14 | {
15 | "time": 13,
16 | "type": 0,
17 | "color": "#ffffff",
18 | "text": "好像韩版花样男子OST里面的一首歌曲"
19 | },
20 | {
21 | "time": 12,
22 | "type": 0,
23 | "color": "#ffffff",
24 | "text": "压力马斯内"
25 | },
26 | {
27 | "time": 0,
28 | "type": 1,
29 | "color": "#e70012",
30 | "text": "你也被骗了?"
31 | },
32 | {
33 | "time": 1,
34 | "type": 1,
35 | "color": "#ffffff",
36 | "text": "我又回来了"
37 | },
38 | {
39 | "time": 8,
40 | "type": 0,
41 | "color": "#ffffff",
42 | "text": "?"
43 | },
44 | {
45 | "time": 136,
46 | "type": 1,
47 | "color": "#e70012",
48 | "text": "原 神 出 天 理"
49 | },
50 | {
51 | "time": 11,
52 | "type": 0,
53 | "color": "#ffffff",
54 | "text": "今天被骗三次"
55 | },
56 | {
57 | "time": 16,
58 | "type": 0,
59 | "color": "#ffffff",
60 | "text": "BV1GJ411x7h7"
61 | },
62 | {
63 | "time": 1,
64 | "type": 1,
65 | "color": "#e70012",
66 | "text": "欢迎回家"
67 | },
68 | {
69 | "time": 0,
70 | "type": 0,
71 | "color": "#ffffff",
72 | "text": "《非物质文化遗产》"
73 | },
74 | {
75 | "time": 27,
76 | "type": 0,
77 | "color": "#ffffff",
78 | "text": "跳楼01:14"
79 | },
80 | {
81 | "time": 0,
82 | "type": 0,
83 | "color": "#ffffff",
84 | "text": "666"
85 | },
86 | {
87 | "time": 2,
88 | "type": 1,
89 | "color": "#fef102",
90 | "text": "爷被评论区的屑旅者骗了"
91 | },
92 | {
93 | "time": 44,
94 | "type": 0,
95 | "color": "#ffffff",
96 | "text": "跳up00:00"
97 | },
98 | {
99 | "time": 62,
100 | "type": 1,
101 | "color": "#683a7b",
102 | "text": "我们已相识许久"
103 | },
104 | {
105 | "time": 6,
106 | "type": 1,
107 | "color": "#a0ee00",
108 | "text": "梦 想 夏 乡 五 P V 公 开"
109 | },
110 | {
111 | "time": 171,
112 | "type": 0,
113 | "color": "#ffffff",
114 | "text": "《伊斯视频被盗》"
115 | },
116 | {
117 | "time": 208,
118 | "type": 0,
119 | "color": "#ffffff",
120 | "text": "跳伞 00:00"
121 | },
122 | {
123 | "time": 146,
124 | "type": 1,
125 | "color": "#683a7b",
126 | "text": "弹幕竟然变少"
127 | },
128 | {
129 | "time": 11,
130 | "type": 0,
131 | "color": "#ffffff",
132 | "text": "我又被骗了"
133 | },
134 | {
135 | "time": 1,
136 | "type": 0,
137 | "color": "#ffffff",
138 | "text": "《统考钉钉下载教程链接》"
139 | },
140 | {
141 | "time": 14,
142 | "type": 1,
143 | "color": "#89d5ff",
144 | "text": "观看地址瑞克与莫蒂第七季大结局"
145 | },
146 | {
147 | "time": 21,
148 | "type": 0,
149 | "color": "#ffffff",
150 | "text": "有多少是被一个链接骗进来的"
151 | },
152 | {
153 | "time": 15,
154 | "type": 0,
155 | "color": "#ffffff",
156 | "text": "又回来了吗?"
157 | },
158 | {
159 | "time": 30,
160 | "type": 0,
161 | "color": "#ffffff",
162 | "text": "每天被骗"
163 | },
164 | {
165 | "time": 2,
166 | "type": 0,
167 | "color": "#ffffff",
168 | "text": "《永不放弃你》"
169 | },
170 | {
171 | "time": 8,
172 | "type": 0,
173 | "color": "#ffffff",
174 | "text": "我自愿的"
175 | },
176 | {
177 | "time": 64,
178 | "type": 0,
179 | "color": "#ffffff",
180 | "text": "麒 麟 新 芯 片 发 布"
181 | },
182 | {
183 | "time": 97,
184 | "type": 0,
185 | "color": "#ffffff",
186 | "text": "家庭教师初第二季了!!"
187 | },
188 | {
189 | "time": 140,
190 | "type": 0,
191 | "color": "#e2027f",
192 | "text": "第五人格与时光代理人联动了"
193 | },
194 | {
195 | "time": 22,
196 | "type": 0,
197 | "color": "#ffffff",
198 | "text": "降落伞00:00"
199 | },
200 | {
201 | "time": 88,
202 | "type": 0,
203 | "color": "#ffffff",
204 | "text": "0:05"
205 | },
206 | {
207 | "time": 1,
208 | "type": 0,
209 | "color": "#ffffff",
210 | "text": "我 被 骗 了"
211 | },
212 | {
213 | "time": 7,
214 | "type": 1,
215 | "color": "#ffffff",
216 | "text": "有多少人是被骗过来的呢"
217 | },
218 | {
219 | "time": 13,
220 | "type": 0,
221 | "color": "#ffffff",
222 | "text": "空降坐标:XX:XX"
223 | },
224 | {
225 | "time": 69,
226 | "type": 1,
227 | "color": "#e70012",
228 | "text": "我竟然听懂了"
229 | },
230 | {
231 | "time": 30,
232 | "type": 0,
233 | "color": "#ffffff",
234 | "text": "跳楼00:00"
235 | },
236 | {
237 | "time": 133,
238 | "type": 0,
239 | "color": "#fe0302",
240 | "text": "纸 嫁 衣 5"
241 | },
242 | {
243 | "time": 84,
244 | "type": 0,
245 | "color": "#ffffff",
246 | "text": "火影忍者手游免费送10万金币。"
247 | },
248 | {
249 | "time": 5,
250 | "type": 0,
251 | "color": "#ffffff",
252 | "text": "《没错,你又双叒叕被骗了》"
253 | },
254 | {
255 | "time": 24,
256 | "type": 0,
257 | "color": "#ffffff",
258 | "text": "0:00"
259 | },
260 | {
261 | "time": 5,
262 | "type": 0,
263 | "color": "#ffffff",
264 | "text": "菠萝神"
265 | },
266 | {
267 | "time": 35,
268 | "type": 0,
269 | "color": "#ffffff",
270 | "text": "逃跑03:30"
271 | },
272 | {
273 | "time": 11,
274 | "type": 0,
275 | "color": "#ffffff",
276 | "text": "会员制餐厅01:14"
277 | },
278 | {
279 | "time": 6,
280 | "type": 1,
281 | "color": "#e70012",
282 | "text": "哈哈"
283 | },
284 | {
285 | "time": 75,
286 | "type": 1,
287 | "color": "#009843",
288 | "text": "郭爱农"
289 | },
290 | {
291 | "time": 71,
292 | "type": 0,
293 | "color": "#ffffff",
294 | "text": "空降2:00"
295 | },
296 | {
297 | "time": 3,
298 | "type": 0,
299 | "color": "#ffffff",
300 | "text": "《我甚至连上次的播放记录都没过期》"
301 | },
302 | {
303 | "time": 6,
304 | "type": 0,
305 | "color": "#ffffff",
306 | "text": "00:06"
307 | },
308 | {
309 | "time": 60,
310 | "type": 1,
311 | "color": "#ffffff",
312 | "text": "原 神 动 画 化"
313 | },
314 | {
315 | "time": 203,
316 | "type": 1,
317 | "color": "#009843",
318 | "text": "恭喜你们挑战成功!!!!"
319 | },
320 | {
321 | "time": 36,
322 | "type": 0,
323 | "color": "#ffffff",
324 | "text": "大虾米新坑"
325 | },
326 | {
327 | "time": 21,
328 | "type": 0,
329 | "color": "#ffffff",
330 | "text": "哈哈哈哈龚俊啊啊"
331 | },
332 | {
333 | "time": 11,
334 | "type": 0,
335 | "color": "#ffffff",
336 | "text": "被骗进来了"
337 | },
338 | {
339 | "time": 30,
340 | "type": 0,
341 | "color": "#ffffff",
342 | "text": "骗子"
343 | },
344 | {
345 | "time": 0,
346 | "type": 1,
347 | "color": "#fef102",
348 | "text": "生 活 必 需 品"
349 | },
350 | {
351 | "time": 0,
352 | "type": 1,
353 | "color": "#e70012",
354 | "text": "万 物 起 源"
355 | },
356 | {
357 | "time": 64,
358 | "type": 1,
359 | "color": "#e70012",
360 | "text": "汪苏泷~"
361 | },
362 | {
363 | "time": 36,
364 | "type": 0,
365 | "color": "#ffffff",
366 | "text": "跳个毛线0:00"
367 | },
368 | {
369 | "time": 14,
370 | "type": 0,
371 | "color": "#ffffff",
372 | "text": "被骗了,淦"
373 | },
374 | {
375 | "time": 46,
376 | "type": 1,
377 | "color": "#ffffff",
378 | "text": "Never gonna give you up never gonna let you down"
379 | },
380 | {
381 | "time": 57,
382 | "type": 0,
383 | "color": "#ffffff",
384 | "text": "开学00:00"
385 | },
386 | {
387 | "time": 2,
388 | "type": 0,
389 | "color": "#ffffff",
390 | "text": "每时每刻都有人在被骗"
391 | },
392 | {
393 | "time": 7,
394 | "type": 0,
395 | "color": "#fef102",
396 | "text": "我是被骗进来的"
397 | },
398 | {
399 | "time": 132,
400 | "type": 0,
401 | "color": "#ffffff",
402 | "text": "180个人正在被骗"
403 | },
404 | {
405 | "time": 10,
406 | "type": 1,
407 | "color": "#ffffff",
408 | "text": "自愿上钩"
409 | },
410 | {
411 | "time": 23,
412 | "type": 0,
413 | "color": "#e70012",
414 | "text": "1000多个人正在被诈骗"
415 | },
416 | {
417 | "time": 41,
418 | "type": 0,
419 | "color": "#ffffff",
420 | "text": "《空洞骑士丝之歌提前下载》"
421 | },
422 | {
423 | "time": 62,
424 | "type": 0,
425 | "color": "#ffffff",
426 | "text": "we know 理查德·汪苏泷"
427 | },
428 | {
429 | "time": 18,
430 | "type": 0,
431 | "color": "#ffffff",
432 | "text": "跳个球00:00"
433 | },
434 | {
435 | "time": 143,
436 | "type": 0,
437 | "color": "#fe0302",
438 | "text": "一条视频10086个骗局"
439 | },
440 | {
441 | "time": 8,
442 | "type": 0,
443 | "color": "#ffffff",
444 | "text": "我怎么又又又又又被骗了"
445 | },
446 | {
447 | "time": 10,
448 | "type": 0,
449 | "color": "#ffffff",
450 | "text": "跳楼"
451 | },
452 | {
453 | "time": 0,
454 | "type": 0,
455 | "color": "#e2027f",
456 | "text": "欢迎回来"
457 | },
458 | {
459 | "time": 82,
460 | "type": 0,
461 | "color": "#ffffff",
462 | "text": "G T A 6"
463 | },
464 | {
465 | "time": 49,
466 | "type": 0,
467 | "color": "#ffffff",
468 | "text": "巴巴罗萨00:00"
469 | },
470 | {
471 | "time": 0,
472 | "type": 1,
473 | "color": "#e70012",
474 | "text": "腾讯收购米哈游"
475 | },
476 | {
477 | "time": 4,
478 | "type": 0,
479 | "color": "#ffffff",
480 | "text": "?"
481 | },
482 | {
483 | "time": 8,
484 | "type": 0,
485 | "color": "#ffffff",
486 | "text": "第七次被骗"
487 | },
488 | {
489 | "time": 109,
490 | "type": 0,
491 | "color": "#ffffff",
492 | "text": "传染00:00"
493 | },
494 | {
495 | "time": 7,
496 | "type": 0,
497 | "color": "#ffffff",
498 | "text": "希望你能拥有114514个赞(喜)"
499 | },
500 | {
501 | "time": 2,
502 | "type": 0,
503 | "color": "#ffffff",
504 | "text": "反复横跳"
505 | },
506 | {
507 | "time": 3,
508 | "type": 0,
509 | "color": "#ffffff",
510 | "text": "4444"
511 | },
512 | {
513 | "time": 3,
514 | "type": 0,
515 | "color": "#ffffff",
516 | "text": "好家伙,这个还能评论!"
517 | },
518 | {
519 | "time": 204,
520 | "type": 1,
521 | "color": "#89d5ff",
522 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"4.13\",\"永不让你哭泣,从不对你说再见\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
523 | },
524 | {
525 | "time": 111,
526 | "type": 1,
527 | "color": "#89d5ff",
528 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"4\",\"永不让你哭泣,从不对你说再见\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
529 | },
530 | {
531 | "time": 19,
532 | "type": 1,
533 | "color": "#89d5ff",
534 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"4.07\",\"我们从陌生到相爱\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
535 | },
536 | {
537 | "time": 7,
538 | "type": 1,
539 | "color": "#a0ee00",
540 | "text": "J O J O 飙 马 野 郎 观 看 地 址"
541 | },
542 | {
543 | "time": 10,
544 | "type": 1,
545 | "color": "#e70012",
546 | "text": "嬉 皮 笑 脸"
547 | },
548 | {
549 | "time": 17,
550 | "type": 1,
551 | "color": "#e70012",
552 | "text": "G T A 6 提 前 下 载"
553 | },
554 | {
555 | "time": 0,
556 | "type": 1,
557 | "color": "#683a7b",
558 | "text": "GTA6提前体验"
559 | },
560 | {
561 | "time": 8,
562 | "type": 1,
563 | "color": "#e70012",
564 | "text": "美 国 解 体"
565 | },
566 | {
567 | "time": 7,
568 | "type": 0,
569 | "color": "#ffffff",
570 | "text": "我被骗了?"
571 | },
572 | {
573 | "time": 84,
574 | "type": 0,
575 | "color": "#ffffff",
576 | "text": "原 神 8 . 0 版 本 预 告"
577 | },
578 | {
579 | "time": 6,
580 | "type": 0,
581 | "color": "#fef102",
582 | "text": "武♂器A原版视频"
583 | },
584 | {
585 | "time": 4,
586 | "type": 0,
587 | "color": "#ffffff",
588 | "text": "《盗视频》"
589 | },
590 | {
591 | "time": 1,
592 | "type": 1,
593 | "color": "#e70012",
594 | "text": "诈 骗 视 频"
595 | },
596 | {
597 | "time": 38,
598 | "type": 0,
599 | "color": "#ffffff",
600 | "text": "原神送钟离了"
601 | },
602 | {
603 | "time": 2,
604 | "type": 0,
605 | "color": "#ffffff",
606 | "text": "跳楼00:35"
607 | },
608 | {
609 | "time": 0,
610 | "type": 0,
611 | "color": "#89d5ff",
612 | "text": "原神8.0前瞻直播"
613 | },
614 | {
615 | "time": 18,
616 | "type": 0,
617 | "color": "#ffffff",
618 | "text": "被骗来了"
619 | },
620 | {
621 | "time": 64,
622 | "type": 0,
623 | "color": "#ffffff",
624 | "text": "汪苏泷"
625 | },
626 | {
627 | "time": 186,
628 | "type": 0,
629 | "color": "#e70012",
630 | "text": "正义联盟2"
631 | },
632 | {
633 | "time": 1,
634 | "type": 0,
635 | "color": "#ffffff",
636 | "text": "G T A 6 内 测"
637 | },
638 | {
639 | "time": 0,
640 | "type": 0,
641 | "color": "#ffffff",
642 | "text": "你被骗了"
643 | },
644 | {
645 | "time": 14,
646 | "type": 0,
647 | "color": "#ffffff",
648 | "text": "跳楼03:32"
649 | },
650 | {
651 | "time": 1,
652 | "type": 1,
653 | "color": "#fe0302",
654 | "text": "你被骗了"
655 | },
656 | {
657 | "time": 56,
658 | "type": 1,
659 | "color": "#683a7b",
660 | "text": "永不撒谎,不伤害你"
661 | },
662 | {
663 | "time": 83,
664 | "type": 0,
665 | "color": "#ffffff",
666 | "text": "闪击波兰00:12"
667 | },
668 | {
669 | "time": 131,
670 | "type": 0,
671 | "color": "#fe0302",
672 | "text": "迷 你 世 界 下 架 了迷 你 世 界 下 架 了迷 你 世 界 下 架 了迷 你 世 界 下 架 了"
673 | },
674 | {
675 | "time": 9,
676 | "type": 0,
677 | "color": "#ffffff",
678 | "text": "我被骗了"
679 | },
680 | {
681 | "time": 8,
682 | "type": 0,
683 | "color": "#ffffff",
684 | "text": "我又双叒叕被骗了"
685 | },
686 | {
687 | "time": 191,
688 | "type": 1,
689 | "color": "#e70012",
690 | "text": "黎明觉醒今日公测"
691 | },
692 | {
693 | "time": 202,
694 | "type": 0,
695 | "color": "#ffffff",
696 | "text": "ts10086发布了("
697 | },
698 | {
699 | "time": 1,
700 | "type": 1,
701 | "color": "#e70012",
702 | "text": "延迟开学的文件"
703 | },
704 | {
705 | "time": 9,
706 | "type": 0,
707 | "color": "#ffffff",
708 | "text": "电信诈骗"
709 | },
710 | {
711 | "time": 166,
712 | "type": 0,
713 | "color": "#ffffff",
714 | "text": "95个人正在被骗"
715 | },
716 | {
717 | "time": 154,
718 | "type": 0,
719 | "color": "#ffffff",
720 | "text": "185.5万人已被骗~~~"
721 | },
722 | {
723 | "time": 108,
724 | "type": 0,
725 | "color": "#ffffff",
726 | "text": "轻音少女第三季上映"
727 | },
728 | {
729 | "time": 55,
730 | "type": 1,
731 | "color": "#89d5ff",
732 | "text": "原 神 7 . 0 预 下 载"
733 | },
734 | {
735 | "time": 51,
736 | "type": 0,
737 | "color": "#ffffff",
738 | "text": "原 神 发 3 6 0 0 原 石"
739 | },
740 | {
741 | "time": 39,
742 | "type": 0,
743 | "color": "#ffffff",
744 | "text": "gggg"
745 | },
746 | {
747 | "time": 123,
748 | "type": 0,
749 | "color": "#e70012",
750 | "text": "凹凸世界出大电影了"
751 | },
752 | {
753 | "time": 1,
754 | "type": 0,
755 | "color": "#ffffff",
756 | "text": "ok我又被骗了"
757 | },
758 | {
759 | "time": 75,
760 | "type": 0,
761 | "color": "#ffffff",
762 | "text": "b站真是抖音快手话了。。。"
763 | },
764 | {
765 | "time": 8,
766 | "type": 0,
767 | "color": "#ffffff",
768 | "text": "……,我又双叒叕被骗了"
769 | },
770 | {
771 | "time": 45,
772 | "type": 1,
773 | "color": "#fe0302",
774 | "text": "用不给你上"
775 | },
776 | {
777 | "time": 56,
778 | "type": 0,
779 | "color": "#ffffff",
780 | "text": "孙钰轩单杀张子涵"
781 | },
782 | {
783 | "time": 33,
784 | "type": 0,
785 | "color": "#ffffff",
786 | "text": "传送00:00"
787 | },
788 | {
789 | "time": 38,
790 | "type": 0,
791 | "color": "#ffffff",
792 | "text": "网易我的世界比国际我的世界提前进入1.21版本"
793 | },
794 | {
795 | "time": 3,
796 | "type": 1,
797 | "color": "#e70012",
798 | "text": "听说某人的视频被盗了……"
799 | },
800 | {
801 | "time": 68,
802 | "type": 0,
803 | "color": "#ffffff",
804 | "text": "王者送1000点券了。吃鸡免费送所有枪械皮肤。"
805 | },
806 | {
807 | "time": 47,
808 | "type": 0,
809 | "color": "#ffffff",
810 | "text": "网易1.20宣传片00:00"
811 | },
812 | {
813 | "time": 15,
814 | "type": 0,
815 | "color": "#ffffff",
816 | "text": "空降0:00:00"
817 | },
818 | {
819 | "time": 116,
820 | "type": 1,
821 | "color": "#fe0302",
822 | "text": "mc 1.29更新了!!!"
823 | },
824 | {
825 | "time": 2,
826 | "type": 0,
827 | "color": "#ffffff",
828 | "text": "骗了"
829 | },
830 | {
831 | "time": 16,
832 | "type": 0,
833 | "color": "#ffffff",
834 | "text": "愿者上钩"
835 | },
836 | {
837 | "time": 146,
838 | "type": 0,
839 | "color": "#ffffff",
840 | "text": "63个人正在被骗"
841 | },
842 | {
843 | "time": 35,
844 | "type": 0,
845 | "color": "#ffffff",
846 | "text": "跳楼00:00"
847 | },
848 | {
849 | "time": 67,
850 | "type": 0,
851 | "color": "#ffffff",
852 | "text": "原神结局抢先看"
853 | },
854 | {
855 | "time": 24,
856 | "type": 1,
857 | "color": "#e70012",
858 | "text": "最 终 幻 想 V 1 3"
859 | },
860 | {
861 | "time": 1,
862 | "type": 0,
863 | "color": "#ffffff",
864 | "text": "进来的一看就没下载反诈app"
865 | },
866 | {
867 | "time": 44,
868 | "type": 0,
869 | "color": "#ffffff",
870 | "text": "王者荣耀和原神联动"
871 | },
872 | {
873 | "time": 203,
874 | "type": 1,
875 | "color": "#00a0ea",
876 | "text": "恭喜你们挑战成功!!!!"
877 | },
878 | {
879 | "time": 63,
880 | "type": 0,
881 | "color": "#ffffff",
882 | "text": "热血航线红发香克斯上线"
883 | },
884 | {
885 | "time": 5,
886 | "type": 0,
887 | "color": "#ffffff",
888 | "text": "跳楼00:00"
889 | },
890 | {
891 | "time": 1,
892 | "type": 0,
893 | "color": "#ffffff",
894 | "text": "愿者上钩"
895 | },
896 | {
897 | "time": 28,
898 | "type": 0,
899 | "color": "#ffffff",
900 | "text": "00:00"
901 | },
902 | {
903 | "time": 166,
904 | "type": 0,
905 | "color": "#ffffff",
906 | "text": "GTA6发布并免费赠送"
907 | },
908 | {
909 | "time": 0,
910 | "type": 0,
911 | "color": "#ffffff",
912 | "text": "《万 物 起 源》"
913 | },
914 | {
915 | "time": 42,
916 | "type": 0,
917 | "color": "#ffffff",
918 | "text": "释放传送锚点00:00"
919 | },
920 | {
921 | "time": 16,
922 | "type": 0,
923 | "color": "#ffffff",
924 | "text": "3D天花板之YoRHa 2B"
925 | },
926 | {
927 | "time": 59,
928 | "type": 0,
929 | "color": "#ffffff",
930 | "text": "又被骗了 "
931 | },
932 | {
933 | "time": 4,
934 | "type": 0,
935 | "color": "#ffffff",
936 | "text": "我被别人骗了。"
937 | },
938 | {
939 | "time": 55,
940 | "type": 0,
941 | "color": "#ffffff",
942 | "text": "开学00∶00"
943 | },
944 | {
945 | "time": 43,
946 | "type": 0,
947 | "color": "#ffffff",
948 | "text": "我的世界跳伞00:00"
949 | },
950 | {
951 | "time": 1,
952 | "type": 0,
953 | "color": "#ffffff",
954 | "text": "你被骗了"
955 | },
956 | {
957 | "time": 18,
958 | "type": 0,
959 | "color": "#ffffff",
960 | "text": "我被骗来的"
961 | },
962 | {
963 | "time": 0,
964 | "type": 0,
965 | "color": "#ffffff",
966 | "text": "139人前来诈骗"
967 | },
968 | {
969 | "time": 1,
970 | "type": 0,
971 | "color": "#ffffff",
972 | "text": "你们都是从哪个视频的简介和评论区来的?"
973 | },
974 | {
975 | "time": 35,
976 | "type": 0,
977 | "color": "#ffffff",
978 | "text": "空中支援00:00"
979 | },
980 | {
981 | "time": 3,
982 | "type": 1,
983 | "color": "#e2027f",
984 | "text": "你 被 骗 了"
985 | },
986 | {
987 | "time": 3,
988 | "type": 0,
989 | "color": "#ffffff",
990 | "text": "玩个空球00:00"
991 | },
992 | {
993 | "time": 1,
994 | "type": 1,
995 | "color": "#ffffff",
996 | "text": "拼多多破解版"
997 | },
998 | {
999 | "time": 1,
1000 | "type": 0,
1001 | "color": "#ffffff",
1002 | "text": "传送00:00"
1003 | },
1004 | {
1005 | "time": 7,
1006 | "type": 0,
1007 | "color": "#ffffff",
1008 | "text": "跳楼00:00"
1009 | },
1010 | {
1011 | "time": 10,
1012 | "type": 0,
1013 | "color": "#ffffff",
1014 | "text": "https://b23.tv/43gTYMd"
1015 | },
1016 | {
1017 | "time": 5,
1018 | "type": 0,
1019 | "color": "#ffffff",
1020 | "text": "跳楼00:08"
1021 | },
1022 | {
1023 | "time": 29,
1024 | "type": 0,
1025 | "color": "#ffffff",
1026 | "text": "跳林擒00:00"
1027 | },
1028 | {
1029 | "time": 4,
1030 | "type": 1,
1031 | "color": "#e70012",
1032 | "text": "跳楼00:00"
1033 | },
1034 | {
1035 | "time": 120,
1036 | "type": 0,
1037 | "color": "#ffffff",
1038 | "text": "跳转到1000年00:01"
1039 | },
1040 | {
1041 | "time": 0,
1042 | "type": 0,
1043 | "color": "#ffffff",
1044 | "text": "半 条 命 3 预 告 片"
1045 | },
1046 | {
1047 | "time": 94,
1048 | "type": 0,
1049 | "color": "#ffffff",
1050 | "text": "跳棋00:00"
1051 | },
1052 | {
1053 | "time": 8,
1054 | "type": 0,
1055 | "color": "#ffffff",
1056 | "text": "cao"
1057 | },
1058 | {
1059 | "time": 22,
1060 | "type": 0,
1061 | "color": "#ffffff",
1062 | "text": "nb"
1063 | },
1064 | {
1065 | "time": 153,
1066 | "type": 1,
1067 | "color": "#fef102",
1068 | "text": "三 角 符 文 完 结 了"
1069 | },
1070 | {
1071 | "time": 6,
1072 | "type": 0,
1073 | "color": "#ffffff",
1074 | "text": "."
1075 | },
1076 | {
1077 | "time": 200,
1078 | "type": 1,
1079 | "color": "#89d5ff",
1080 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"4.14\",\"永不舍弃你\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
1081 | },
1082 | {
1083 | "time": 107,
1084 | "type": 1,
1085 | "color": "#89d5ff",
1086 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"3.94\",\"永不舍弃你\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
1087 | },
1088 | {
1089 | "time": 19,
1090 | "type": 1,
1091 | "color": "#89d5ff",
1092 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"4.07\",\"我们从陌生到相爱\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
1093 | },
1094 | {
1095 | "time": 9,
1096 | "type": 1,
1097 | "color": "#fef102",
1098 | "text": "蕉 忍 疾 风 传"
1099 | },
1100 | {
1101 | "time": 0,
1102 | "type": 1,
1103 | "color": "#ffffff",
1104 | "text": "《哥 斯 拉 大 战 金 刚 秘 密 片 段》"
1105 | },
1106 | {
1107 | "time": 0,
1108 | "type": 1,
1109 | "color": "#e70012",
1110 | "text": "免 费 流 量"
1111 | },
1112 | {
1113 | "time": 102,
1114 | "type": 1,
1115 | "color": "#fe0302",
1116 | "text": "清 洁 工 结 束 工 作"
1117 | },
1118 | {
1119 | "time": 10,
1120 | "type": 1,
1121 | "color": "#e70012",
1122 | "text": "我被骗了,我自愿的。"
1123 | },
1124 | {
1125 | "time": 51,
1126 | "type": 0,
1127 | "color": "#ffffff",
1128 | "text": "空袭于耀棋00:21"
1129 | },
1130 | {
1131 | "time": 183,
1132 | "type": 0,
1133 | "color": "#ffffff",
1134 | "text": "吴亦凡出狱"
1135 | },
1136 | {
1137 | "time": 3,
1138 | "type": 0,
1139 | "color": "#ffaa02",
1140 | "text": "求生之路3,半条命3,传送门3"
1141 | },
1142 | {
1143 | "time": 87,
1144 | "type": 0,
1145 | "color": "#ffffff",
1146 | "text": "新书《东北支援全国》(上中下)"
1147 | },
1148 | {
1149 | "time": 24,
1150 | "type": 1,
1151 | "color": "#fef102",
1152 | "text": "我 的 世 界 网 易 版 更 新 了"
1153 | },
1154 | {
1155 | "time": 11,
1156 | "type": 0,
1157 | "color": "#ffffff",
1158 | "text": "你被骗了"
1159 | },
1160 | {
1161 | "time": 3,
1162 | "type": 0,
1163 | "color": "#ffffff",
1164 | "text": "又被骗了"
1165 | },
1166 | {
1167 | "time": 67,
1168 | "type": 0,
1169 | "color": "#ffffff",
1170 | "text": "罗志祥"
1171 | },
1172 | {
1173 | "time": 96,
1174 | "type": 1,
1175 | "color": "#fe0302",
1176 | "text": "文 豪 野 犬 4"
1177 | },
1178 | {
1179 | "time": 2,
1180 | "type": 1,
1181 | "color": "#002e72",
1182 | "text": "爷 自 愿 的"
1183 | },
1184 | {
1185 | "time": 20,
1186 | "type": 0,
1187 | "color": "#ffffff",
1188 | "text": "i li di li d"
1189 | },
1190 | {
1191 | "time": 8,
1192 | "type": 0,
1193 | "color": "#ffffff",
1194 | "text": "《up这个人盗了你很多视频》"
1195 | },
1196 | {
1197 | "time": 35,
1198 | "type": 0,
1199 | "color": "#ffffff",
1200 | "text": "传送03:33"
1201 | },
1202 | {
1203 | "time": 141,
1204 | "type": 0,
1205 | "color": "#e70012",
1206 | "text": "《蔡 虚 鲲 嫖 昌》"
1207 | },
1208 | {
1209 | "time": 17,
1210 | "type": 1,
1211 | "color": "#ffffff",
1212 | "text": "我 的 世 界 1.20 预 告 片"
1213 | },
1214 | {
1215 | "time": 94,
1216 | "type": 1,
1217 | "color": "#e2027f",
1218 | "text": "永不会让你哭泣,永不说再见"
1219 | },
1220 | {
1221 | "time": 1,
1222 | "type": 0,
1223 | "color": "#ffffff",
1224 | "text": "又被人骗了。。。。"
1225 | },
1226 | {
1227 | "time": 91,
1228 | "type": 0,
1229 | "color": "#ffffff",
1230 | "text": "祭礼枪"
1231 | },
1232 | {
1233 | "time": 12,
1234 | "type": 0,
1235 | "color": "#ffffff",
1236 | "text": "跳楼03:32"
1237 | },
1238 | {
1239 | "time": 10,
1240 | "type": 1,
1241 | "color": "#ffd302",
1242 | "text": "《食物语大电影》"
1243 | },
1244 | {
1245 | "time": 17,
1246 | "type": 0,
1247 | "color": "#ffffff",
1248 | "text": "[hoo]"
1249 | },
1250 | {
1251 | "time": 0,
1252 | "type": 0,
1253 | "color": "#ffffff",
1254 | "text": "跳到二战00:00"
1255 | },
1256 | {
1257 | "time": 18,
1258 | "type": 0,
1259 | "color": "#ffffff",
1260 | "text": "跳 趋势00:00"
1261 | },
1262 | {
1263 | "time": 161,
1264 | "type": 1,
1265 | "color": "#009843",
1266 | "text": "进 击 的 巨 人 第 四 季 更 完 了"
1267 | },
1268 | {
1269 | "time": 84,
1270 | "type": 1,
1271 | "color": "#84c0cb",
1272 | "text": "主动被骗"
1273 | },
1274 | {
1275 | "time": 5,
1276 | "type": 0,
1277 | "color": "#ffffff",
1278 | "text": "我被骗了"
1279 | },
1280 | {
1281 | "time": 1,
1282 | "type": 0,
1283 | "color": "#ffffff",
1284 | "text": "明天CSGO大行动!!!!!!!!!"
1285 | },
1286 | {
1287 | "time": 2,
1288 | "type": 1,
1289 | "color": "#e70012",
1290 | "text": "米 国 情 报"
1291 | },
1292 | {
1293 | "time": 38,
1294 | "type": 0,
1295 | "color": "#ffffff",
1296 | "text": "跳到up头上00:00"
1297 | },
1298 | {
1299 | "time": 7,
1300 | "type": 0,
1301 | "color": "#ffffff",
1302 | "text": "跳楼00:04"
1303 | },
1304 | {
1305 | "time": 0,
1306 | "type": 1,
1307 | "color": "#fef102",
1308 | "text": "宁 又 来 辣"
1309 | },
1310 | {
1311 | "time": 2,
1312 | "type": 0,
1313 | "color": "#ffffff",
1314 | "text": "SLS发射成功"
1315 | },
1316 | {
1317 | "time": 9,
1318 | "type": 1,
1319 | "color": "#e70012",
1320 | "text": "聚变打击00:00"
1321 | },
1322 | {
1323 | "time": 116,
1324 | "type": 1,
1325 | "color": "#e70012",
1326 | "text": "e s 2 出 五 奇 人 追 忆 动 画 啦 !"
1327 | },
1328 | {
1329 | "time": 70,
1330 | "type": 1,
1331 | "color": "#e70012",
1332 | "text": "黑 暗 欺 骗 第 五 章"
1333 | },
1334 | {
1335 | "time": 109,
1336 | "type": 0,
1337 | "color": "#e70012",
1338 | "text": "你个色球"
1339 | },
1340 | {
1341 | "time": 205,
1342 | "type": 1,
1343 | "color": "#f0ab2a",
1344 | "text": "恭喜你们挑战成功!!!!"
1345 | },
1346 | {
1347 | "time": 0,
1348 | "type": 1,
1349 | "color": "#e70012",
1350 | "text": "骨王第五季更新"
1351 | },
1352 | {
1353 | "time": 1,
1354 | "type": 1,
1355 | "color": "#ff7204",
1356 | "text": "求生之路3要出了"
1357 | },
1358 | {
1359 | "time": 11,
1360 | "type": 0,
1361 | "color": "#ffffff",
1362 | "text": "跳楼0.00"
1363 | },
1364 | {
1365 | "time": 1,
1366 | "type": 1,
1367 | "color": "#f0ab2a",
1368 | "text": "你被骗了"
1369 | },
1370 | {
1371 | "time": 3,
1372 | "type": 0,
1373 | "color": "#ffffff",
1374 | "text": "欢迎回家"
1375 | },
1376 | {
1377 | "time": 7,
1378 | "type": 0,
1379 | "color": "#ffffff",
1380 | "text": "又被骗了"
1381 | },
1382 | {
1383 | "time": 37,
1384 | "type": 0,
1385 | "color": "#ffffff",
1386 | "text": "00:00"
1387 | },
1388 | {
1389 | "time": 3,
1390 | "type": 0,
1391 | "color": "#ffffff",
1392 | "text": "你被骗了"
1393 | },
1394 | {
1395 | "time": 3,
1396 | "type": 0,
1397 | "color": "#ffffff",
1398 | "text": "愿者上钩"
1399 | },
1400 | {
1401 | "time": 128,
1402 | "type": 1,
1403 | "color": "#00a0ea",
1404 | "text": "上网吗哥们"
1405 | },
1406 | {
1407 | "time": 56,
1408 | "type": 0,
1409 | "color": "#002e72",
1410 | "text": "《皇 室 战 争 合 服》"
1411 | },
1412 | {
1413 | "time": 94,
1414 | "type": 0,
1415 | "color": "#ffffff",
1416 | "text": "前面黄字,漫威蜘蛛侠真的上PC了"
1417 | },
1418 | {
1419 | "time": 41,
1420 | "type": 0,
1421 | "color": "#ffffff",
1422 | "text": "被钩了"
1423 | },
1424 | {
1425 | "time": 7,
1426 | "type": 0,
1427 | "color": "#ffffff",
1428 | "text": "00:00"
1429 | },
1430 | {
1431 | "time": 33,
1432 | "type": 0,
1433 | "color": "#ffffff",
1434 | "text": "跳fdkcfhhc00:00"
1435 | },
1436 | {
1437 | "time": 59,
1438 | "type": 1,
1439 | "color": "#e70012",
1440 | "text": "逐 火 之 蛾 大 电 影"
1441 | },
1442 | {
1443 | "time": 3,
1444 | "type": 0,
1445 | "color": "#ffffff",
1446 | "text": "《level-69-j》"
1447 | },
1448 | {
1449 | "time": 76,
1450 | "type": 0,
1451 | "color": "#ffffff",
1452 | "text": "原神5,3了"
1453 | },
1454 | {
1455 | "time": 15,
1456 | "type": 0,
1457 | "color": "#e70012",
1458 | "text": "爷 乐 意"
1459 | },
1460 | {
1461 | "time": 195,
1462 | "type": 0,
1463 | "color": "#ffffff",
1464 | "text": "minecraft1.21更新了[doge]"
1465 | },
1466 | {
1467 | "time": 8,
1468 | "type": 0,
1469 | "color": "#00a0ea",
1470 | "text": "被骗进来的(doge)"
1471 | },
1472 | {
1473 | "time": 59,
1474 | "type": 0,
1475 | "color": "#ffffff",
1476 | "text": "p a y d a y 3"
1477 | },
1478 | {
1479 | "time": 6,
1480 | "type": 0,
1481 | "color": "#ffffff",
1482 | "text": "??、"
1483 | },
1484 | {
1485 | "time": 26,
1486 | "type": 0,
1487 | "color": "#ffffff",
1488 | "text": "你 被 骗 了"
1489 | },
1490 | {
1491 | "time": 140,
1492 | "type": 0,
1493 | "color": "#e70012",
1494 | "text": "《渣渣只有一个egg证据发现》"
1495 | },
1496 | {
1497 | "time": 1,
1498 | "type": 1,
1499 | "color": "#00a0ea",
1500 | "text": "你被骗了"
1501 | },
1502 | {
1503 | "time": 15,
1504 | "type": 1,
1505 | "color": "#ffffff",
1506 | "text": "《刻 晴 大 战 史 莱 姆》"
1507 | },
1508 | {
1509 | "time": 30,
1510 | "type": 0,
1511 | "color": "#fe0302",
1512 | "text": "我是自怨的"
1513 | },
1514 | {
1515 | "time": 37,
1516 | "type": 0,
1517 | "color": "#ffffff",
1518 | "text": "跳坟00:00"
1519 | },
1520 | {
1521 | "time": 10,
1522 | "type": 0,
1523 | "color": "#ffffff",
1524 | "text": "我自愿的"
1525 | },
1526 | {
1527 | "time": 9,
1528 | "type": 0,
1529 | "color": "#ffffff",
1530 | "text": "你被骗了"
1531 | },
1532 | {
1533 | "time": 167,
1534 | "type": 0,
1535 | "color": "#ffffff",
1536 | "text": "喜羊羊与灰太狼之勇闯四季城开播了!"
1537 | },
1538 | {
1539 | "time": 5,
1540 | "type": 0,
1541 | "color": "#ffffff",
1542 | "text": "你被骗了"
1543 | },
1544 | {
1545 | "time": 6,
1546 | "type": 1,
1547 | "color": "#ffffff",
1548 | "text": "你被骗了"
1549 | },
1550 | {
1551 | "time": 141,
1552 | "type": 0,
1553 | "color": "#ffffff",
1554 | "text": "罗志祥"
1555 | },
1556 | {
1557 | "time": 186,
1558 | "type": 0,
1559 | "color": "#ffffff",
1560 | "text": "穿山甲在鸡汤里游泳"
1561 | },
1562 | {
1563 | "time": 8,
1564 | "type": 1,
1565 | "color": "#009843",
1566 | "text": "老村长出典藏皮了"
1567 | },
1568 | {
1569 | "time": 10,
1570 | "type": 0,
1571 | "color": "#ffffff",
1572 | "text": "我自愿的"
1573 | },
1574 | {
1575 | "time": 0,
1576 | "type": 0,
1577 | "color": "#ffffff",
1578 | "text": "腾讯收购了网易"
1579 | },
1580 | {
1581 | "time": 17,
1582 | "type": 0,
1583 | "color": "#ffffff",
1584 | "text": "恐怖的播放量"
1585 | },
1586 | {
1587 | "time": 10,
1588 | "type": 1,
1589 | "color": "#ffff00",
1590 | "text": "某 6 发 布 了"
1591 | },
1592 | {
1593 | "time": 121,
1594 | "type": 0,
1595 | "color": "#ffffff",
1596 | "text": "赛 博 朋 克 2 0 7 7 第 2 部 实 机 演 示"
1597 | },
1598 | {
1599 | "time": 0,
1600 | "type": 0,
1601 | "color": "#ffffff",
1602 | "text": "哔 哩 哔 哩 极 速 版"
1603 | },
1604 | {
1605 | "time": 17,
1606 | "type": 1,
1607 | "color": "#fef102",
1608 | "text": "您 被 骗 了"
1609 | },
1610 | {
1611 | "time": 102,
1612 | "type": 0,
1613 | "color": "#ffffff",
1614 | "text": "空降"
1615 | },
1616 | {
1617 | "time": 9,
1618 | "type": 0,
1619 | "color": "#ffffff",
1620 | "text": "哈哈哈"
1621 | },
1622 | {
1623 | "time": 86,
1624 | "type": 0,
1625 | "color": "#ffffff",
1626 | "text": "现在有了。"
1627 | },
1628 | {
1629 | "time": 49,
1630 | "type": 0,
1631 | "color": "#ffffff",
1632 | "text": "离谱"
1633 | },
1634 | {
1635 | "time": 28,
1636 | "type": 0,
1637 | "color": "#e70012",
1638 | "text": "第八部福音预告片"
1639 | },
1640 | {
1641 | "time": 150,
1642 | "type": 1,
1643 | "color": "#89d5ff",
1644 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"3.96\",\"我们知道游戏规则并乐此不疲\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
1645 | },
1646 | {
1647 | "time": 56,
1648 | "type": 1,
1649 | "color": "#89d5ff",
1650 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"4.76\",\"永不对你撒谎,从不伤害你\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
1651 | },
1652 | {
1653 | "time": 0,
1654 | "type": 1,
1655 | "color": "#e70012",
1656 | "text": "英伟达官方:3060显卡被破解挖矿声明"
1657 | },
1658 | {
1659 | "time": 0,
1660 | "type": 1,
1661 | "color": "#e70012",
1662 | "text": "淘 宝 免 费 版"
1663 | },
1664 | {
1665 | "time": 0,
1666 | "type": 0,
1667 | "color": "#ffffff",
1668 | "text": "石 之 海 官 方 预 告 片"
1669 | },
1670 | {
1671 | "time": 0,
1672 | "type": 0,
1673 | "color": "#ffffff",
1674 | "text": "Sony Music官方玩梗"
1675 | },
1676 | {
1677 | "time": 205,
1678 | "type": 0,
1679 | "color": "#ffffff",
1680 | "text": "传送00:00"
1681 | },
1682 | {
1683 | "time": 33,
1684 | "type": 0,
1685 | "color": "#ffffff",
1686 | "text": "空袭blx他家00:21"
1687 | },
1688 | {
1689 | "time": 9,
1690 | "type": 0,
1691 | "color": "#ffffff",
1692 | "text": "我是自愿的"
1693 | },
1694 | {
1695 | "time": 1,
1696 | "type": 0,
1697 | "color": "#ffffff",
1698 | "text": "bv1"
1699 | },
1700 | {
1701 | "time": 148,
1702 | "type": 0,
1703 | "color": "#ffffff",
1704 | "text": "新歌《我 是 男 生》"
1705 | },
1706 | {
1707 | "time": 0,
1708 | "type": 1,
1709 | "color": "#00a0ea",
1710 | "text": "《邪神绝对是女孩子》"
1711 | },
1712 | {
1713 | "time": 39,
1714 | "type": 0,
1715 | "color": "#ffffff",
1716 | "text": "跳楼01:00"
1717 | },
1718 | {
1719 | "time": 65,
1720 | "type": 0,
1721 | "color": "#ffffff",
1722 | "text": "114514"
1723 | },
1724 | {
1725 | "time": 75,
1726 | "type": 0,
1727 | "color": "#ffffff",
1728 | "text": "《没毛表白困困了》"
1729 | },
1730 | {
1731 | "time": 32,
1732 | "type": 1,
1733 | "color": "#fe0302",
1734 | "text": "某 科 学 的 超 电 磁 炮 4"
1735 | },
1736 | {
1737 | "time": 1,
1738 | "type": 0,
1739 | "color": "#ffffff",
1740 | "text": "爷自愿的"
1741 | },
1742 | {
1743 | "time": 3,
1744 | "type": 0,
1745 | "color": "#ffffff",
1746 | "text": "欢迎回来"
1747 | },
1748 | {
1749 | "time": 3,
1750 | "type": 0,
1751 | "color": "#ffffff",
1752 | "text": "啊啊啊啊啊被骗了"
1753 | },
1754 | {
1755 | "time": 27,
1756 | "type": 0,
1757 | "color": "#ffffff",
1758 | "text": "诈骗传送03:33"
1759 | },
1760 | {
1761 | "time": 13,
1762 | "type": 0,
1763 | "color": "#ffffff",
1764 | "text": "跳楼00:00"
1765 | },
1766 | {
1767 | "time": 8,
1768 | "type": 0,
1769 | "color": "#ffffff",
1770 | "text": "跳楼00:00"
1771 | },
1772 | {
1773 | "time": 91,
1774 | "type": 1,
1775 | "color": "#e2027f",
1776 | "text": "永不弃你而去"
1777 | },
1778 | {
1779 | "time": 8,
1780 | "type": 1,
1781 | "color": "#fef102",
1782 | "text": "明 日 方 舟"
1783 | },
1784 | {
1785 | "time": 84,
1786 | "type": 0,
1787 | "color": "#ffffff",
1788 | "text": "原神冰系法师实战演示"
1789 | },
1790 | {
1791 | "time": 5,
1792 | "type": 0,
1793 | "color": "#ffffff",
1794 | "text": "跳楼03:33"
1795 | },
1796 | {
1797 | "time": 2,
1798 | "type": 0,
1799 | "color": "#ffffff",
1800 | "text": "现在有93人被骗"
1801 | },
1802 | {
1803 | "time": 15,
1804 | "type": 0,
1805 | "color": "#ffffff",
1806 | "text": "[hoo了"
1807 | },
1808 | {
1809 | "time": 7,
1810 | "type": 0,
1811 | "color": "#ffffff",
1812 | "text": "跳楼00:00"
1813 | },
1814 | {
1815 | "time": 11,
1816 | "type": 0,
1817 | "color": "#ffffff",
1818 | "text": "空袭00:00"
1819 | },
1820 | {
1821 | "time": 51,
1822 | "type": 0,
1823 | "color": "#fef102",
1824 | "text": "在 我 们 之 中 2 宣 传 片"
1825 | },
1826 | {
1827 | "time": 6,
1828 | "type": 1,
1829 | "color": "#ffffff",
1830 | "text": "被骗了吧"
1831 | },
1832 | {
1833 | "time": 40,
1834 | "type": 1,
1835 | "color": "#ffffff",
1836 | "text": "你被骗了"
1837 | },
1838 | {
1839 | "time": 24,
1840 | "type": 0,
1841 | "color": "#ffffff",
1842 | "text": "kmj/h.h/hgggt"
1843 | },
1844 | {
1845 | "time": 0,
1846 | "type": 0,
1847 | "color": "#e2027f",
1848 | "text": "欢迎回家"
1849 | },
1850 | {
1851 | "time": 5,
1852 | "type": 0,
1853 | "color": "#ffffff",
1854 | "text": "《》"
1855 | },
1856 | {
1857 | "time": 158,
1858 | "type": 0,
1859 | "color": "#ffffff",
1860 | "text": "传 说 之 下 出 第 二 代 了"
1861 | },
1862 | {
1863 | "time": 2,
1864 | "type": 0,
1865 | "color": "#ffffff",
1866 | "text": "我自愿的"
1867 | },
1868 | {
1869 | "time": 173,
1870 | "type": 0,
1871 | "color": "#e70012",
1872 | "text": "跳到汪苏泷家被骗00:00"
1873 | },
1874 | {
1875 | "time": 28,
1876 | "type": 0,
1877 | "color": "#019899",
1878 | "text": "恭喜你被骗了"
1879 | },
1880 | {
1881 | "time": 10,
1882 | "type": 0,
1883 | "color": "#ffffff",
1884 | "text": "es免费发放活动五星自选了()"
1885 | },
1886 | {
1887 | "time": 34,
1888 | "type": 1,
1889 | "color": "#e70012",
1890 | "text": "泰坦陨落3"
1891 | },
1892 | {
1893 | "time": 12,
1894 | "type": 0,
1895 | "color": "#ffffff",
1896 | "text": "《jokelevel69》"
1897 | },
1898 | {
1899 | "time": 205,
1900 | "type": 1,
1901 | "color": "#84c0cb",
1902 | "text": "恭喜你们挑战成功!!!!"
1903 | },
1904 | {
1905 | "time": 14,
1906 | "type": 0,
1907 | "color": "#ffffff",
1908 | "text": "00:08"
1909 | },
1910 | {
1911 | "time": 1,
1912 | "type": 0,
1913 | "color": "#ffffff",
1914 | "text": "世界线收束"
1915 | },
1916 | {
1917 | "time": 46,
1918 | "type": 0,
1919 | "color": "#ffffff",
1920 | "text": " https://b23.tv/BediiKD"
1921 | },
1922 | {
1923 | "time": 1,
1924 | "type": 1,
1925 | "color": "#f0ab2a",
1926 | "text": "你被骗了"
1927 | },
1928 | {
1929 | "time": 2,
1930 | "type": 0,
1931 | "color": "#e70012",
1932 | "text": "你被骗了"
1933 | },
1934 | {
1935 | "time": 9,
1936 | "type": 0,
1937 | "color": "#e70012",
1938 | "text": "又又又来了"
1939 | },
1940 | {
1941 | "time": 7,
1942 | "type": 0,
1943 | "color": "#ffffff",
1944 | "text": "nnd,被骗力"
1945 | },
1946 | {
1947 | "time": 2,
1948 | "type": 0,
1949 | "color": "#e70012",
1950 | "text": "你们是不是从链接里过来的?"
1951 | },
1952 | {
1953 | "time": 28,
1954 | "type": 0,
1955 | "color": "#ffffff",
1956 | "text": "传送00:21"
1957 | },
1958 | {
1959 | "time": 165,
1960 | "type": 0,
1961 | "color": "#ffffff",
1962 | "text": "泽拉斯"
1963 | },
1964 | {
1965 | "time": 168,
1966 | "type": 0,
1967 | "color": "#ffffff",
1968 | "text": "103人"
1969 | },
1970 | {
1971 | "time": 50,
1972 | "type": 1,
1973 | "color": "#89d5ff",
1974 | "text": "c h 的 神 仙 太 太"
1975 | },
1976 | {
1977 | "time": 49,
1978 | "type": 1,
1979 | "color": "#00a0ea",
1980 | "text": "香肠派对S1季票皮返场啦~"
1981 | },
1982 | {
1983 | "time": 14,
1984 | "type": 1,
1985 | "color": "#e70012",
1986 | "text": "有谁跟我一样是被骗过来的举个爪"
1987 | },
1988 | {
1989 | "time": 46,
1990 | "type": 0,
1991 | "color": "#ffffff",
1992 | "text": "跳个舞蹈00:00"
1993 | },
1994 | {
1995 | "time": 181,
1996 | "type": 0,
1997 | "color": "#ffffff",
1998 | "text": "GTA6"
1999 | },
2000 | {
2001 | "time": 74,
2002 | "type": 0,
2003 | "color": "#ffffff",
2004 | "text": "传送00:05"
2005 | },
2006 | {
2007 | "time": 2,
2008 | "type": 0,
2009 | "color": "#ffffff",
2010 | "text": "草"
2011 | },
2012 | {
2013 | "time": 7,
2014 | "type": 0,
2015 | "color": "#ffffff",
2016 | "text": "一天一次"
2017 | },
2018 | {
2019 | "time": 3,
2020 | "type": 0,
2021 | "color": "#ffffff",
2022 | "text": "我真的thank you。"
2023 | },
2024 | {
2025 | "time": 14,
2026 | "type": 0,
2027 | "color": "#ffffff",
2028 | "text": "又被骗回来了,呜呜呜"
2029 | },
2030 | {
2031 | "time": 11,
2032 | "type": 0,
2033 | "color": "#ffffff",
2034 | "text": "你被骗了"
2035 | },
2036 | {
2037 | "time": 1,
2038 | "type": 1,
2039 | "color": "#e70012",
2040 | "text": "跳楼00:00"
2041 | },
2042 | {
2043 | "time": 1,
2044 | "type": 1,
2045 | "color": "#e70012",
2046 | "text": "你被骗了"
2047 | },
2048 | {
2049 | "time": 65,
2050 | "type": 1,
2051 | "color": "#e70012",
2052 | "text": "饥 荒 单 机 版 更 新"
2053 | },
2054 | {
2055 | "time": 1,
2056 | "type": 0,
2057 | "color": "#ffffff",
2058 | "text": "有谁是被骗进来的(比如我)"
2059 | },
2060 | {
2061 | "time": 48,
2062 | "type": 0,
2063 | "color": "#ffffff",
2064 | "text": "还挺好听的"
2065 | },
2066 | {
2067 | "time": 125,
2068 | "type": 0,
2069 | "color": "#ffffff",
2070 | "text": "30人真在被骗"
2071 | },
2072 | {
2073 | "time": 16,
2074 | "type": 0,
2075 | "color": "#ffffff",
2076 | "text": "每天自愿被骗十次"
2077 | },
2078 | {
2079 | "time": 35,
2080 | "type": 0,
2081 | "color": "#ffffff",
2082 | "text": "LIBLIB"
2083 | },
2084 | {
2085 | "time": 2,
2086 | "type": 0,
2087 | "color": "#ffffff",
2088 | "text": "你 又 来 了"
2089 | },
2090 | {
2091 | "time": 8,
2092 | "type": 0,
2093 | "color": "#ffffff",
2094 | "text": "跳楼00:00"
2095 | },
2096 | {
2097 | "time": 1,
2098 | "type": 0,
2099 | "color": "#ffffff",
2100 | "text": "绯红之王0:00"
2101 | },
2102 | {
2103 | "time": 13,
2104 | "type": 0,
2105 | "color": "#ffffff",
2106 | "text": "降维打击00:00"
2107 | },
2108 | {
2109 | "time": 17,
2110 | "type": 0,
2111 | "color": "#ffffff",
2112 | "text": "汪苏泷"
2113 | },
2114 | {
2115 | "time": 7,
2116 | "type": 1,
2117 | "color": "#ffffff",
2118 | "text": "崩坏四:银河宣传pv"
2119 | },
2120 | {
2121 | "time": 5,
2122 | "type": 0,
2123 | "color": "#ffffff",
2124 | "text": "老村长出皮肤了"
2125 | },
2126 | {
2127 | "time": 14,
2128 | "type": 0,
2129 | "color": "#ffffff",
2130 | "text": "跳楼00:43"
2131 | },
2132 | {
2133 | "time": 1,
2134 | "type": 0,
2135 | "color": "#ffffff",
2136 | "text": "措不及防"
2137 | },
2138 | {
2139 | "time": 90,
2140 | "type": 0,
2141 | "color": "#ffffff",
2142 | "text": "yyds"
2143 | },
2144 | {
2145 | "time": 43,
2146 | "type": 0,
2147 | "color": "#ffffff",
2148 | "text": "蹦迪00:00"
2149 | },
2150 | {
2151 | "time": 7,
2152 | "type": 0,
2153 | "color": "#ffffff",
2154 | "text": "跳楼00.55"
2155 | },
2156 | {
2157 | "time": 32,
2158 | "type": 1,
2159 | "color": "#fe0302",
2160 | "text": "我自愿的"
2161 | },
2162 | {
2163 | "time": 3,
2164 | "type": 1,
2165 | "color": "#fe0302",
2166 | "text": "这就是魔禁第四季吗,太好看了"
2167 | },
2168 | {
2169 | "time": 8,
2170 | "type": 0,
2171 | "color": "#ffffff",
2172 | "text": "这"
2173 | },
2174 | {
2175 | "time": 30,
2176 | "type": 0,
2177 | "color": "#ffffff",
2178 | "text": "有人吗"
2179 | },
2180 | {
2181 | "time": 202,
2182 | "type": 1,
2183 | "color": "#fe0302",
2184 | "text": "原 神 自 选 五 星"
2185 | },
2186 | {
2187 | "time": 2,
2188 | "type": 0,
2189 | "color": "#ffffff",
2190 | "text": "已经动漫化了"
2191 | },
2192 | {
2193 | "time": 74,
2194 | "type": 0,
2195 | "color": "#ffffff",
2196 | "text": "站出来"
2197 | },
2198 | {
2199 | "time": 146,
2200 | "type": 1,
2201 | "color": "#89d5ff",
2202 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"3.89\",\"但是我们都知道我们之间的发展\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
2203 | },
2204 | {
2205 | "time": 52,
2206 | "type": 1,
2207 | "color": "#89d5ff",
2208 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"4.11\",\"永不让你哭泣,从不对你说再见\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
2209 | },
2210 | {
2211 | "time": 56,
2212 | "type": 1,
2213 | "color": "#ffffff",
2214 | "text": "游 戏 人 生 第 二 季"
2215 | },
2216 | {
2217 | "time": 0,
2218 | "type": 1,
2219 | "color": "#e70012",
2220 | "text": "网 络 诈 骗 案"
2221 | },
2222 | {
2223 | "time": 1,
2224 | "type": 1,
2225 | "color": "#fe0302",
2226 | "text": "《又 被 骗 了》"
2227 | },
2228 | {
2229 | "time": 79,
2230 | "type": 1,
2231 | "color": "#e70012",
2232 | "text": "空 中 劈 叉 的 清 洁 工"
2233 | },
2234 | {
2235 | "time": 7,
2236 | "type": 0,
2237 | "color": "#ffffff",
2238 | "text": "?"
2239 | },
2240 | {
2241 | "time": 10,
2242 | "type": 0,
2243 | "color": "#ffffff",
2244 | "text": "我 的 世 界 正 版 授 权"
2245 | },
2246 | {
2247 | "time": 194,
2248 | "type": 0,
2249 | "color": "#ffffff",
2250 | "text": "《字节跳动倒闭》"
2251 | },
2252 | {
2253 | "time": 3,
2254 | "type": 0,
2255 | "color": "#ffffff",
2256 | "text": "我 视 频 被 盗 了"
2257 | },
2258 | {
2259 | "time": 2,
2260 | "type": 0,
2261 | "color": "#ffffff",
2262 | "text": "羊了个羊第二关攻略"
2263 | },
2264 | {
2265 | "time": 76,
2266 | "type": 0,
2267 | "color": "#ffffff",
2268 | "text": "跳楼00:00"
2269 | },
2270 | {
2271 | "time": 55,
2272 | "type": 0,
2273 | "color": "#ffffff",
2274 | "text": "gta6"
2275 | },
2276 | {
2277 | "time": 110,
2278 | "type": 1,
2279 | "color": "#84c0cb",
2280 | "text": "柯 南 完 结"
2281 | },
2282 | {
2283 | "time": 3,
2284 | "type": 0,
2285 | "color": "#ffffff",
2286 | "text": "永远有人"
2287 | },
2288 | {
2289 | "time": 29,
2290 | "type": 0,
2291 | "color": "#ffffff",
2292 | "text": "有多少人是 被骗过来的"
2293 | },
2294 | {
2295 | "time": 62,
2296 | "type": 0,
2297 | "color": "#e70012",
2298 | "text": "小 姐 姐"
2299 | },
2300 | {
2301 | "time": 187,
2302 | "type": 1,
2303 | "color": "#e70012",
2304 | "text": "原神大结局2022年完结"
2305 | },
2306 | {
2307 | "time": 62,
2308 | "type": 0,
2309 | "color": "#ffffff",
2310 | "text": "此时有75个靓仔被骗进来"
2311 | },
2312 | {
2313 | "time": 13,
2314 | "type": 0,
2315 | "color": "#ffffff",
2316 | "text": "跳楼00:00"
2317 | },
2318 | {
2319 | "time": 47,
2320 | "type": 0,
2321 | "color": "#ffffff",
2322 | "text": "嗯嗯嗯嗯嗯嗯嗯嗯嗯嗯"
2323 | },
2324 | {
2325 | "time": 17,
2326 | "type": 0,
2327 | "color": "#ffffff",
2328 | "text": "?"
2329 | },
2330 | {
2331 | "time": 91,
2332 | "type": 1,
2333 | "color": "#683a7b",
2334 | "text": "紫色弹幕学习去了,让粉色弹幕接班吧"
2335 | },
2336 | {
2337 | "time": 0,
2338 | "type": 0,
2339 | "color": "#ffffff",
2340 | "text": "传火00:00"
2341 | },
2342 | {
2343 | "time": 3,
2344 | "type": 0,
2345 | "color": "#ffffff",
2346 | "text": "绝 地 求 生 巴 雷 特 实 装"
2347 | },
2348 | {
2349 | "time": 24,
2350 | "type": 0,
2351 | "color": "#ffffff",
2352 | "text": "跳楼00:00"
2353 | },
2354 | {
2355 | "time": 0,
2356 | "type": 1,
2357 | "color": "#e70012",
2358 | "text": "你被骗了!"
2359 | },
2360 | {
2361 | "time": 7,
2362 | "type": 0,
2363 | "color": "#ffffff",
2364 | "text": "跳了00:00"
2365 | },
2366 | {
2367 | "time": 72,
2368 | "type": 0,
2369 | "color": "#ffffff",
2370 | "text": "哈哈哈哈哈"
2371 | },
2372 | {
2373 | "time": 6,
2374 | "type": 0,
2375 | "color": "#ffffff",
2376 | "text": "原神3.1自选5星限定up角色活动"
2377 | },
2378 | {
2379 | "time": 0,
2380 | "type": 0,
2381 | "color": "#ffffff",
2382 | "text": "你被骗了"
2383 | },
2384 | {
2385 | "time": 12,
2386 | "type": 0,
2387 | "color": "#ffffff",
2388 | "text": "被骗三次了,呜呜"
2389 | },
2390 | {
2391 | "time": 55,
2392 | "type": 0,
2393 | "color": "#ffffff",
2394 | "text": "传送到了下界00:01"
2395 | },
2396 | {
2397 | "time": 30,
2398 | "type": 0,
2399 | "color": "#ffffff",
2400 | "text": "dilidili "
2401 | },
2402 | {
2403 | "time": 18,
2404 | "type": 1,
2405 | "color": "#fe0302",
2406 | "text": "花雨庭没有外挂拉!!"
2407 | },
2408 | {
2409 | "time": 9,
2410 | "type": 0,
2411 | "color": "#ffffff",
2412 | "text": "有110个人在被骗"
2413 | },
2414 | {
2415 | "time": 143,
2416 | "type": 1,
2417 | "color": "#e70012",
2418 | "text": "你的心在痛你只是羞于开口"
2419 | },
2420 | {
2421 | "time": 41,
2422 | "type": 0,
2423 | "color": "#ffffff",
2424 | "text": "我甚至被骗了"
2425 | },
2426 | {
2427 | "time": 21,
2428 | "type": 0,
2429 | "color": "#ffffff",
2430 | "text": "没被骗啊,我就是来看mv的"
2431 | },
2432 | {
2433 | "time": 2,
2434 | "type": 0,
2435 | "color": "#ffffff",
2436 | "text": "自愿被骗【悲"
2437 | },
2438 | {
2439 | "time": 32,
2440 | "type": 0,
2441 | "color": "#ffffff",
2442 | "text": "跳到哪里去00:00"
2443 | },
2444 | {
2445 | "time": 2,
2446 | "type": 1,
2447 | "color": "#e70012",
2448 | "text": "泰 坦 陨 落 3"
2449 | },
2450 | {
2451 | "time": 42,
2452 | "type": 0,
2453 | "color": "#ffffff",
2454 | "text": "warframe新战争演示视频"
2455 | },
2456 | {
2457 | "time": 129,
2458 | "type": 0,
2459 | "color": "#ffffff",
2460 | "text": "空炸00:00"
2461 | },
2462 | {
2463 | "time": 104,
2464 | "type": 0,
2465 | "color": "#ffffff",
2466 | "text": "中秋节"
2467 | },
2468 | {
2469 | "time": 4,
2470 | "type": 0,
2471 | "color": "#e70012",
2472 | "text": "又被骗了。"
2473 | },
2474 | {
2475 | "time": 192,
2476 | "type": 0,
2477 | "color": "#ffffff",
2478 | "text": "MINECRAFT BETA 1.10出来了"
2479 | },
2480 | {
2481 | "time": 1,
2482 | "type": 1,
2483 | "color": "#f0ab2a",
2484 | "text": "你被骗了"
2485 | },
2486 | {
2487 | "time": 203,
2488 | "type": 0,
2489 | "color": "#ffffff",
2490 | "text": "维斯塔潘7冠了!"
2491 | },
2492 | {
2493 | "time": 5,
2494 | "type": 0,
2495 | "color": "#ffffff",
2496 | "text": "又被骗了"
2497 | },
2498 | {
2499 | "time": 47,
2500 | "type": 0,
2501 | "color": "#ffffff",
2502 | "text": "00:00"
2503 | },
2504 | {
2505 | "time": 0,
2506 | "type": 1,
2507 | "color": "#fef102",
2508 | "text": "不破一亿播放我是不认可的"
2509 | },
2510 | {
2511 | "time": 21,
2512 | "type": 0,
2513 | "color": "#ffffff",
2514 | "text": "传送00:00"
2515 | },
2516 | {
2517 | "time": 111,
2518 | "type": 0,
2519 | "color": "#ffffff",
2520 | "text": "被骗了但是我乐意"
2521 | },
2522 | {
2523 | "time": 17,
2524 | "type": 0,
2525 | "color": "#ffffff",
2526 | "text": "nava gonna give you up"
2527 | },
2528 | {
2529 | "time": 1,
2530 | "type": 1,
2531 | "color": "#ffffff",
2532 | "text": "谁点进来谁就被骗了"
2533 | },
2534 | {
2535 | "time": 190,
2536 | "type": 1,
2537 | "color": "#fef102",
2538 | "text": "《炉石传说给玩家补偿卡包了》"
2539 | },
2540 | {
2541 | "time": 149,
2542 | "type": 0,
2543 | "color": "#ffffff",
2544 | "text": "翻江搅海"
2545 | },
2546 | {
2547 | "time": 51,
2548 | "type": 0,
2549 | "color": "#ffffff",
2550 | "text": "空袭锤子小镇00:00"
2551 | },
2552 | {
2553 | "time": 11,
2554 | "type": 0,
2555 | "color": "#ffffff",
2556 | "text": "传送00:00"
2557 | },
2558 | {
2559 | "time": 40,
2560 | "type": 1,
2561 | "color": "#e70012",
2562 | "text": "空降3:33"
2563 | },
2564 | {
2565 | "time": 62,
2566 | "type": 0,
2567 | "color": "#ffffff",
2568 | "text": " 00:00"
2569 | },
2570 | {
2571 | "time": 0,
2572 | "type": 1,
2573 | "color": "#e70012",
2574 | "text": "110人正在被骗"
2575 | },
2576 | {
2577 | "time": 81,
2578 | "type": 0,
2579 | "color": "#ffffff",
2580 | "text": "4090Ti显卡今天发布了"
2581 | },
2582 | {
2583 | "time": 6,
2584 | "type": 0,
2585 | "color": "#00cd00",
2586 | "text": "三 角 符 文 电 脑 版 免 费 下 载"
2587 | },
2588 | {
2589 | "time": 29,
2590 | "type": 0,
2591 | "color": "#ffffff",
2592 | "text": "被 骗 视 频"
2593 | },
2594 | {
2595 | "time": 122,
2596 | "type": 0,
2597 | "color": "#ffffff",
2598 | "text": "传送00:06"
2599 | },
2600 | {
2601 | "time": 2,
2602 | "type": 0,
2603 | "color": "#ffffff",
2604 | "text": "《高清大片》"
2605 | },
2606 | {
2607 | "time": 14,
2608 | "type": 0,
2609 | "color": "#ffffff",
2610 | "text": "有146位同志被骗"
2611 | },
2612 | {
2613 | "time": 0,
2614 | "type": 0,
2615 | "color": "#ffffff",
2616 | "text": "欢迎回来"
2617 | },
2618 | {
2619 | "time": 137,
2620 | "type": 0,
2621 | "color": "#ffffff",
2622 | "text": "《机动战士高达闪光的哈撒韦第二部》"
2623 | },
2624 | {
2625 | "time": 1,
2626 | "type": 0,
2627 | "color": "#ffffff",
2628 | "text": "当我看评论的时候,每次都能回到这里 "
2629 | },
2630 | {
2631 | "time": 58,
2632 | "type": 1,
2633 | "color": "#e70012",
2634 | "text": "《永远不说谎,不伤害你》"
2635 | },
2636 | {
2637 | "time": 26,
2638 | "type": 0,
2639 | "color": "#ffffff",
2640 | "text": "li'b'li'bliblib"
2641 | },
2642 | {
2643 | "time": 2,
2644 | "type": 0,
2645 | "color": "#ffffff",
2646 | "text": "你 被 骗 了"
2647 | },
2648 | {
2649 | "time": 107,
2650 | "type": 0,
2651 | "color": "#ffffff",
2652 | "text": "原神下架了!"
2653 | },
2654 | {
2655 | "time": 4,
2656 | "type": 0,
2657 | "color": "#ffffff",
2658 | "text": "跳转0:00"
2659 | },
2660 | {
2661 | "time": 4,
2662 | "type": 0,
2663 | "color": "#ffffff",
2664 | "text": "空袭核弹小镇00:00"
2665 | },
2666 | {
2667 | "time": 180,
2668 | "type": 0,
2669 | "color": "#e70012",
2670 | "text": "荒 野 大 镖 客 3"
2671 | },
2672 | {
2673 | "time": 8,
2674 | "type": 0,
2675 | "color": "#ffffff",
2676 | "text": "被骗了 但是是自愿的"
2677 | },
2678 | {
2679 | "time": 7,
2680 | "type": 0,
2681 | "color": "#ffffff",
2682 | "text": "gta6预告片"
2683 | },
2684 | {
2685 | "time": 6,
2686 | "type": 0,
2687 | "color": "#ffffff",
2688 | "text": "00.33"
2689 | },
2690 | {
2691 | "time": 186,
2692 | "type": 0,
2693 | "color": "#ffffff",
2694 | "text": "签到"
2695 | },
2696 | {
2697 | "time": 9,
2698 | "type": 0,
2699 | "color": "#ffffff",
2700 | "text": "传送锚点00:00"
2701 | },
2702 | {
2703 | "time": 38,
2704 | "type": 0,
2705 | "color": "#ffffff",
2706 | "text": "蹦迪00"
2707 | },
2708 | {
2709 | "time": 1,
2710 | "type": 0,
2711 | "color": "#ffffff",
2712 | "text": "00:00"
2713 | },
2714 | {
2715 | "time": 13,
2716 | "type": 0,
2717 | "color": "#ffffff",
2718 | "text": "自愿来的"
2719 | },
2720 | {
2721 | "time": 140,
2722 | "type": 0,
2723 | "color": "#ffffff",
2724 | "text": "黑塔利亚第八季(2022九月)"
2725 | },
2726 | {
2727 | "time": 8,
2728 | "type": 0,
2729 | "color": "#ffffff",
2730 | "text": "这"
2731 | },
2732 | {
2733 | "time": 7,
2734 | "type": 0,
2735 | "color": "#e70012",
2736 | "text": "额"
2737 | },
2738 | {
2739 | "time": 2,
2740 | "type": 0,
2741 | "color": "#ffffff",
2742 | "text": "真出了"
2743 | },
2744 | {
2745 | "time": 6,
2746 | "type": 0,
2747 | "color": "#ffffff",
2748 | "text": "我每次都要来赞你的弹幕"
2749 | },
2750 | {
2751 | "time": 28,
2752 | "type": 0,
2753 | "color": "#ffffff",
2754 | "text": "半条命3"
2755 | },
2756 | {
2757 | "time": 141,
2758 | "type": 1,
2759 | "color": "#89d5ff",
2760 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"4.05\",\"你很心痛因为不好意思开口告白\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
2761 | },
2762 | {
2763 | "time": 47,
2764 | "type": 1,
2765 | "color": "#89d5ff",
2766 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"4\",\"永不舍弃你\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
2767 | },
2768 | {
2769 | "time": 55,
2770 | "type": 0,
2771 | "color": "#e70012",
2772 | "text": "显 卡 原 价 出 售"
2773 | },
2774 | {
2775 | "time": 18,
2776 | "type": 1,
2777 | "color": "#009843",
2778 | "text": "石 之 海 P V "
2779 | },
2780 | {
2781 | "time": 32,
2782 | "type": 1,
2783 | "color": "#927939",
2784 | "text": "你不会得到这个来自其他伙计"
2785 | },
2786 | {
2787 | "time": 52,
2788 | "type": 1,
2789 | "color": "#e70012",
2790 | "text": "黑 人 小 哥 发 现 异 常"
2791 | },
2792 | {
2793 | "time": 1,
2794 | "type": 0,
2795 | "color": "#ffffff",
2796 | "text": "跳到天堂00:00"
2797 | },
2798 | {
2799 | "time": 10,
2800 | "type": 0,
2801 | "color": "#ffffff",
2802 | "text": "wdsj"
2803 | },
2804 | {
2805 | "time": 35,
2806 | "type": 0,
2807 | "color": "#ffffff",
2808 | "text": "bilibili 专 业 版"
2809 | },
2810 | {
2811 | "time": 0,
2812 | "type": 1,
2813 | "color": "#fe0302",
2814 | "text": "2 0 试 点 班 答 案"
2815 | },
2816 | {
2817 | "time": 8,
2818 | "type": 1,
2819 | "color": "#e70012",
2820 | "text": "爷被骗了"
2821 | },
2822 | {
2823 | "time": 73,
2824 | "type": 0,
2825 | "color": "#ffffff",
2826 | "text": "跳楼0:00"
2827 | },
2828 | {
2829 | "time": 3,
2830 | "type": 0,
2831 | "color": "#ffffff",
2832 | "text": "hh"
2833 | },
2834 | {
2835 | "time": 98,
2836 | "type": 1,
2837 | "color": "#e70012",
2838 | "text": "2022还有60多人被骗进来"
2839 | },
2840 | {
2841 | "time": 185,
2842 | "type": 0,
2843 | "color": "#009843",
2844 | "text": "JNTM"
2845 | },
2846 | {
2847 | "time": 6,
2848 | "type": 0,
2849 | "color": "#ffffff",
2850 | "text": "卧槽,哎卧槽"
2851 | },
2852 | {
2853 | "time": 23,
2854 | "type": 0,
2855 | "color": "#ffffff",
2856 | "text": "跳水00:00"
2857 | },
2858 | {
2859 | "time": 23,
2860 | "type": 0,
2861 | "color": "#ffffff",
2862 | "text": "跳楼00:00"
2863 | },
2864 | {
2865 | "time": 0,
2866 | "type": 1,
2867 | "color": "#e70012",
2868 | "text": "你被骗了→_→"
2869 | },
2870 | {
2871 | "time": 92,
2872 | "type": 0,
2873 | "color": "#ffffff",
2874 | "text": "拼多多送钱了"
2875 | },
2876 | {
2877 | "time": 20,
2878 | "type": 1,
2879 | "color": "#00a0ea",
2880 | "text": "苏 联 重 新 建 立"
2881 | },
2882 | {
2883 | "time": 89,
2884 | "type": 1,
2885 | "color": "#ffffff",
2886 | "text": "原神提瓦特篇完结"
2887 | },
2888 | {
2889 | "time": 6,
2890 | "type": 0,
2891 | "color": "#ffffff",
2892 | "text": "传送00:00"
2893 | },
2894 | {
2895 | "time": 1,
2896 | "type": 1,
2897 | "color": "#e70012",
2898 | "text": "我自己搜索的"
2899 | },
2900 | {
2901 | "time": 3,
2902 | "type": 0,
2903 | "color": "#ffffff",
2904 | "text": "爷 乐 意"
2905 | },
2906 | {
2907 | "time": 65,
2908 | "type": 0,
2909 | "color": "#ffffff",
2910 | "text": "我们都知道汪苏泷"
2911 | },
2912 | {
2913 | "time": 0,
2914 | "type": 0,
2915 | "color": "#fef102",
2916 | "text": "hqlm!"
2917 | },
2918 | {
2919 | "time": 19,
2920 | "type": 0,
2921 | "color": "#ffffff",
2922 | "text": "跳鸡你太美00:00"
2923 | },
2924 | {
2925 | "time": 4,
2926 | "type": 1,
2927 | "color": "#e70012",
2928 | "text": "视频被盗"
2929 | },
2930 | {
2931 | "time": 82,
2932 | "type": 0,
2933 | "color": "#ffffff",
2934 | "text": "GTA6现已发售"
2935 | },
2936 | {
2937 | "time": 0,
2938 | "type": 0,
2939 | "color": "#ffffff",
2940 | "text": "恭喜,你被骗了"
2941 | },
2942 | {
2943 | "time": 0,
2944 | "type": 0,
2945 | "color": "#009843",
2946 | "text": "愿 者 上 钩"
2947 | },
2948 | {
2949 | "time": 15,
2950 | "type": 0,
2951 | "color": "#ffffff",
2952 | "text": "传送波澜00:00"
2953 | },
2954 | {
2955 | "time": 62,
2956 | "type": 0,
2957 | "color": "#ffffff",
2958 | "text": "摇摆00:00"
2959 | },
2960 | {
2961 | "time": 36,
2962 | "type": 0,
2963 | "color": "#ffffff",
2964 | "text": "ADR的钙"
2965 | },
2966 | {
2967 | "time": 4,
2968 | "type": 0,
2969 | "color": "#ffffff",
2970 | "text": "《开学领大会员》"
2971 | },
2972 | {
2973 | "time": 139,
2974 | "type": 1,
2975 | "color": "#e70012",
2976 | "text": "《我们已相识许久》"
2977 | },
2978 | {
2979 | "time": 164,
2980 | "type": 0,
2981 | "color": "#ffffff",
2982 | "text": "小度小度(幻视"
2983 | },
2984 | {
2985 | "time": 81,
2986 | "type": 0,
2987 | "color": "#ffffff",
2988 | "text": "每一帧都可以拿来骗别人"
2989 | },
2990 | {
2991 | "time": 35,
2992 | "type": 0,
2993 | "color": "#ffffff",
2994 | "text": "传送00∶00"
2995 | },
2996 | {
2997 | "time": 23,
2998 | "type": 0,
2999 | "color": "#ffffff",
3000 | "text": "怎么可以跳的?00:00"
3001 | },
3002 | {
3003 | "time": 2,
3004 | "type": 0,
3005 | "color": "#ffffff",
3006 | "text": "00:00"
3007 | },
3008 | {
3009 | "time": 0,
3010 | "type": 1,
3011 | "color": "#ffffff",
3012 | "text": "《Windows11取消折叠式右键菜单,且降低硬件要求》"
3013 | },
3014 | {
3015 | "time": 27,
3016 | "type": 0,
3017 | "color": "#ffffff",
3018 | "text": "你还是被骗了"
3019 | },
3020 | {
3021 | "time": 60,
3022 | "type": 0,
3023 | "color": "#ffffff",
3024 | "text": "第二次"
3025 | },
3026 | {
3027 | "time": 22,
3028 | "type": 0,
3029 | "color": "#ffffff",
3030 | "text": "跳你吉吉03:32"
3031 | },
3032 | {
3033 | "time": 24,
3034 | "type": 0,
3035 | "color": "#ffffff",
3036 | "text": "跳楼00:00"
3037 | },
3038 | {
3039 | "time": 1,
3040 | "type": 1,
3041 | "color": "#f0ab2a",
3042 | "text": "你被骗了"
3043 | },
3044 | {
3045 | "time": 0,
3046 | "type": 0,
3047 | "color": "#e70012",
3048 | "text": "生 活 必 需 品"
3049 | },
3050 | {
3051 | "time": 59,
3052 | "type": 1,
3053 | "color": "#e70012",
3054 | "text": "腾讯破产啦!!!"
3055 | },
3056 | {
3057 | "time": 40,
3058 | "type": 0,
3059 | "color": "#ffffff",
3060 | "text": "00:00"
3061 | },
3062 | {
3063 | "time": 185,
3064 | "type": 0,
3065 | "color": "#ffffff",
3066 | "text": "steam里游戏全免费"
3067 | },
3068 | {
3069 | "time": 100,
3070 | "type": 0,
3071 | "color": "#ffffff",
3072 | "text": "红楼梦曹雪芹写的后40回"
3073 | },
3074 | {
3075 | "time": 42,
3076 | "type": 0,
3077 | "color": "#ffffff",
3078 | "text": "apple114514"
3079 | },
3080 | {
3081 | "time": 1,
3082 | "type": 0,
3083 | "color": "#ffffff",
3084 | "text": "《傻猫和坏鼠全集》"
3085 | },
3086 | {
3087 | "time": 48,
3088 | "type": 0,
3089 | "color": "#ffffff",
3090 | "text": "我才知道这是首爱情歌"
3091 | },
3092 | {
3093 | "time": 2,
3094 | "type": 0,
3095 | "color": "#e70012",
3096 | "text": "00.00"
3097 | },
3098 | {
3099 | "time": 141,
3100 | "type": 0,
3101 | "color": "#ffffff",
3102 | "text": "还仅仅军军军句,"
3103 | },
3104 | {
3105 | "time": 32,
3106 | "type": 0,
3107 | "color": "#ffffff",
3108 | "text": "咋感觉陈星旭长得跟老爷子年轻时有点子像"
3109 | },
3110 | {
3111 | "time": 5,
3112 | "type": 0,
3113 | "color": "#ffffff",
3114 | "text": "小黑子00:00"
3115 | },
3116 | {
3117 | "time": 28,
3118 | "type": 1,
3119 | "color": "#e70012",
3120 | "text": "空降3:33"
3121 | },
3122 | {
3123 | "time": 60,
3124 | "type": 0,
3125 | "color": "#ffffff",
3126 | "text": "00:00 "
3127 | },
3128 | {
3129 | "time": 1,
3130 | "type": 0,
3131 | "color": "#ffffff",
3132 | "text": "愿者上钩"
3133 | },
3134 | {
3135 | "time": 18,
3136 | "type": 0,
3137 | "color": "#ffffff",
3138 | "text": "保安司提醒您警惕电信诈骗"
3139 | },
3140 | {
3141 | "time": 98,
3142 | "type": 0,
3143 | "color": "#ffffff",
3144 | "text": "大表哥免费领"
3145 | },
3146 | {
3147 | "time": 1,
3148 | "type": 0,
3149 | "color": "#ffffff",
3150 | "text": "操,我被骗了 "
3151 | },
3152 | {
3153 | "time": 102,
3154 | "type": 0,
3155 | "color": "#ffffff",
3156 | "text": "跳伞00:00"
3157 | },
3158 | {
3159 | "time": 150,
3160 | "type": 0,
3161 | "color": "#ffffff",
3162 | "text": "《高清大片》"
3163 | },
3164 | {
3165 | "time": 1,
3166 | "type": 0,
3167 | "color": "#ffffff",
3168 | "text": "被链接骗过来"
3169 | },
3170 | {
3171 | "time": 1,
3172 | "type": 1,
3173 | "color": "#fe0302",
3174 | "text": "王 者 荣 耀 换 策 划 了"
3175 | },
3176 | {
3177 | "time": 118,
3178 | "type": 0,
3179 | "color": "#ffffff",
3180 | "text": "《机动战士高达海盗动画化》"
3181 | },
3182 | {
3183 | "time": 15,
3184 | "type": 0,
3185 | "color": "#ffffff",
3186 | "text": "传送00:00"
3187 | },
3188 | {
3189 | "time": 7,
3190 | "type": 0,
3191 | "color": "#ffffff",
3192 | "text": "我是自愿的"
3193 | },
3194 | {
3195 | "time": 5,
3196 | "type": 1,
3197 | "color": "#ffffff",
3198 | "text": "欢迎回家"
3199 | },
3200 | {
3201 | "time": 88,
3202 | "type": 0,
3203 | "color": "#00a0ea",
3204 | "text": "141人(dog)"
3205 | },
3206 | {
3207 | "time": 9,
3208 | "type": 0,
3209 | "color": "#ffffff",
3210 | "text": "我自愿的"
3211 | },
3212 | {
3213 | "time": 1,
3214 | "type": 0,
3215 | "color": "#ffffff",
3216 | "text": "绯红之王0:00"
3217 | },
3218 | {
3219 | "time": 0,
3220 | "type": 0,
3221 | "color": "#ffffff",
3222 | "text": "跳楼00:00"
3223 | },
3224 | {
3225 | "time": 11,
3226 | "type": 0,
3227 | "color": "#ffffff",
3228 | "text": "被骗了"
3229 | },
3230 | {
3231 | "time": 7,
3232 | "type": 1,
3233 | "color": "#ffffff",
3234 | "text": "你被骗了"
3235 | },
3236 | {
3237 | "time": 0,
3238 | "type": 0,
3239 | "color": "#fef102",
3240 | "text": "自 愿 受 骗"
3241 | },
3242 | {
3243 | "time": 19,
3244 | "type": 1,
3245 | "color": "#89d5ff",
3246 | "text": "我们对爱情非常熟悉"
3247 | },
3248 | {
3249 | "time": 0,
3250 | "type": 1,
3251 | "color": "#e70012",
3252 | "text": "你被骗了"
3253 | },
3254 | {
3255 | "time": 0,
3256 | "type": 1,
3257 | "color": "#ffffff",
3258 | "text": "被骗了"
3259 | },
3260 | {
3261 | "time": 7,
3262 | "type": 0,
3263 | "color": "#ffffff",
3264 | "text": "又被骗了"
3265 | },
3266 | {
3267 | "time": 128,
3268 | "type": 0,
3269 | "color": "#ffffff",
3270 | "text": "愿者上钩"
3271 | },
3272 | {
3273 | "time": 0,
3274 | "type": 0,
3275 | "color": "#ffffff",
3276 | "text": "我自愿的"
3277 | },
3278 | {
3279 | "time": 38,
3280 | "type": 0,
3281 | "color": "#ffffff",
3282 | "text": "传送00:00"
3283 | },
3284 | {
3285 | "time": 2,
3286 | "type": 1,
3287 | "color": "#e70012",
3288 | "text": "这是我见过最多点赞的弹幕"
3289 | },
3290 | {
3291 | "time": 6,
3292 | "type": 0,
3293 | "color": "#ffffff",
3294 | "text": "弹幕还能评论啊"
3295 | },
3296 | {
3297 | "time": 7,
3298 | "type": 0,
3299 | "color": "#ffffff",
3300 | "text": "哼哼哼啊啊啊啊啊啊啊啊啊"
3301 | },
3302 | {
3303 | "time": 187,
3304 | "type": 1,
3305 | "color": "#00a0ea",
3306 | "text": "三 体 原 版 游 戏"
3307 | },
3308 | {
3309 | "time": 183,
3310 | "type": 1,
3311 | "color": "#89d5ff",
3312 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"4.01\",\"永不舍弃你\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
3313 | },
3314 | {
3315 | "time": 90,
3316 | "type": 1,
3317 | "color": "#89d5ff",
3318 | "text": "[\"0.05\",\"0.1\",\"1-1\",\"3.97\",\"永不舍弃你\",0,0,\"0.05\",\"0.1\",0,0,1,\"宋体\",0]"
3319 | },
3320 | {
3321 | "time": 116,
3322 | "type": 1,
3323 | "color": "#00cd00",
3324 | "text": "永不撒谎,不伤害你✿✿ヽ(°▽°)ノ✿"
3325 | },
3326 | {
3327 | "time": 2,
3328 | "type": 1,
3329 | "color": "#009843",
3330 | "text": "J O J O 第 六 部 :石 之 海 更 新"
3331 | },
3332 | {
3333 | "time": 11,
3334 | "type": 1,
3335 | "color": "#fef102",
3336 | "text": "a v 1 0 4 9 2 原 版"
3337 | },
3338 | {
3339 | "time": 204,
3340 | "type": 1,
3341 | "color": "#fef102",
3342 | "text": "这个音真的稳真的好听"
3343 | },
3344 | {
3345 | "time": 0,
3346 | "type": 1,
3347 | "color": "#f0ab2a",
3348 | "text": "宁 又 来 了"
3349 | },
3350 | {
3351 | "time": 0,
3352 | "type": 0,
3353 | "color": "#ffffff",
3354 | "text": "跳楼00:00"
3355 | },
3356 | {
3357 | "time": 1,
3358 | "type": 0,
3359 | "color": "#ffffff",
3360 | "text": "这是第四次被骗"
3361 | },
3362 | {
3363 | "time": 1,
3364 | "type": 0,
3365 | "color": "#ffffff",
3366 | "text": "跳楼00:00"
3367 | },
3368 | {
3369 | "time": 38,
3370 | "type": 1,
3371 | "color": "#e70012",
3372 | "text": "龙珠更新了!"
3373 | },
3374 | {
3375 | "time": 197,
3376 | "type": 0,
3377 | "color": "#ffffff",
3378 | "text": "????又一次,被搅晕了,我选的是中文和英语怎么出来了啥玩意和俄语"
3379 | },
3380 | {
3381 | "time": 13,
3382 | "type": 0,
3383 | "color": "#ffffff",
3384 | "text": "跳楼00:01"
3385 | },
3386 | {
3387 | "time": 0,
3388 | "type": 0,
3389 | "color": "#ffffff",
3390 | "text": "八嘎!!!!!!"
3391 | },
3392 | {
3393 | "time": 0,
3394 | "type": 1,
3395 | "color": "#e70012",
3396 | "text": "你被骗了"
3397 | },
3398 | {
3399 | "time": 64,
3400 | "type": 0,
3401 | "color": "#009843",
3402 | "text": "GTA6游戏CG"
3403 | },
3404 | {
3405 | "time": 0,
3406 | "type": 1,
3407 | "color": "#ffffff",
3408 | "text": "欢迎回来"
3409 | },
3410 | {
3411 | "time": 29,
3412 | "type": 0,
3413 | "color": "#ffffff",
3414 | "text": "传送00:00"
3415 | },
3416 | {
3417 | "time": 5,
3418 | "type": 1,
3419 | "color": "#e70012",
3420 | "text": "我 的 世 界 1 . 2 0 宣 传 片"
3421 | },
3422 | {
3423 | "time": 9,
3424 | "type": 0,
3425 | "color": "#ffffff",
3426 | "text": "被骗了"
3427 | },
3428 | {
3429 | "time": 7,
3430 | "type": 0,
3431 | "color": "#00a0ea",
3432 | "text": "荒野乱斗来的"
3433 | },
3434 | {
3435 | "time": 16,
3436 | "type": 0,
3437 | "color": "#ffffff",
3438 | "text": "跳骉00:01"
3439 | },
3440 | {
3441 | "time": 85,
3442 | "type": 0,
3443 | "color": "#ffffff",
3444 | "text": "复仇者联盟5预告片"
3445 | },
3446 | {
3447 | "time": 83,
3448 | "type": 1,
3449 | "color": "#683a7b",
3450 | "text": "不要告诉我你熟视无睹"
3451 | },
3452 | {
3453 | "time": 20,
3454 | "type": 1,
3455 | "color": "#fef102",
3456 | "text": "原神3.2pv"
3457 | },
3458 | {
3459 | "time": 52,
3460 | "type": 1,
3461 | "color": "#ffffff",
3462 | "text": "跳舞的线更新了"
3463 | },
3464 | {
3465 | "time": 25,
3466 | "type": 0,
3467 | "color": "#ffffff",
3468 | "text": "你知道尺子,我也是"
3469 | },
3470 | {
3471 | "time": 2,
3472 | "type": 0,
3473 | "color": "#ffffff",
3474 | "text": "自愿来的"
3475 | },
3476 | {
3477 | "time": 7,
3478 | "type": 0,
3479 | "color": "#ffffff",
3480 | "text": "跳楼00:00"
3481 | },
3482 | {
3483 | "time": 41,
3484 | "type": 0,
3485 | "color": "#ffffff",
3486 | "text": "跳楼00:00"
3487 | },
3488 | {
3489 | "time": 51,
3490 | "type": 1,
3491 | "color": "#ffffff",
3492 | "text": "奶糖帅照"
3493 | },
3494 | {
3495 | "time": 0,
3496 | "type": 1,
3497 | "color": "#ffffff",
3498 | "text": "《视 频 被 盗 了》"
3499 | },
3500 | {
3501 | "time": 2,
3502 | "type": 0,
3503 | "color": "#ffffff",
3504 | "text": "自 投 罗 网"
3505 | },
3506 | {
3507 | "time": 23,
3508 | "type": 0,
3509 | "color": "#ffffff",
3510 | "text": "传送02:12"
3511 | },
3512 | {
3513 | "time": 97,
3514 | "type": 0,
3515 | "color": "#ffffff",
3516 | "text": "传送00:00"
3517 | },
3518 | {
3519 | "time": 0,
3520 | "type": 1,
3521 | "color": "#e70012",
3522 | "text": "你又来了"
3523 | },
3524 | {
3525 | "time": 9,
3526 | "type": 0,
3527 | "color": "#ffffff",
3528 | "text": "自愿被骗"
3529 | },
3530 | {
3531 | "time": 1,
3532 | "type": 0,
3533 | "color": "#e70012",
3534 | "text": "你被骗了"
3535 | },
3536 | {
3537 | "time": 4,
3538 | "type": 0,
3539 | "color": "#ffffff",
3540 | "text": "你被骗了"
3541 | },
3542 | {
3543 | "time": 89,
3544 | "type": 1,
3545 | "color": "#e70012",
3546 | "text": "《斗罗大陆大结局》"
3547 | },
3548 | {
3549 | "time": 205,
3550 | "type": 0,
3551 | "color": "#683a7b",
3552 | "text": "传送00:00"
3553 | },
3554 | {
3555 | "time": 21,
3556 | "type": 0,
3557 | "color": "#ffffff",
3558 | "text": "怎么可以跳的?"
3559 | },
3560 | {
3561 | "time": 13,
3562 | "type": 0,
3563 | "color": "#ffffff",
3564 | "text": "124人被骗"
3565 | },
3566 | {
3567 | "time": 56,
3568 | "type": 0,
3569 | "color": "#ffffff",
3570 | "text": "网易优化我的世界服务器了"
3571 | },
3572 | {
3573 | "time": 7,
3574 | "type": 0,
3575 | "color": "#fef102",
3576 | "text": "又被骗了"
3577 | },
3578 | {
3579 | "time": 6,
3580 | "type": 0,
3581 | "color": "#ffffff",
3582 | "text": "做作业兴奋剂"
3583 | },
3584 | {
3585 | "time": 7,
3586 | "type": 0,
3587 | "color": "#ffffff",
3588 | "text": "我被骗了哈哈哈哈哈"
3589 | },
3590 | {
3591 | "time": 186,
3592 | "type": 0,
3593 | "color": "#ffffff",
3594 | "text": "《斗罗大陆》动画版除了第三章"
3595 | },
3596 | {
3597 | "time": 1,
3598 | "type": 1,
3599 | "color": "#f0ab2a",
3600 | "text": "你被骗了"
3601 | }
3602 | ]
--------------------------------------------------------------------------------
/examples/main.ts:
--------------------------------------------------------------------------------
1 | import App from '@/App.vue';
2 | import { createApp } from "vue";
3 |
4 | const app = createApp(App);
5 |
6 | app.mount('#app');
--------------------------------------------------------------------------------
/examples/vite-env.d.ts:
--------------------------------------------------------------------------------
1 | ///
2 |
3 | declare module '*.vue' {
4 | import type { DefineComponent } from 'vue'
5 | const component: DefineComponent<{}, {}, any>
6 | export default component
7 | }
8 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | vue-wplayer
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "vue-wplayer",
3 | "private": false,
4 | "version": "0.8.0",
5 | "license": "MIT",
6 | "author": "wzm",
7 | "description": "基于Vue3的弹幕视频播放器",
8 | "keywords": [
9 | "vue",
10 | "player",
11 | "danmaku",
12 | "video"
13 | ],
14 | "repository": {
15 | "url": "git+https://github.com/wangzmgit/vue-wplayer.git",
16 | "type": "git"
17 | },
18 | "files": [
19 | "dist"
20 | ],
21 | "module": "./dist/index.js",
22 | "typings": "./dist/index.d.ts",
23 | "exports": {
24 | ".": {
25 | "import": "./dist/index.js"
26 | },
27 | "./dist/style.css": "./dist/style.css"
28 | },
29 | "husky": {
30 | "hooks": {
31 | "commit-msg": "commitlint -e HUSKY_GIT_PARAMS"
32 | }
33 | },
34 | "scripts": {
35 | "dev": "vite",
36 | "build": "vite build",
37 | "preview": "vite preview",
38 | "prepare": "husky install",
39 | "docs:dev": "vuepress dev docs",
40 | "docs:build": "vuepress build docs"
41 | },
42 | "devDependencies": {
43 | "@commitlint/cli": "^17.1.2",
44 | "@commitlint/config-conventional": "^17.1.0",
45 | "@types/node": "^18.7.18",
46 | "@vitejs/plugin-vue": "^3.1.0",
47 | "@vuepress/plugin-register-components": "^2.0.0-beta.51",
48 | "fast-glob": "^3.2.12",
49 | "husky": "^8.0.1",
50 | "less": "^4.1.3",
51 | "less-loader": "^11.0.0",
52 | "typescript": "^4.6.4",
53 | "vite": "^3.1.0",
54 | "vite-plugin-css-injected-by-js": "^3.0.0",
55 | "vite-plugin-dts": "^1.5.0",
56 | "vite-plugin-svg-icons": "^2.0.1",
57 | "vue": "^3.2.39",
58 | "vue-tsc": "^0.40.4",
59 | "vuepress": "^2.0.0-beta.51"
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/packages/components/base-button.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
29 |
30 |
58 |
--------------------------------------------------------------------------------
/packages/components/base-slider.vue:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
13 |
135 |
136 |
--------------------------------------------------------------------------------
/packages/components/base-switch.vue:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
29 |
30 |
79 |
--------------------------------------------------------------------------------
/packages/components/context-menu.vue:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
快捷键说明
20 |
21 | Space |
22 | 播放/暂停 |
23 |
24 |
25 | 鼠标双击 |
26 | 播放/暂停 |
27 |
28 |
29 | ESC |
30 | 退出全屏 |
31 |
32 |
33 | ←/→ |
34 | 前进/后退10秒 |
35 |
36 |
37 | Ctrl+m |
38 | 镜像播放 |
39 |
40 |
41 |
42 |
43 |
85 |
86 |
--------------------------------------------------------------------------------
/packages/components/danmaku-container.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
209 |
210 |
--------------------------------------------------------------------------------
/packages/components/danmaku-send.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
{{ danmakuCount }}条弹幕
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
29 |
30 |
31 |
67 |
68 |
69 |
70 |
202 |
203 |
--------------------------------------------------------------------------------
/packages/components/player-buffering.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |

4 |
5 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/packages/components/player-control.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 | {{ toTimeText(videoInfo.currentTime) }} / {{ toTimeText(videoInfo.duration) }}
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | {{ videoInfo.qualityText }}
24 |
32 |
33 |
34 |
35 | {{ videoInfo.speedText }}
36 |
44 |
45 |
46 |
47 |
48 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
253 |
254 |
--------------------------------------------------------------------------------
/packages/components/player-msg.vue:
--------------------------------------------------------------------------------
1 |
2 | {{ props.msg }}
3 |
4 |
5 |
11 |
12 |
--------------------------------------------------------------------------------
/packages/components/svg-icon.vue:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/packages/hooks/config.ts:
--------------------------------------------------------------------------------
1 | export default function useConfig() {
2 | const configItems = ["defaultQuality", "danmaku", "volume", "disableType", "disableLeave"];
3 | const getConfig = () => {
4 | const config = localStorage.getItem("wplayer-config");
5 | if (!config) {
6 | return initConfig();
7 | }
8 |
9 | const objConfig = JSON.parse(config);
10 | // 检查配置项是否存在
11 | const configKeys = Object.keys(objConfig);
12 | for (const item of configItems) {
13 | if (!configKeys.includes(item)) {
14 | initConfig();
15 | }
16 | }
17 |
18 | return objConfig;
19 | }
20 |
21 | const getConfigItem = (key: string) => {
22 | const content = getConfig();
23 | return content[key];
24 | }
25 |
26 | const setConfig = (key: string, value: any) => {
27 | const readConfig = localStorage.getItem("wplayer-config");
28 | const config = JSON.parse(readConfig ? readConfig : "{}");
29 | config[key] = value;
30 | localStorage.setItem("wplayer-config", JSON.stringify(config));
31 | }
32 |
33 | const initConfig = () => {
34 | const config = {
35 | defaultQuality: 720,//默认分辨率
36 | danmaku: true,
37 | volume: 80,
38 | disableType: [],
39 | disableLeave: 0,
40 | }
41 | localStorage.setItem("wplayer-config", JSON.stringify(config));
42 | return config;
43 | }
44 |
45 | return {
46 | getConfig,
47 | setConfig,
48 | getConfigItem
49 | }
50 | }
51 |
52 |
--------------------------------------------------------------------------------
/packages/hooks/full-screen.ts:
--------------------------------------------------------------------------------
1 | import { ref } from 'vue';
2 |
3 |
4 | export default function useFullScreen() {
5 | const playerRef = ref(null);
6 |
7 | // 判断是否为全屏
8 | const isFullScreen = () => {
9 | return document.fullscreenElement ? true : false;
10 | }
11 | //全屏
12 | const fullScreen = () => {
13 | if (!isFullScreen()) {
14 | const doc = playerRef.value;
15 | if (doc?.requestFullscreen) {
16 | doc.requestFullscreen();
17 | } else if (doc?.mozRequestFullScreen) {
18 | doc?.mozRequestFullScreen();
19 | } else if (doc.webkitRequestFullScreen) {
20 | doc?.webkitRequestFullScreen();
21 | }
22 | } else {
23 | const exit: any = document;
24 | if (exit.exitFullscreen) {
25 | exit.exitFullscreen();
26 | } else if (exit.mozCancelFullScreen) {
27 | exit.mozCancelFullScreen();
28 | } else if (exit.webkitCancelFullScreen) {
29 | exit.webkitCancelFullScreen();
30 | }
31 | }
32 | }
33 |
34 | return {
35 | playerRef,
36 | fullScreen,
37 | isFullScreen
38 | }
39 | }
40 |
41 |
--------------------------------------------------------------------------------
/packages/hooks/msg.ts:
--------------------------------------------------------------------------------
1 | import { ref } from 'vue';
2 |
3 |
4 | export default function useMsg() {
5 | const msg = ref("");
6 | const showMsg = ref(false);
7 | //显示消息
8 | const changeMsg = (message: string) => {
9 | msg.value = message;
10 | showMsg.value = true;
11 | //定时隐藏
12 | setTimeout(() => {
13 | showMsg.value = false;
14 | }, 3000);
15 | }
16 | return {
17 | msg,
18 | showMsg,
19 | changeMsg
20 | }
21 | }
22 |
23 |
--------------------------------------------------------------------------------
/packages/hooks/options.ts:
--------------------------------------------------------------------------------
1 | import { OptionsType } from "../types/options";
2 |
3 | export function handleOptions(options: OptionsType | undefined) {
4 | const defaultOptions: OptionsType = {
5 | resource: "",
6 | type: "mp4",//视频类型
7 | theme: "#4b5cc4",//主题色,
8 | mobile: false,
9 | blob: false,//mp4视频是否使用blob
10 | danmaku: {
11 | open: false,
12 | placeholder: "在这里输入弹幕哦~"
13 | },
14 | playbackSpeed: [0.5, 0.75, 1, 1.5, 2],// 播放速度
15 | }
16 |
17 | const newOptions = Object.assign(defaultOptions, options);
18 |
19 | //处理清晰度信息
20 | if (typeof newOptions?.resource === 'string') {
21 | newOptions.resource = {
22 | 0: {
23 | name: '默认',
24 | url: newOptions.resource,
25 | }
26 | }
27 | }
28 |
29 | //处理弹幕配置信息
30 | if (newOptions.danmaku && !newOptions.danmaku.placeholder) {
31 | newOptions.danmaku.placeholder = "在这里输入弹幕哦~";
32 | }
33 |
34 | return newOptions;
35 | }
--------------------------------------------------------------------------------
/packages/hooks/quality.ts:
--------------------------------------------------------------------------------
1 | import { ref } from 'vue';
2 | import { QualityType } from '../types/options';
3 | import useConfig from './config';
4 |
5 | export default function useQuality() {
6 | const config = useConfig();
7 | const maxQuality = ref(0);//最大清晰度下标
8 |
9 | //获取当前清晰度
10 | const getInitialQuality = (quality: QualityType): number => {
11 | const keys = Object.keys(quality);
12 | maxQuality.value = parseInt(keys[keys.length - 1]);
13 | const defaultQuality = config.getConfigItem('defaultQuality');
14 | if (!defaultQuality || !quality[defaultQuality]) {
15 | //默认清晰度不存在,使用最高清晰度
16 | return maxQuality.value;
17 | }
18 |
19 | return defaultQuality;
20 | }
21 |
22 | return {
23 | maxQuality,
24 | getInitialQuality
25 | }
26 | }
27 |
28 |
--------------------------------------------------------------------------------
/packages/hooks/shortcut-key.ts:
--------------------------------------------------------------------------------
1 |
2 | export default function useShortcutKey() {
3 |
4 | let keydown = "";
5 | let keyArray: Array = [];
6 |
7 | const handleKeyDown = (e: KeyboardEvent, handle?: ShortcutKeyType) => {
8 | const activeElement = document.activeElement?.tagName || "";
9 | const disableShortcutElement = ['INPUT', 'TEXTAREA'];
10 | if (disableShortcutElement.includes(activeElement)) return;
11 | if (keyArray.length > 0) {
12 | // a-z的按键 长按去重
13 | if (keyArray.indexOf(e.key.toLowerCase()) >= 0) {
14 | return;
15 | }
16 | }
17 | keyArray.push(e.key.toLowerCase());
18 | keydown = keyArray.join("+");
19 | // 监听按键捕获
20 | if (handle && handle[keydown]) {
21 | e.preventDefault();
22 | handle[keydown]();
23 | }
24 | }
25 |
26 | const handleKeyUp = (e: KeyboardEvent) => {
27 | keyArray.splice(keyArray.indexOf(e.key.toLowerCase()), 1);
28 | keydown = keyArray.join("+");
29 | e.preventDefault();
30 | }
31 |
32 | return {
33 | handleKeyUp,
34 | handleKeyDown
35 | }
36 |
37 | }
--------------------------------------------------------------------------------
/packages/icons/fullScreen.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/wangzmgit/vue-wplayer/d80f9965a87137eea49a1c5d88591a2d02281329/packages/icons/loading.png
--------------------------------------------------------------------------------
/packages/icons/pause.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/play.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/icons/replay.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/setting.svg:
--------------------------------------------------------------------------------
1 |
4 |
--------------------------------------------------------------------------------
/packages/icons/style.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/packages/icons/volume.svg:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/packages/index.ts:
--------------------------------------------------------------------------------
1 | import { App } from 'vue';
2 | import WPlayer from './wplayer.vue';
3 | import { OptionsType } from './types/options';
4 | import { DanmakuType } from './types/danmaku';
5 |
6 | // 定义 install 方法, App 作为参数
7 | const install = (app: App): void => {
8 | app.component(WPlayer.name, WPlayer);
9 | }
10 |
11 | export {
12 | WPlayer
13 | };
14 |
15 | export type {
16 | OptionsType,
17 | DanmakuType
18 | };
19 |
20 | export default {
21 | install
22 | }
--------------------------------------------------------------------------------
/packages/types/danmaku.d.ts:
--------------------------------------------------------------------------------
1 | export interface DanmakuType {
2 | time: number,
3 | color: string,
4 | type: number,
5 | text: string,
6 | }
7 |
8 | export interface DrawDanmakuType {
9 | color: string,
10 | type: number,
11 | text: string,
12 | }
13 |
14 | export interface FilterDanmakuType {
15 | disableType: Array,
16 | disableLeave: number,
17 | }
--------------------------------------------------------------------------------
/packages/types/options.d.ts:
--------------------------------------------------------------------------------
1 | import { DanmakuType } from "./danmaku";
2 |
3 | export interface QualityType {
4 | [key: number]: {
5 | name?: string,
6 | url: string,
7 | type?: string
8 | }
9 | }
10 |
11 | export interface DanmakuOptionsType {
12 | open: boolean,
13 | placeholder?: string,
14 | data?: Array,
15 | send?: (danmaku: DanmakuType) => void
16 | }
17 |
18 | export interface OptionsType {
19 | resource: string | QualityType,
20 | cover?: string,
21 | type?: string,//视频类型
22 | mobile?: boolean,//移动端
23 | blob?: boolean,//mp4视频是否使用blob
24 | customType?: (player: HTMLVideoElement, src: string) => void,
25 | customQualityChange?: (quality: number) => void,
26 | theme?: string,//主题色,
27 | danmaku?: DanmakuOptionsType,
28 | playbackSpeed?: Array,// 播放速度
29 | }
--------------------------------------------------------------------------------
/packages/types/shortcut-key.d.ts:
--------------------------------------------------------------------------------
1 | interface ShortcutKeyType {
2 | [key: string]: () => void
3 | }
--------------------------------------------------------------------------------
/packages/wplayer.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
7 |
8 |
14 |
15 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
29 |
30 |
31 |
32 |
371 |
372 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ESNext",
4 | "useDefineForClassFields": true,
5 | "module": "ESNext",
6 | "moduleResolution": "Node",
7 | "strict": true,
8 | "jsx": "preserve",
9 | "sourceMap": true,
10 | "resolveJsonModule": true,
11 | "isolatedModules": true,
12 | "esModuleInterop": true,
13 | "lib": [
14 | "ESNext",
15 | "DOM"
16 | ],
17 | "skipLibCheck": true
18 | },
19 | "include": [
20 | "examples/**/*.ts",
21 | "examples/**/*.d.ts",
22 | "examples/**/*.vue",
23 | "packages/**/*.ts",
24 | "packages/**/*.d.ts",
25 | "packages/**/*.vue",
26 | ],
27 | "type": [
28 | "node"
29 | ]
30 | }
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vite';
2 | import vue from '@vitejs/plugin-vue';
3 | import { resolve } from 'path';
4 | import { createSvgIconsPlugin } from 'vite-plugin-svg-icons';
5 | import dts from 'vite-plugin-dts';
6 | import cssInjectedByJsPlugin from 'vite-plugin-css-injected-by-js';
7 |
8 | export default defineConfig({
9 | plugins: [
10 | vue(),
11 | dts({
12 | entryRoot: 'packages',
13 | }),
14 | createSvgIconsPlugin({
15 | // 指定需要缓存的图标文件夹
16 | iconDirs: [resolve(process.cwd(), 'packages/icons')],
17 | // 指定symbolId格式
18 | symbolId: 'icon-[dir]-[name]',
19 | }),
20 | cssInjectedByJsPlugin(),
21 | ],
22 | resolve: {
23 | alias: {
24 | "@": resolve(__dirname, 'examples')
25 | }
26 | },
27 | build: {
28 | target: "modules",
29 | lib: {
30 | entry: resolve(__dirname, 'packages/index.ts'),
31 | name: 'vue-wplayer',
32 | formats: ["es"]
33 | },
34 | rollupOptions: {
35 | external: ['vue'],
36 | input: ["packages/index.ts"],
37 | output: {
38 | globals: {
39 | vue: 'Vue',
40 | },
41 | format: 'es',
42 | entryFileNames: '[name].js',
43 | preserveModules: true,
44 | preserveModulesRoot: 'packages'
45 | }
46 | }
47 | }
48 | })
--------------------------------------------------------------------------------