├── .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 | ![NPM](https://img.shields.io/npm/l/vue-wplayer) 3 | ![npm](https://img.shields.io/npm/v/vue-wplayer?logo=npm) 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 | 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 | 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 |
6 |
7 | 8 |
9 |
-------------------------------------------------------------------------------- /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 | 37 | ``` 38 | 播放器接收一个 `options` prop。通过修改 `options` 可以自定义播放器,详情请查看 [参数](parameters)。 39 | 40 | 41 | ## 完整示例 42 | ```vue 43 | 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 | 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 | 6 | 29 | 30 | 58 | -------------------------------------------------------------------------------- /packages/components/base-slider.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 135 | 136 | -------------------------------------------------------------------------------- /packages/components/base-switch.vue: -------------------------------------------------------------------------------- 1 | 9 | 10 | 29 | 30 | 79 | -------------------------------------------------------------------------------- /packages/components/context-menu.vue: -------------------------------------------------------------------------------- 1 | 42 | 43 | 85 | 86 | -------------------------------------------------------------------------------- /packages/components/danmaku-container.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 209 | 210 | -------------------------------------------------------------------------------- /packages/components/danmaku-send.vue: -------------------------------------------------------------------------------- 1 | 69 | 70 | 202 | 203 | -------------------------------------------------------------------------------- /packages/components/player-buffering.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /packages/components/player-control.vue: -------------------------------------------------------------------------------- 1 | 63 | 64 | 253 | 254 | -------------------------------------------------------------------------------- /packages/components/player-msg.vue: -------------------------------------------------------------------------------- 1 | 4 | 5 | 11 | 12 | -------------------------------------------------------------------------------- /packages/components/svg-icon.vue: -------------------------------------------------------------------------------- 1 | 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 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/icons/loading.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/wangzmgit/vue-wplayer/d80f9965a87137eea49a1c5d88591a2d02281329/packages/icons/loading.png -------------------------------------------------------------------------------- /packages/icons/pause.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/icons/play.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/icons/replay.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/icons/setting.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /packages/icons/style.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /packages/icons/volume.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 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 | 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 | }) --------------------------------------------------------------------------------