mirror of
https://github.com/cuiocean/ZY-Player.git
synced 2026-02-15 00:16:26 +08:00
Compare commits
404 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
022b1f4090 | ||
|
|
9c08a64524 | ||
|
|
90ec848c11 | ||
|
|
82270a702f | ||
|
|
61dcb1ec49 | ||
|
|
40b853361e | ||
|
|
57ff3325f0 | ||
|
|
c4283e2da0 | ||
|
|
7052bd7e05 | ||
|
|
64a12a06c4 | ||
|
|
3df3b385ce | ||
|
|
e77db4711e | ||
|
|
fb3fd26870 | ||
|
|
72790f5f3e | ||
|
|
ea2815969d | ||
|
|
e330cff7d4 | ||
|
|
da5b91535e | ||
|
|
00c8f0c1e2 | ||
|
|
924fd439d9 | ||
|
|
ed039894c8 | ||
|
|
005bdf7ea6 | ||
|
|
19071faf70 | ||
|
|
176d9f6b5a | ||
|
|
31a8dd0f32 | ||
|
|
336ea08c69 | ||
|
|
8e4a0870a1 | ||
|
|
86130e6c53 | ||
|
|
e984d0a349 | ||
|
|
506991f3b1 | ||
|
|
04c35ba7a9 | ||
|
|
275b6757bf | ||
|
|
612930cc8b | ||
|
|
80e36fa99c | ||
|
|
f069044f28 | ||
|
|
c77ac7ea7f | ||
|
|
803181b4f7 | ||
|
|
ac2474903d | ||
|
|
04b7e139da | ||
|
|
b49e1b82bf | ||
|
|
dc00c690e7 | ||
|
|
44ba552435 | ||
|
|
8d84d1bf22 | ||
|
|
c78368dac9 | ||
|
|
11af5a7ecd | ||
|
|
ecfeecf45f | ||
|
|
455f5dae84 | ||
|
|
ffbffde74f | ||
|
|
0be0433355 | ||
|
|
cc2dc19e39 | ||
|
|
aa4583898a | ||
|
|
2e96812a1f | ||
|
|
6f52d73d52 | ||
|
|
a3ebba641f | ||
|
|
8ceffab2fe | ||
|
|
454d192141 | ||
|
|
a1423993c8 | ||
|
|
1c9a84dbc6 | ||
|
|
304b0d10b4 | ||
|
|
aff97f6d46 | ||
|
|
650c882f58 | ||
|
|
32fa465cf2 | ||
|
|
1fdfada14f | ||
|
|
5ed8b6e49a | ||
|
|
c2e2f1c490 | ||
|
|
7ad40ba375 | ||
|
|
c708292051 | ||
|
|
79932a74bc | ||
|
|
3f79f31550 | ||
|
|
1d33db0143 | ||
|
|
1dc7b38160 | ||
|
|
db7cdab787 | ||
|
|
d1e6ac1ae6 | ||
|
|
d63710afe6 | ||
|
|
8abe4b7ef8 | ||
|
|
98b4f5bc1d | ||
|
|
248c0994c9 | ||
|
|
2eba0523bc | ||
|
|
49589102d9 | ||
|
|
79b02df628 | ||
|
|
0f456fe7a8 | ||
|
|
850c8d5423 | ||
|
|
63cf367f52 | ||
|
|
bd43f06e7d | ||
|
|
2ed47e64c3 | ||
|
|
8817d39d49 | ||
|
|
b68525213a | ||
|
|
0efbc38137 | ||
|
|
cd2cb684a5 | ||
|
|
500dbfa1ee | ||
|
|
e970074266 | ||
|
|
9dc7ab4d1e | ||
|
|
ffe821d107 | ||
|
|
0f015b26e2 | ||
|
|
f031f9e7fd | ||
|
|
b38de7f393 | ||
|
|
8b5e8fd072 | ||
|
|
58e556554e | ||
|
|
cceed30d35 | ||
|
|
980b0a6e50 | ||
|
|
c98236222d | ||
|
|
6a7c2afb2d | ||
|
|
af482a450a | ||
|
|
42b81b98cf | ||
|
|
da7dfed5ba | ||
|
|
7d6c5482af | ||
|
|
11e7ffc554 | ||
|
|
4974d57fbf | ||
|
|
037bb1a2ff | ||
|
|
b19870d228 | ||
|
|
de0161c560 | ||
|
|
623a10bd13 | ||
|
|
c69eadbe3e | ||
|
|
5f48f46cbc | ||
|
|
694986d6c5 | ||
|
|
d4ad68e030 | ||
|
|
72089bf53f | ||
|
|
0401ce6d7e | ||
|
|
09e27d4f40 | ||
|
|
45de6650bf | ||
|
|
4e0fa4d980 | ||
|
|
7a0f8f9644 | ||
|
|
e43ef98ce7 | ||
|
|
2abbf41ed1 | ||
|
|
02139d3d24 | ||
|
|
d86a10d753 | ||
|
|
dc8bdb29dc | ||
|
|
98b019be5f | ||
|
|
e6d1698d62 | ||
|
|
6c1e6c511f | ||
|
|
1a1393615c | ||
|
|
5930690144 | ||
|
|
091493fa77 | ||
|
|
cd1c4eaffe | ||
|
|
1bb217d84f | ||
|
|
92eac6d2dd | ||
|
|
b067cfa143 | ||
|
|
99d21fd7fe | ||
|
|
b167f711d0 | ||
|
|
7d4ffeed87 | ||
|
|
7e94ef8025 | ||
|
|
1a36bc85b9 | ||
|
|
f7ed0e1c29 | ||
|
|
970a359aba | ||
|
|
be0441d042 | ||
|
|
3fc350e6d6 | ||
|
|
b26a4d4f27 | ||
|
|
454ea48891 | ||
|
|
d564d0928b | ||
|
|
2562119bad | ||
|
|
1a7aaa8dff | ||
|
|
583a768068 | ||
|
|
6216ad96d6 | ||
|
|
766b1d458f | ||
|
|
6a0699ec20 | ||
|
|
a6fd748e09 | ||
|
|
064ff38650 | ||
|
|
1c74174a3a | ||
|
|
0625c4945f | ||
|
|
e1d0643c68 | ||
|
|
bce10b906c | ||
|
|
d485a5733e | ||
|
|
5ab5cee6dc | ||
|
|
235e894f66 | ||
|
|
ee62ae0c8f | ||
|
|
f8b95fe430 | ||
|
|
a3fc5dba79 | ||
|
|
e1cee12222 | ||
|
|
6d2b1720b7 | ||
|
|
1c7024a68a | ||
|
|
8729184ba9 | ||
|
|
618fdf03d9 | ||
|
|
ac573b0de4 | ||
|
|
6b225d5076 | ||
|
|
cb2ce525ae | ||
|
|
8b78aafda4 | ||
|
|
3a02a5d1cf | ||
|
|
4212cc681a | ||
|
|
015595eb0a | ||
|
|
4ea00a9d8f | ||
|
|
6e19a08186 | ||
|
|
940dbe3d17 | ||
|
|
222e89c24d | ||
|
|
24af7c3084 | ||
|
|
34d981c6a6 | ||
|
|
2e5f5a8d6d | ||
|
|
1565d39ba7 | ||
|
|
24b84e4b12 | ||
|
|
c138f1beb5 | ||
|
|
4589856721 | ||
|
|
f2fbf96a04 | ||
|
|
8a0bb9a3f1 | ||
|
|
8cf2a92673 | ||
|
|
40c32a9085 | ||
|
|
7ef5283562 | ||
|
|
454287ede5 | ||
|
|
77792f0ca4 | ||
|
|
d793605367 | ||
|
|
0a13bac9e6 | ||
|
|
5b54279e9a | ||
|
|
e1e115643e | ||
|
|
826375c233 | ||
|
|
ae33d47186 | ||
|
|
a7d07ed964 | ||
|
|
95db790529 | ||
|
|
2d406c0c24 | ||
|
|
7b39be271f | ||
|
|
d8367414a2 | ||
|
|
d647d2ecec | ||
|
|
7f9f847d73 | ||
|
|
36e0b140cd | ||
|
|
99948770ff | ||
|
|
5300d777ce | ||
|
|
64da42524d | ||
|
|
1ebdfee7bc | ||
|
|
17ba319157 | ||
|
|
27bdc3559d | ||
|
|
ca53a22598 | ||
|
|
6632318cf6 | ||
|
|
cb7a4af7ae | ||
|
|
25340b79aa | ||
|
|
381b0a8735 | ||
|
|
c7b99244bb | ||
|
|
5b5826e9a6 | ||
|
|
03e2f2673b | ||
|
|
503a90d8da | ||
|
|
afb92d59ff | ||
|
|
d26f1cbdf7 | ||
|
|
7f821b05ad | ||
|
|
746c93c9d2 | ||
|
|
9fb51ed8fc | ||
|
|
6a1c045e0b | ||
|
|
756b8ecc33 | ||
|
|
b4946a6c99 | ||
|
|
cbde4180ab | ||
|
|
00dab782e8 | ||
|
|
89d6183841 | ||
|
|
efd2095261 | ||
|
|
cbedb859c3 | ||
|
|
65aedc84cf | ||
|
|
95c58095ee | ||
|
|
b5da3c7f81 | ||
|
|
5b0211b2ed | ||
|
|
0bb6409687 | ||
|
|
7078e05668 | ||
|
|
0172a204b1 | ||
|
|
c6b0781a02 | ||
|
|
b3e67bcc7d | ||
|
|
cbca6db97e | ||
|
|
814ecaf25b | ||
|
|
4a07520336 | ||
|
|
2e121a901c | ||
|
|
3a2a16a168 | ||
|
|
881ab6cfa5 | ||
|
|
3151b33a23 | ||
|
|
f154f44772 | ||
|
|
a1458cf8bf | ||
|
|
595136c799 | ||
|
|
b7e497e2d9 | ||
|
|
dce8ad2ef2 | ||
|
|
79ba45b63a | ||
|
|
b6fcbcb934 | ||
|
|
54c4409311 | ||
|
|
5e9c273048 | ||
|
|
197df4e830 | ||
|
|
5271dfa490 | ||
|
|
7efde45aed | ||
|
|
4c92918dc3 | ||
|
|
6c0bd5125b | ||
|
|
785f9b20e7 | ||
|
|
8d052d2904 | ||
|
|
69a397e24e | ||
|
|
c216352268 | ||
|
|
89448d390f | ||
|
|
a853b02aa0 | ||
|
|
0443ce248f | ||
|
|
8009c3197e | ||
|
|
978d4e7181 | ||
|
|
138b70263a | ||
|
|
7f48c91f97 | ||
|
|
7a494a54c0 | ||
|
|
97812af0fd | ||
|
|
490d7c963e | ||
|
|
ed1afa2026 | ||
|
|
7ef114d0e3 | ||
|
|
7f9b7fc2c8 | ||
|
|
511820f873 | ||
|
|
af6dcb11bf | ||
|
|
7ecad1ad8e | ||
|
|
4d169f9d51 | ||
|
|
f3862e8385 | ||
|
|
490d4839b7 | ||
|
|
033bcb3df7 | ||
|
|
df22efa980 | ||
|
|
5428891297 | ||
|
|
bb3502774b | ||
|
|
fa67ad03d2 | ||
|
|
8a196ae52a | ||
|
|
ebfb681205 | ||
|
|
ba9f3246d2 | ||
|
|
51cb181acd | ||
|
|
33537638b0 | ||
|
|
fa9f85a177 | ||
|
|
3e1ecaac74 | ||
|
|
5cc9849e8a | ||
|
|
e353b629c5 | ||
|
|
4d20d5bc68 | ||
|
|
a921ce7adf | ||
|
|
1dd8d0dd24 | ||
|
|
b90c359670 | ||
|
|
27eb8c06ff | ||
|
|
add2bedb61 | ||
|
|
3dc970e198 | ||
|
|
3f2def4455 | ||
|
|
5b8d883af4 | ||
|
|
7113567475 | ||
|
|
e30da35e72 | ||
|
|
55b7396a2e | ||
|
|
83568fa499 | ||
|
|
838d3a64cd | ||
|
|
506be03e3e | ||
|
|
cfdb561473 | ||
|
|
ab2f45189f | ||
|
|
f4b9a73b18 | ||
|
|
6f99d789f4 | ||
|
|
e71090dad2 | ||
|
|
afe3351837 | ||
|
|
5dc0613aeb | ||
|
|
1c6385ae6c | ||
|
|
88a95a8bfb | ||
|
|
951e6ffa37 | ||
|
|
b83aed0a97 | ||
|
|
67ce537039 | ||
|
|
975562a66b | ||
|
|
8e7015c9d6 | ||
|
|
b841552dc7 | ||
|
|
0a9b939dc3 | ||
|
|
14ff252cce | ||
|
|
afd016be93 | ||
|
|
9cd7f7d267 | ||
|
|
8a76ec4e87 | ||
|
|
a00d965ce9 | ||
|
|
c9eb0c3e22 | ||
|
|
c80c0bd948 | ||
|
|
65dcfa04ae | ||
|
|
4e4ab82ea2 | ||
|
|
dd2adf4f99 | ||
|
|
777fbde528 | ||
|
|
472898f978 | ||
|
|
7f41d415f1 | ||
|
|
5d37a36c21 | ||
|
|
3a499766af | ||
|
|
cea797b6d0 | ||
|
|
37b41b0e20 | ||
|
|
1105c46f08 | ||
|
|
1df7b41edd | ||
|
|
f76c71c950 | ||
|
|
cd77384bd9 | ||
|
|
64adc9d6c1 | ||
|
|
e9095e50a6 | ||
|
|
acfa742b4f | ||
|
|
a79c48cba0 | ||
|
|
904ef5ccea | ||
|
|
3db281c87f | ||
|
|
076e6e99e4 | ||
|
|
32f6ac0310 | ||
|
|
b8706ea432 | ||
|
|
509d6c7900 | ||
|
|
51454d828c | ||
|
|
59449886f5 | ||
|
|
601e9895cc | ||
|
|
1ba8b46990 | ||
|
|
7ed34caa56 | ||
|
|
fc40521420 | ||
|
|
cfdd836e01 | ||
|
|
083e00ddbf | ||
|
|
c41c7c4857 | ||
|
|
4bde51dc38 | ||
|
|
38c7540145 | ||
|
|
a44579d4a1 | ||
|
|
7f2d6f12c0 | ||
|
|
daf1c4ddb6 | ||
|
|
c1372c5589 | ||
|
|
c623533271 | ||
|
|
069e7e16d6 | ||
|
|
cabe4240f4 | ||
|
|
5448e86109 | ||
|
|
536f6dad7d | ||
|
|
bf2796779f | ||
|
|
3a29147fd6 | ||
|
|
e987ecc446 | ||
|
|
9aee6d8527 | ||
|
|
4d438fcdd3 | ||
|
|
36e40f4778 | ||
|
|
422def0702 | ||
|
|
fc52d79d88 | ||
|
|
cc09d0aca0 | ||
|
|
b514f1c04e | ||
|
|
189e67eb22 | ||
|
|
e5c3adf1c5 | ||
|
|
299367f0b8 | ||
|
|
0d67474459 | ||
|
|
15a188aa85 | ||
|
|
0555badcfa | ||
|
|
6f8f700dfc |
2
.github/workflows/x86.yml
vendored
2
.github/workflows/x86.yml
vendored
@@ -3,7 +3,7 @@ name: release-build
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- x86 *
|
||||
- x86-v*
|
||||
|
||||
jobs:
|
||||
release:
|
||||
|
||||
191
README.md
191
README.md
@@ -21,153 +21,72 @@
|
||||
<img src="https://img.shields.io/github/workflow/status/Hunlongyu/ZY-Player/release-build?style=for-the-badge">
|
||||
<p>
|
||||
|
||||
# ZY Player 资源播放器
|
||||
|
||||
# 目录
|
||||
- [特性](#特性)
|
||||
- [全局快捷键](#全局快捷键)
|
||||
- [下载](#下载)
|
||||
- [赞助](#赞助)
|
||||
- [截图](#截图)
|
||||
- [开发向导](#开发向导)
|
||||
- [准备环境](#准备环境)
|
||||
- [nodejs安装](#nodejs安装)
|
||||
- [npm配置](#npm配置)
|
||||
- [翻墙代理设置](#翻墙代理设置)
|
||||
- [镜像源设置](#镜像源设置)
|
||||
- [代码IDE](#代码IDE)
|
||||
- [安装依赖](#安装依赖)
|
||||
- [调试开发](#调试开发)
|
||||
- [打包发布](#打包发布)
|
||||
<h1 align="center">ZY Player 资源播放器</h1>
|
||||
|
||||
## 特性
|
||||
|
||||
1. 全平台支持. Windows, Mac, Linux
|
||||
2. 支持更多视频源,支持自定义视频源
|
||||
3. 支持海报模式和列表模式
|
||||
4. 支持瀑布流 无限加载
|
||||
5. 支持历史播放记录,自动跳转播放进度
|
||||
6. 支持快捷键,使用更便捷,支持自定义快捷键
|
||||
7. 支持搜索历史记录
|
||||
8. 支持分享功能
|
||||
9. 支持精简模式,划水新高度
|
||||
10. 支持导出资源下载链接
|
||||
11. 收藏夹同步功能,追剧更方便
|
||||
12. 自动更新
|
||||
|
||||
觉得软件不错的, 点击右上角 star 收藏关注一波呀~
|
||||
### ✨特性
|
||||
|
||||
#### 快捷键:
|
||||
- 🍕 全平台支持. Windows, Mac, Linux
|
||||
- 🍔 视频源支持自定义, 支持导入, 导出
|
||||
- 🍟 支持海报模式和列表模式浏览资源
|
||||
- 🌭 播放历史, 自动跳转历史进度
|
||||
- 🍿 收藏夹支持导入,导出, 支持同步追剧
|
||||
- 🥙 支持精简模式, 摸鱼划水
|
||||
- 🥪 一键搜索所有资源, 支持历史搜索记录
|
||||
- 🌮 导出资源下载链接
|
||||
- 🍣 支持第三方播放器播放
|
||||
- 🍤 显示豆瓣评分
|
||||
|
||||
### 🌴 下载
|
||||
|
||||
- 🍓 [Github -- 官方下载](https://github.com/Hunlongyu/ZY-Player/releases)
|
||||
- 🍉 [蓝奏云 -- 快速下载](https://www.lanzoux.com/b04s6a3re) 密码:95px
|
||||
- 🍒 适用于32位操作系统的x86软件,在蓝奏云网盘里, 后缀名: ZY Player * 32位.exe
|
||||
|
||||
### 🚀 快捷键
|
||||
|
||||
播放窗口 和 Mini窗口
|
||||
|
||||
| 快捷键 | 说明 | 快捷键 | 说明 |
|
||||
| :----------------------: | ---------- | :----------------------: | ---------- |
|
||||
| `Alt + Space` | 聚焦或取消聚焦(全局快捷键)| | |
|
||||
| `→` | 快进 5 秒 | `←` | 快退 5 秒 |
|
||||
| `↑` | 音量调高 | `↓` | 音量调低 |
|
||||
| `m` | 静音 | `t` | 置顶或退出置顶 |
|
||||
| `f` | 进入或退出全屏 | `esc` | 退出全屏 |
|
||||
| `Alt + →` | 下一集 | `Alt + ←` | 上一集 |
|
||||
| `Alt + ↑` | 透明度调高 | `Alt + ↓` | 透明度调低 |
|
||||
| `home` | 跳到视频开始位置 | `end` | 跳到视频结束位置 |
|
||||
| `pgUp` | 播放倍速加快 0.25 | `pgDown` | 播放倍速减慢 0.25 |
|
||||
| `Alt + m` | 进入或退出 Mini 模式 | `space` | 播放或暂停 |
|
||||
| 快捷键 | 说明 | 快捷键 | 说明 |
|
||||
| :-----------: | ---------------------------- | :-------: | ----------------- |
|
||||
| `Alt + Space` | 聚焦或取消聚焦(全局快捷键) | | |
|
||||
| `→` | 快进 5 秒 | `←` | 快退 5 秒 |
|
||||
| `↑` | 音量调高 | `↓` | 音量调低 |
|
||||
| `m` | 静音 | `t` | 置顶或退出置顶 |
|
||||
| `f` | 进入或退出全屏 | `esc` | 退出全屏 |
|
||||
| `Alt + →` | 下一集 | `Alt + ←` | 上一集 |
|
||||
| `Alt + ↑` | 透明度调高 | `Alt + ↓` | 透明度调低 |
|
||||
| `home` | 跳到视频开始位置 | `end` | 跳到视频结束位置 |
|
||||
| `pgUp` | 播放倍速加快 0.25 | `pgDown` | 播放倍速减慢 0.25 |
|
||||
| `Alt + m` | 进入或退出 Mini 模式 | `space` | 播放或暂停 |
|
||||
|
||||
#### 下载:
|
||||
### 🎨 截图
|
||||
|
||||
1. [Github -- 官方下载(最新版)](https://github.com/Hunlongyu/ZY-Player/releases)
|
||||
| 🥼 浏览 (海报模式) | 🧥 浏览 (列表模式) |
|
||||
| :----------------------------------------------------------: | :----------------------------------------------------------: |
|
||||
|  |  |
|
||||
| 👔 搜索 | 👕 详情 |
|
||||
|  |  |
|
||||
| 👖 播放 (普通模式) | 🩳 播放 (精简模式) |
|
||||
|  |  |
|
||||
| 🧣 历史记录 | 🧤 收藏夹 |
|
||||
|  |  |
|
||||
| 👗 白色主题 | 🥻 黑色主题 |
|
||||
|  |  |
|
||||
| 👘 绿色主题 | 👚 粉色主题 |
|
||||
|  |  |
|
||||
|
||||
2. [蓝奏云 -- 快速下载(老版本)](https://www.lanzous.com/b04s6a3re) 密码:95px
|
||||
### 🍭 开发者
|
||||
|
||||
3. 适用于32位操作系统的x86软件,在蓝奏云网盘里, 后缀名: ZY Player * 32位.exe
|
||||
| [Hunlongyu](https://github.com/Hunlongyu) | [cuiocean](https://github.com/cuiocean) |
|
||||
| :----------------------------------------------------------: | :----------------------------------------------------------: |
|
||||
| <img width="120" src="https://avatars2.githubusercontent.com/u/15273630?s=460&u=48cf3299e2a842c0252233d8be42ef4c5d792138&v=4"/> | <img width="120" src="https://avatars0.githubusercontent.com/u/5760235?s=460&u=9d969dd8d83f069ce7ebd60516770c93ac07a330&v=4" /> |
|
||||
| 💻 🎨 🐛 | 💻 🐛 |
|
||||
|
||||
|
||||
|
||||
### 🧧 赞助
|
||||
|
||||
#### 赞助
|
||||
[](https://latopay.com/@Hunlongyu)
|
||||
|
||||
#### 截图:
|
||||
|
||||
0. 分享 ⇣ ↓
|
||||

|
||||
|
||||
1. 浏览 ⇣ ↓
|
||||

|
||||
2. 搜索 ⇣ ↓
|
||||

|
||||
3. 详情 ⇣ ↓
|
||||

|
||||
4. 播放 ⇣ ↓
|
||||

|
||||
5. 收藏 ⇣ ↓
|
||||

|
||||
6. 白色主题皮肤 ⇣ ↓
|
||||

|
||||
7. 绿色主题皮肤 ⇣ ↓
|
||||

|
||||
8. 粉色色主题皮肤 ⇣ ↓
|
||||

|
||||
|
||||
### 重要:
|
||||
所有资源来自网上, 该软件不参与任何制作, 上传, 储存, 下载等内容. 该软件仅供学习参考, 请于安装后24小时内删除.
|
||||
|
||||
## 开发指导
|
||||
软件基于nodejs, vue, electron, 如果想成为一个有追求的码农,你先考虑一下自己是否具备上述几个关键词的知识储备,如果没有,建议先百度了解下。这里的开发环境基于linux发行版mint, 其他大同小异,自行发挥。
|
||||
|
||||
### 准备环境
|
||||
|
||||
#### nodejs安装
|
||||
* [LINK1](https://nodejs.org/zh-cn/)
|
||||
* [LINK2](https://www.jianshu.com/p/13f45e24b1de/)
|
||||
|
||||
#### npm配置
|
||||
天朝的网络环境都有耳闻,想顺利开发,要么翻墙,要么镜像源,以下按照自己的水平二选一
|
||||
|
||||
#### 翻墙代理设置
|
||||
自备http代理,sock5代理转换,参考privoxy
|
||||
```bash
|
||||
设置代理
|
||||
npm config set proxy=http://127.0.0.1:8087
|
||||
npm config set registry=http://registry.npmjs.org
|
||||
|
||||
|
||||
关于https
|
||||
经过上面设置使用了http开头的源,因此不需要设https_proxy了,否则还要增加一句:
|
||||
|
||||
npm config set https-proxy http://server:port
|
||||
|
||||
代理用户名和密码
|
||||
npm config set proxy http://username:password@server:port
|
||||
npm confit set https-proxy http://username:password@server:port
|
||||
|
||||
取消代理
|
||||
npm config delete proxy
|
||||
npm config delete https-proxy
|
||||
```
|
||||
|
||||
#### 镜像源设置
|
||||
这里使用阿里的npm镜像
|
||||
```bash
|
||||
npm install -g cnpm --registry=https://registry.npm.taobao.org
|
||||
```
|
||||
搞定后使用cnpm代替所有的npm命令即可,切记使用一致,切记切记
|
||||
|
||||
* [参考网页链接](https://developer.aliyun.com/mirror/NPM?from=tnpm)
|
||||
|
||||
### 代码IDE
|
||||
随心所欲吧,这里安利vscode
|
||||
|
||||
### 安装依赖
|
||||
```bash
|
||||
npm install
|
||||
or
|
||||
cnpm install
|
||||
```
|
||||
### 调试开发
|
||||
```bash
|
||||
npm run dev
|
||||
```
|
||||
|
||||
### 打包发布
|
||||
```
|
||||
npm run electron:build
|
||||
```
|
||||
|
||||
571
extraResources/DefaulIptvList.m3u
Normal file
571
extraResources/DefaulIptvList.m3u
Normal file
@@ -0,0 +1,571 @@
|
||||
#EXTM3U
|
||||
#EXTINF:-1,CCTV1-1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/cctv1hd/4000000/mnf.m3u8
|
||||
#EXTINF:-1,CCTV-1HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/cctv1hd/2300000/mnf.m3u8
|
||||
#EXTINF:-1,CCTV1 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225924/1.m3u8
|
||||
#EXTINF:-1,CCTV1 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226154/1.m3u8
|
||||
#EXTINF:-1,CCTV1 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226155/1.m3u8
|
||||
#EXTINF:-1,CCTV1 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226226/1.m3u8
|
||||
#EXTINF:-1,CCTV1 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226346/1.m3u8
|
||||
#EXTINF:-1,CCTV1 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226431/1.m3u8
|
||||
#EXTINF:-1,CCTV2 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8
|
||||
#EXTINF:-1,CCTV2 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226371/1.m3u8
|
||||
#EXTINF:-1,CCTV2 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226472/1.m3u8
|
||||
#EXTINF:-1,CCTV3 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8
|
||||
#EXTINF:-1,CCTV4 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226314/1.m3u8
|
||||
#EXTINF:-1,CCTV4 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8
|
||||
#EXTINF:-1,CCTV4 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226470/1.m3u8
|
||||
#EXTINF:-1,CCTV5 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8
|
||||
#EXTINF:-1,CCTV5+ HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226225/1.m3u8
|
||||
#EXTINF:-1,CCTV5+ CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226349/1.m3u8
|
||||
#EXTINF:-1,CCTV5+ CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226458/1.m3u8
|
||||
#EXTINF:-1,CCTV6 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8
|
||||
#EXTINF:-1,CCTV7 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226234/1.m3u8
|
||||
#EXTINF:-1,CCTV7 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226467/1.m3u8
|
||||
#EXTINF:-1,CCTV8 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8
|
||||
#EXTINF:-1,CCTV9 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226236/1.m3u8
|
||||
#EXTINF:-1,CCTV9 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226465/1.m3u8
|
||||
#EXTINF:-1,CCTV10 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226227/1.m3u8
|
||||
#EXTINF:-1,CCTV10 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226464/1.m3u8
|
||||
#EXTINF:-1,CCTV11 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8
|
||||
#EXTINF:-1,CCTV11 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226315/1.m3u8
|
||||
#EXTINF:-1,CCTV11 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226463/1.m3u8
|
||||
#EXTINF:-1,CCTV12 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8
|
||||
#EXTINF:-1,CCTV12 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226462/1.m3u8
|
||||
#EXTINF:-1,CCTV13 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8
|
||||
#EXTINF:-1,CCTV14 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226229/1.m3u8
|
||||
#EXTINF:-1,CCTV14 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226461/1.m3u8
|
||||
#EXTINF:-1,CCTV15 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226460/1.m3u8
|
||||
#EXTINF:-1,CCTV15 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226317/1.m3u8
|
||||
#EXTINF:-1,CCTV15 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8
|
||||
#EXTINF:-1,CCTV17 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8
|
||||
#EXTINF:-1,CCTV17 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226459/1.m3u8
|
||||
#EXTINF:-1,CCTV-4K
|
||||
http://112.17.40.12/PLTV/88888888/224/3221226758/1.m3u8
|
||||
#EXTINF:-1,CCTV-4K
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226758/index.m3u8
|
||||
#EXTINF:-1,CCTV-4K
|
||||
http://39.134.176.148/PLTV/88888888/224/3221226758/index.m3u8
|
||||
#EXTINF:-1,CCTV-4K
|
||||
http://117.148.187.83/PLTV/88888888/224/3221226758/index.m3u8
|
||||
#EXTINF:-1,北京卫视1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/bjwshd/4000000/mnf.m3u8
|
||||
#EXTINF:-1,江苏卫视1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/jswshd/4000000/mnf.m3u8
|
||||
#EXTINF:-1,浙江卫视1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/zjwshd/4000000/mnf.m3u8
|
||||
#EXTINF:-1,深圳卫视1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/szwshd/4000000/mnf.m3u8
|
||||
#EXTINF:-1,山东卫视1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/sdwshd/4000000/mnf.m3u8
|
||||
#EXTINF:-1,湖北卫视1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hbwshd/4000000/mnf.m3u8
|
||||
#EXTINF:-1,广东卫视1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/gdwshd/4000000/mnf.m3u8
|
||||
#EXTINF:-1,东方卫视1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hddfws/4000000/mnf.m3u8
|
||||
#EXTINF:-1,黑龙江卫视1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hljwshd/4000000/mnf.m3u8
|
||||
#EXTINF:-1,五星体育1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/ssty/4000000/mnf.m3u8
|
||||
#EXTINF:-1,北京卫视高清
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/bjwshd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,东方卫视高清
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hddfws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,浙江卫视高清
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/zjwshd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,湖北卫视高清
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hbwshd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,湖南卫视高清
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hnwshd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,山东卫视高清
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/sdwshd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,江苏卫视高清
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/jswshd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,深圳卫视高清
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/szwshd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,广东卫视高清
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/gdwshd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,黑龙江卫视高清
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hljwshd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,湖南卫视HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hnwshd/2300000/mnf.m3u8
|
||||
#EXTINF:-1,北京卫视HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/bjwshd/2300000/mnf.m3u8
|
||||
#EXTINF:-1,江苏卫视HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/jswshd/2300000/mnf.m3u8
|
||||
#EXTINF:-1,浙江卫视HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/zjwshd/2300000/mnf.m3u8
|
||||
#EXTINF:-1,深圳卫视HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/szwshd/2300000/mnf.m3u8
|
||||
#EXTINF:-1,山东卫视HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/sdwshd/2300000/mnf.m3u8
|
||||
#EXTINF:-1,湖北卫视HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hbwshd/2300000/mnf.m3u8
|
||||
#EXTINF:-1,广东卫视HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/gdwshd/2300000/mnf.m3u8
|
||||
#EXTINF:-1,黑龙江卫视HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hljwshd/2300000/mnf.m3u8
|
||||
#EXTINF:-1,五星体育HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/ssty/2300000/mnf.m3u8
|
||||
#EXTINF:-1,中国教育1 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226494/1.m3u8
|
||||
#EXTINF:-1,东南卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226406/1.m3u8
|
||||
#EXTINF:-1,东南卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226496/1.m3u8
|
||||
#EXTINF:-1,东方卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226237/1.m3u8
|
||||
#EXTINF:-1,东方卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226364/1.m3u8
|
||||
#EXTINF:-1,东方卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226505/1.m3u8
|
||||
#EXTINF:-1,北京卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226224/1.m3u8
|
||||
#EXTINF:-1,北京卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226367/1.m3u8
|
||||
#EXTINF:-1,北京卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226441/1.m3u8
|
||||
#EXTINF:-1,天津卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226246/1.m3u8
|
||||
#EXTINF:-1,天津卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226502/1.m3u8
|
||||
#EXTINF:-1,安徽卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226223/1.m3u8
|
||||
#EXTINF:-1,安徽卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226499/1.m3u8
|
||||
#EXTINF:-1,山东卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225894/1.m3u8
|
||||
#EXTINF:-1,山东卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226244/1.m3u8
|
||||
#EXTINF:-1,山东卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226308/1.m3u8
|
||||
#EXTINF:-1,山东卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226501/1.m3u8
|
||||
#EXTINF:-1,广东卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225878/1.m3u8
|
||||
#EXTINF:-1,广东卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226238/1.m3u8
|
||||
#EXTINF:-1,广东卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226508/1.m3u8
|
||||
#EXTINF:-1,江苏卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226242/1.m3u8
|
||||
#EXTINF:-1,江苏卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226366/1.m3u8
|
||||
#EXTINF:-1,江苏卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226506/1.m3u8
|
||||
#EXTINF:-1,江西卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226243/1.m3u8
|
||||
#EXTINF:-1,河北卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226507/1.m3u8
|
||||
#EXTINF:-1,浙江卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226247/1.m3u8
|
||||
#EXTINF:-1,浙江卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226365/1.m3u8
|
||||
#EXTINF:-1,浙江卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226504/1.m3u8
|
||||
#EXTINF:-1,深圳卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225897/1.m3u8
|
||||
#EXTINF:-1,深圳卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226245/1.m3u8
|
||||
#EXTINF:-1,深圳卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226495/1.m3u8
|
||||
#EXTINF:-1,湖北卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226240/1.m3u8
|
||||
#EXTINF:-1,湖北卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226310/1.m3u8
|
||||
#EXTINF:-1,湖北卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226503/1.m3u8
|
||||
#EXTINF:-1,湖南卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226241/1.m3u8
|
||||
#EXTINF:-1,湖南卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8
|
||||
#EXTINF:-1,贵州卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226497/1.m3u8
|
||||
#EXTINF:-1,辽宁卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226500/1.m3u8
|
||||
#EXTINF:-1,黑龙江卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226239/1.m3u8
|
||||
#EXTINF:-1,黑龙江卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226498/1.m3u8
|
||||
#EXTINF:-1,北京冬奥纪实 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226438/1.m3u8
|
||||
#EXTINF:-1,北京影视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226486/1.m3u8
|
||||
#EXTINF:-1,北京文艺 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226440/1.m3u8
|
||||
#EXTINF:-1,北京新闻 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226437/1.m3u8
|
||||
#EXTINF:-1,安徽卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/ahws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,兵团卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/btws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,甘肃卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/gsws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,陕西卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/sxws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,山西卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/shanxiws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,吉林卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/jlws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,河北卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hbws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,四川卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/scws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,贵州卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/gzws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,云南卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/ynws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,辽宁卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/lnws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,旅游卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/lyws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,东南卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/dnws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,重庆卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/cqws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,广西卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/gxws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,青海卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/qhws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,江西卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/jxws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,内蒙古卫视
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/nmgws/1300000/mnf.m3u8
|
||||
#EXTINF:-1,天津卫视
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226412/index.m3u8
|
||||
#EXTINF:-1,河北卫视超清1
|
||||
http://223.110.245.149/ott.js.chinamobile.com/PLTV/3/224/3221225840/index.m3u8
|
||||
#EXTINF:-1,湖南卫视
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226553/index.m3u8
|
||||
#EXTINF:-1,浙江卫视
|
||||
http://223.110.243.173/PLTV/3/224/3221227215/index.m3u8
|
||||
#EXTINF:-1,江苏卫视
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226414/index.m3u8
|
||||
#EXTINF:-1,东南卫视
|
||||
http://117.169.124.37:6610/ysten-businessmobile/live/dongnanstv/yst.m3u8
|
||||
#EXTINF:-1,湖北卫视
|
||||
http://223.110.243.171/PLTV/3/224/3221227211/index.m3u8
|
||||
#EXTINF:-1,广东卫视
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226225/index.m3u8
|
||||
#EXTINF:-1,深圳卫视
|
||||
http://223.110.243.171/PLTV/3/224/3221227217/index.m3u8
|
||||
#EXTINF:-1,辽宁卫视
|
||||
http://223.110.245.145/ott.js.chinamobile.com/PLTV/3/224/3221227410/index.m3u8
|
||||
#EXTINF:-1,龙江卫视
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226555/index.m3u8
|
||||
#EXTINF:-1,江西卫视
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226557/index.m3u8
|
||||
#EXTINF:-1,四川卫视
|
||||
http://ott.fj.chinamobile.com/PLTV/88888888/224/3221227006/1.m3u8
|
||||
#EXTINF:-1,重庆卫视
|
||||
http://ott.fj.chinamobile.com/PLTV/88888888/224/3221225949/1.m3u8
|
||||
#EXTINF:-1,重庆卫视
|
||||
http://ivi.bupt.edu.cn/hls/cqhd.m3u8
|
||||
#EXTINF:-1,河南卫视超清2
|
||||
http://223.110.245.157/ott.js.chinamobile.com/PLTV/3/224/3221225815/index.m3u8
|
||||
#EXTINF:-1,贵州卫视超清2
|
||||
http://223.110.245.149/ott.js.chinamobile.com/PLTV/3/224/3221225787/index.m3u8
|
||||
#EXTINF:-1,海南卫视
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225855/1.m3u8
|
||||
#EXTINF:-1,云南卫视超清1
|
||||
http://223.110.245.159/ott.js.chinamobile.com/PLTV/3/224/3221225838/index.m3u8
|
||||
#EXTINF:-1,宁夏卫视超清1
|
||||
http://223.110.245.151/ott.js.chinamobile.com/PLTV/3/224/3221225842/index.m3u8
|
||||
#EXTINF:-1,内蒙卫视超清1
|
||||
http://223.110.245.161/ott.js.chinamobile.com/PLTV/3/224/3221225836/index.m3u8
|
||||
#EXTINF:-1,广西卫视
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225836/1.m3u8
|
||||
#EXTINF:-1,五星体育HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/ssty/1300000/mnf.m3u8
|
||||
#EXTINF:-1,北京卡酷少儿 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226558/1.m3u8
|
||||
#EXTINF:-1,法治天地HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/fztd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,欢笑剧场HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hxjc/1300000/mnf.m3u8
|
||||
#EXTINF:-1,都市剧场HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/dsjc/1300000/mnf.m3u8
|
||||
#EXTINF:-1,七彩戏剧HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/qcxj/1300000/mnf.m3u8
|
||||
#EXTINF:-1,动漫秀场HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/dmxc/1300000/mnf.m3u8
|
||||
#EXTINF:-1,劲爆体育HD
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/jbty/1300000/mnf.m3u8
|
||||
#EXTINF:-1,极速汽车
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/jsqc/1300000/mnf.m3u8
|
||||
#EXTINF:-1,游戏风云
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/yxfy/1300000/mnf.m3u8
|
||||
#EXTINF:-1,金鹰卡通
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/jykt/1300000/mnf.m3u8
|
||||
#EXTINF:-1,炫动卡通
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/xdkt/1300000/mnf.m3u8
|
||||
#EXTINF:-1,嘉佳卡通
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/jjkt/1300000/mnf.m3u8
|
||||
#EXTINF:-1,星尚
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/shss/1300000/mnf.m3u8
|
||||
#EXTINF:-1,上海纪实
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/jspd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,上海新闻
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/xwzh/1300000/mnf.m3u8
|
||||
#EXTINF:-1,上海娱乐
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/ylpd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,上海电视剧
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/dsjpd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,上海ICS外语频道
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/wypd/1300000/mnf.m3u8
|
||||
#EXTINF:-1,上海艺术人文
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/ysrw/1300000/mnf.m3u8
|
||||
#EXTINF:-1,东方财经浦东
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/dfcj/1300000/mnf.m3u8
|
||||
#EXTINF:-1,第一财经
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/dycj/1300000/mnf.m3u8
|
||||
#EXTINF:-1,直播1-1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hdnba1/4000000/mnf.m3u8
|
||||
#EXTINF:-1,直播2-1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hdnba2/4000000/mnf.m3u8
|
||||
#EXTINF:-1,直播3-1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hdnba3/4000000/mnf.m3u8
|
||||
#EXTINF:-1,直播4-1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hdnba4/4000000/mnf.m3u8
|
||||
#EXTINF:-1,直播5-1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hdnba5/4000000/mnf.m3u8
|
||||
#EXTINF:-1,直播6-1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hdnba6/4000000/mnf.m3u8
|
||||
#EXTINF:-1,直播7-1080P
|
||||
http://keonline.shanghai.liveplay.qq.com/live/program/live/hdnba7/4000000/mnf.m3u8
|
||||
#EXTINF:-1,纯享4K源码1
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226825/1.m3u8
|
||||
#EXTINF:-1,百事4K频道
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226718/index.m3u8
|
||||
#EXTINF:-1,凤凰资讯
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226491/index.m3u8
|
||||
#EXTINF:-1,凤凰资讯
|
||||
http://117.169.124.37:6610/ysten-businessmobile/live/fhzixun/1.m3u8
|
||||
#EXTINF:-1,凤凰中文
|
||||
http://117.169.124.37:6610/ysten-businessmobile/live/fhchinese/1.m3u8
|
||||
#EXTINF:-1,凤凰中文
|
||||
http://117.169.120.138:8080/live/fhchinese/index.m3u8
|
||||
#EXTINF:-1,高清影视1台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226736/1.m3u8
|
||||
#EXTINF:-1,高清影视2台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225881/1.m3u8
|
||||
#EXTINF:-1,高清影视3台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226708/1.m3u8
|
||||
#EXTINF:-1,高清影视4台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226712/1.m3u8
|
||||
#EXTINF:-1,高清影视5台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225893/1.m3u8
|
||||
#EXTINF:-1,高清影视6台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226692/1.m3u8
|
||||
#EXTINF:-1,高清影视7台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226754/1.m3u8
|
||||
#EXTINF:-1,高清影视8台
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226608/index.m3u8
|
||||
#EXTINF:-1,高清影视9台
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226606/index.m3u8
|
||||
#EXTINF:-1,高清影视10台
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226360/index.m3u8
|
||||
#EXTINF:-1,高清动画11台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226732/1.m3u8
|
||||
#EXTINF:-1,高清动画12台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226741/1.m3u8
|
||||
#EXTINF:-1,高清动漫13台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226743/1.m3u8
|
||||
#EXTINF:-1,高清影视14台
|
||||
http://ivi.bupt.edu.cn/hls/chchd.m3u8
|
||||
#EXTINF:-1,北京纪实高清
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225944/1.m3u8
|
||||
#EXTINF:-1,峨眉电影高清
|
||||
http://scgctvshow.sctv.com/hdlive/emei/1.m3u8
|
||||
#EXTINF:-1,欢笑剧场高清
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226729/1.m3u8
|
||||
#EXTINF:-1,纪实频道高清
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225946/1.m3u8
|
||||
#EXTINF:-1,极速汽车高清
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226140/1.m3u8
|
||||
#EXTINF:-1,动漫秀场高清
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226141/1.m3u8
|
||||
#EXTINF:-1,求索纪录
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226610/index.m3u8
|
||||
#EXTINF:-1,求索科学
|
||||
http://125.210.152.18:9090/live/QSKX_1200.m3u8
|
||||
#EXTINF:-1,求索动物
|
||||
http://125.210.152.18:9090/live/QSDW_1200.m3u8
|
||||
#EXTINF:-1,求索生活
|
||||
http://125.210.152.18:9090/live/QSSH_1200.m3u8
|
||||
#EXTINF:-1,日本天気预报
|
||||
http://movie.mcas.jp/mcas/wn1_2/master.m3u8
|
||||
#EXTINF:-1,奥林匹克高清
|
||||
http://ott-live.olympicchannel.com/out/u/OC1_2.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1,奥铃匹克高清
|
||||
http://ott-live.olympicchannel.com/out/u/OC1_1.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1,爱青春
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230130/index.m3u8
|
||||
#EXTINF:-1,爱家庭
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230118/index.m3u8
|
||||
#EXTINF:-1,爱探索
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230112/index.m3u8
|
||||
#EXTINF:-1,爱科学
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230106/index.m3u8
|
||||
#EXTINF:-1,爱猎奇
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230097/index.m3u8
|
||||
#EXTINF:-1,爱谍战
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230092/index.m3u8
|
||||
#EXTINF:-1,爱娱乐
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230077/index.m3u8
|
||||
#EXTINF:-1,爱旅行
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230052/index.m3u8
|
||||
#EXTINF:-1,爱怀旧
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230049/index.m3u8
|
||||
#EXTINF:-1,爱体育
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230034/index.m3u8
|
||||
#EXTINF:-1,爱赛车
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230032/index.m3u8
|
||||
#EXTINF:-1,北京少儿
|
||||
http://ivi.bupt.edu.cn/hls/btv10.m3u8
|
||||
#EXTINF:-1,动漫电影
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226178/index.m3u8
|
||||
#EXTINF:-1,重庆少儿
|
||||
http://219.153.252.50/PLTV/88888888/224/3221225646/1.m3u8
|
||||
#EXTINF:-1,嘉佳卡通
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226461/index.m3u8
|
||||
#EXTINF:-1,耀才财经
|
||||
http://202.69.67.66:443/webcast/bshdlive-mobile/playlist.m3u8
|
||||
#EXTINF:-1,亚旅卫视
|
||||
http://hls.jingchangkan.tv/jingchangkan/156722438_0HaM/index.m3u8
|
||||
#EXTINF:-1,信吉电视
|
||||
http://220.130.241.203:1935/sjtv/livestream_360p/playlist.m3u8
|
||||
#EXTINF:-1,唯心電視
|
||||
http://mobile.ccdntech.com/transcoder/_definst_/vod164_Live/live/chunklist_w1177047531.m3u8
|
||||
#EXTINF:-1,百事通台
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226596/index.m3u8
|
||||
#EXTINF:-1,HBO2台
|
||||
http://161.0.157.5/PLTV/88888888/224/3221227026/03.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1,点掌财经
|
||||
http://cclive2.aniu.tv/live/anzb.m3u8
|
||||
#EXTINF:-1,日本NHK华语
|
||||
https://nhkw-zh-hlscomp.akamaized.net/ixxemlzk1vqvy44o/playlist.m3u8
|
||||
#EXTINF:-1,日本NHK英语
|
||||
https://nhkwlive-ojp.akamaized.net/hls/live/2003459/nhkwlive-ojp/index_1M.m3u8
|
||||
#EXTINF:-1,日本Japan News 24
|
||||
http://www.news24.jp/livestream/index.m3u8
|
||||
#EXTINF:-1,日本JapanetChannelDX
|
||||
http://bcsecurelivehls-i.akamaihd.net/hls/live/265320/5043843989001/140130JTDX/index_1200.m3u8
|
||||
#EXTINF:-1,日本QVC
|
||||
http://cdn-live1.qvc.jp/iPhone/800/800.m3u8
|
||||
#EXTINF:-1,韩国EBS 第一频道
|
||||
http://ebsonairios.ebs.co.kr/groundwavetablet500k/tablet500k/playlist.m3u8
|
||||
#EXTINF:-1,韩国EBS 少儿频道
|
||||
http://ebsonairios.ebs.co.kr/ebsutablet500k/tablet500k/playlist.m3u8
|
||||
#EXTINF:-1,韩国KCTV
|
||||
http://119.77.96.184:1935/chn21/chn21/chunklist_w252131137.m3u8
|
||||
#EXTINF:-1,朝鲜中央台
|
||||
http://119.77.96.184:1935/chn05/chn05/chunklist_w644291506.m3u8
|
||||
#EXTINF:-1,韩国KTV 韩国电视
|
||||
http://218.38.152.31:1935/klive/klive.stream/playlist.m3u8
|
||||
#EXTINF:-1,韩国EBS 儿童频道
|
||||
http://ebsonairios.ebs.co.kr/ebsutablet500k/_definst_/tablet500k/chunklist_w1965791004.m3u8
|
||||
#EXTINF:-1,韩国阿里郎WORLDworld
|
||||
http://amdlive.ctnd.com.edgesuite.net/arirang_1ch/smil:arirang_1ch.smil/playlist.m3u8
|
||||
#EXTINF:-1,韩国阿里郎WORLD
|
||||
http://amdlive.ctnd.com.edgesuite.net/arirang_1ch/smil:arirang_1ch/master.m3u8
|
||||
#EXTINF:-1,KOREA YTN Science
|
||||
http://slive.sciencetv.kr:1935/science/yslive_20140419_1/playlist.m3u8
|
||||
#EXTINF:-1,Luxury World
|
||||
http://nano.teleservice.su:8080/hls/luxury.m3u8
|
||||
#EXTINF:-1,韩国BBS佛教广播
|
||||
http://bbstv.clouducs.com:1935/bbstv-live/livestream/chunklist_w1403706733.m3u8
|
||||
#EXTINF:-1,CPAC
|
||||
http://bcoveliveios-i.akamaihd.net/hls/live/248519/1242843915001_1/master.m3u8
|
||||
#EXTINF:-1,中国环球
|
||||
http://live.cgtn.com/1000/prog_index.m3u8
|
||||
#EXTINF:-1,狗狗宠物
|
||||
http://video.blivenyc.com/broadcast/prod/2061/22/file-3192k.m3u8
|
||||
#EXTINF:-1,法国时尚
|
||||
http://lb.streaming.sk/fashiontv/stream/chunklist_w1702070444.m3u8
|
||||
#EXTINF:-1,亚洲新闻
|
||||
http://d2e1asnsl7br7b.cloudfront.net/7782e205e72f43aeb4a48ec97f66ebbe/index_4.m3u8
|
||||
#EXTINF:-1,越南人民报
|
||||
http://vietcago.net/vstv/thnd.m3u8
|
||||
#EXTINF:-1,印度音乐电视
|
||||
http://104.237.60.234/live/gabruutv.m3u8?dsjtv.m3u8
|
||||
#EXTINF:-1,法国第五世界台
|
||||
http://v3plusinfo247hls-i.akamaihd.net/hls/live/218877-b/v3plusinfo247hls/v3plusinfo247hls_1_1.m3u8
|
||||
#EXTINF:-1,俄罗斯HD时尚频道
|
||||
http://95.67.47.115/hls/hdfashion_ua_hi/index.m3u8
|
||||
#EXTINF:-1,乌克兰M2 音乐频道
|
||||
http://live.m2.tv/hls3/stream.m3u8
|
||||
#EXTINF:-1,西班牙中国环球
|
||||
http://livees.cgtn.com/1000e/prog_index.m3u8
|
||||
#EXTINF:-1,意大利意大利电台
|
||||
http://radioitaliatv-lh.akamaihd.net/i/radioitaliatv_1@329645/index_720x480_av-p.m3u8
|
||||
#EXTINF:-1,意大利V2 音乐频道
|
||||
http://de1se01.v2beat.live/playlist.m3u8
|
||||
#EXTINF:-1,墨西哥墨西哥电视
|
||||
http://bcoveliveios-i.akamaihd.net/hls/live/201661/57828478001/milenio_center_512k@51752.m3u8
|
||||
#EXTINF:-1,音乐20TV
|
||||
http://m2otv-lh.akamaihd.net/i/m2oTv_1@186074/index_600_av-p.m3u8
|
||||
#EXTINF:-1,当红MTV
|
||||
http://unilivemtveu-lh.akamaihd.net/i/mtvno_1@346424/index_3500_av-b.m3u8
|
||||
#EXTINF:-1,酷酷频道
|
||||
http://edge1.tikilive.com:1935/unrestricted_tikilive/25947/amlst:NWKlw6jwyXpz/chunklist_w981409619_b1105254.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1,红牛电视
|
||||
http://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_1660.m3u8
|
||||
#EXTINF:-1,NBC电视
|
||||
http://161.0.157.51/PLTV/88888888/224/3221227040/index.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1,Jewelry电视
|
||||
http://wowzaprod134-i.akamaihd.net/hls/live/577814/ccddaf02/playlist.m3u8
|
||||
#EXTINF:-1,Darcizzle电视
|
||||
http://30a-tv.com/darcizzle.m3u8
|
||||
#EXTINF:-1,CBS新闻
|
||||
http://cbsnewshd-lh.akamaihd.net/i/CBSNHD_7@199302/master.m3u8
|
||||
#EXTINF:-1,美国Deutsche Welle
|
||||
http://dwstream4-lh.akamaihd.net/i/dwstream4_live@131329/master.m3u8
|
||||
#EXTINF:-1,美国360 North
|
||||
http://wowzaprod3-i.akamaihd.net/hls/live/252236/2147483647_360north_247/playlist.m3u8
|
||||
#EXTINF:-1,美国Fox News Talk Radio
|
||||
http://fnurtmp-f.akamaihd.net/i/FNRADIO_1@92141/master.m3u8
|
||||
#EXTINF:-1,日本cgntv
|
||||
http://cgntv-glive.ofsdelivery.net/live/_definst_/cgntv_jp/playlist.m3u8
|
||||
#EXTINF:-1,日本Japanet Channel DX
|
||||
http://bcsecurelivehls-i.akamaihd.net/hls/live/265320/5043843989001/140130JTDX/index_600.m3u8
|
||||
723
extraResources/电视频道_1.m3u
Normal file
723
extraResources/电视频道_1.m3u
Normal file
@@ -0,0 +1,723 @@
|
||||
#EXTM3U
|
||||
#EXTINF:-1 ,====== =北京移动= ======
|
||||
http://0/0.m3u8
|
||||
#EXTINF:-1 ,咪咕4K
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226399/1.m3u8
|
||||
#EXTINF:-1 ,咪咕4K
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226400/1.m3u8
|
||||
#EXTINF:-1 ,北京IPTV4K超清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226550/1.m3u8
|
||||
#EXTINF:-1 ,北京IPTV淘BABY CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226554/1.m3u8
|
||||
#EXTINF:-1 ,北京IPTV淘剧场 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226553/1.m3u8
|
||||
#EXTINF:-1 ,北京IPTV淘娱乐 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226551/1.m3u8
|
||||
#EXTINF:-1 ,北京IPTV淘电影 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226552/1.m3u8
|
||||
#EXTINF:-1 ,北京IPTV萌宠TV CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226555/1.m3u8
|
||||
#EXTINF:-1 ,老伙计-laoguy.com
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226555/1.m3u8
|
||||
#EXTINF:-1 ,大健康 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226556/1.m3u8
|
||||
#EXTINF:-1 ,凤凰中文 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225942/1.m3u8
|
||||
#EXTINF:-1 ,凤凰中文 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225948/1.m3u8
|
||||
#EXTINF:-1 ,凤凰资讯 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225949/1.m3u8
|
||||
#EXTINF:-1 ,CCTV1 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225924/1.m3u8
|
||||
#EXTINF:-1 ,CCTV1 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226154/1.m3u8
|
||||
#EXTINF:-1 ,CCTV1 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226155/1.m3u8
|
||||
#EXTINF:-1 ,CCTV1 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226226/1.m3u8
|
||||
#EXTINF:-1 ,CCTV1 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226346/1.m3u8
|
||||
#EXTINF:-1 ,CCTV1 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226431/1.m3u8
|
||||
#EXTINF:-1 ,CCTV2 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8
|
||||
#EXTINF:-1 ,CCTV2 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226371/1.m3u8
|
||||
#EXTINF:-1 ,CCTV2 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226472/1.m3u8
|
||||
#EXTINF:-1 ,CCTV3 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226471/1.m3u8
|
||||
#EXTINF:-1 ,CCTV4 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226314/1.m3u8
|
||||
#EXTINF:-1 ,CCTV4 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226335/1.m3u8
|
||||
#EXTINF:-1 ,CCTV4 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226470/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226469/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5+ HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226225/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5+ CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226349/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5+ CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226458/1.m3u8
|
||||
#EXTINF:-1 ,CCTV6 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226468/1.m3u8
|
||||
#EXTINF:-1 ,CCTV7 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226234/1.m3u8
|
||||
#EXTINF:-1 ,CCTV7 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226467/1.m3u8
|
||||
#EXTINF:-1 ,CCTV8 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226485/1.m3u8
|
||||
#EXTINF:-1 ,CCTV9 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226236/1.m3u8
|
||||
#EXTINF:-1 ,CCTV9 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226465/1.m3u8
|
||||
#EXTINF:-1 ,CCTV10 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226227/1.m3u8
|
||||
#EXTINF:-1 ,CCTV10 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226464/1.m3u8
|
||||
#EXTINF:-1 ,CCTV11 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226334/1.m3u8
|
||||
#EXTINF:-1 ,CCTV11 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226315/1.m3u8
|
||||
#EXTINF:-1 ,CCTV11 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226463/1.m3u8
|
||||
#EXTINF:-1 ,CCTV12 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8
|
||||
#EXTINF:-1 ,CCTV12 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226462/1.m3u8
|
||||
#EXTINF:-1 ,CCTV13 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226316/1.m3u8
|
||||
#EXTINF:-1 ,CCTV14 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226229/1.m3u8
|
||||
#EXTINF:-1 ,CCTV14 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226461/1.m3u8
|
||||
#EXTINF:-1 ,CCTV15 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226460/1.m3u8
|
||||
#EXTINF:-1 ,CCTV15 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226317/1.m3u8
|
||||
#EXTINF:-1 ,CCTV15 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8
|
||||
#EXTINF:-1 ,CCTV17 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8
|
||||
#EXTINF:-1 ,CCTV17 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226459/1.m3u8
|
||||
#EXTINF:-1 ,中国教育1 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226494/1.m3u8
|
||||
#EXTINF:-1 ,东南卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226406/1.m3u8
|
||||
#EXTINF:-1 ,东南卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226496/1.m3u8
|
||||
#EXTINF:-1 ,东方卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226237/1.m3u8
|
||||
#EXTINF:-1 ,东方卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226364/1.m3u8
|
||||
#EXTINF:-1 ,东方卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226505/1.m3u8
|
||||
#EXTINF:-1 ,北京卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226224/1.m3u8
|
||||
#EXTINF:-1 ,北京卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226367/1.m3u8
|
||||
#EXTINF:-1 ,北京卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226441/1.m3u8
|
||||
#EXTINF:-1 ,天津卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226246/1.m3u8
|
||||
#EXTINF:-1 ,天津卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226502/1.m3u8
|
||||
#EXTINF:-1 ,安徽卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226223/1.m3u8
|
||||
#EXTINF:-1 ,安徽卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226499/1.m3u8
|
||||
#EXTINF:-1 ,山东卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225894/1.m3u8
|
||||
#EXTINF:-1 ,山东卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226244/1.m3u8
|
||||
#EXTINF:-1 ,山东卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226308/1.m3u8
|
||||
#EXTINF:-1 ,山东卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226501/1.m3u8
|
||||
#EXTINF:-1 ,广东卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225878/1.m3u8
|
||||
#EXTINF:-1 ,广东卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226238/1.m3u8
|
||||
#EXTINF:-1 ,广东卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226508/1.m3u8
|
||||
#EXTINF:-1 ,江苏卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226242/1.m3u8
|
||||
#EXTINF:-1 ,江苏卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226366/1.m3u8
|
||||
#EXTINF:-1 ,江苏卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226506/1.m3u8
|
||||
#EXTINF:-1 ,江西卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226243/1.m3u8
|
||||
#EXTINF:-1 ,河北卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226507/1.m3u8
|
||||
#EXTINF:-1 ,浙江卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226247/1.m3u8
|
||||
#EXTINF:-1 ,浙江卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226365/1.m3u8
|
||||
#EXTINF:-1 ,浙江卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226504/1.m3u8
|
||||
#EXTINF:-1 ,深圳卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225897/1.m3u8
|
||||
#EXTINF:-1 ,深圳卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226245/1.m3u8
|
||||
#EXTINF:-1 ,深圳卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226495/1.m3u8
|
||||
#EXTINF:-1 ,湖北卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226240/1.m3u8
|
||||
#EXTINF:-1 ,湖北卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226310/1.m3u8
|
||||
#EXTINF:-1 ,湖北卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226503/1.m3u8
|
||||
#EXTINF:-1 ,湖南卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226241/1.m3u8
|
||||
#EXTINF:-1 ,湖南卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226509/1.m3u8
|
||||
#EXTINF:-1 ,贵州卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226497/1.m3u8
|
||||
#EXTINF:-1 ,辽宁卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226500/1.m3u8
|
||||
#EXTINF:-1 ,黑龙江卫视 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226239/1.m3u8
|
||||
#EXTINF:-1 ,黑龙江卫视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226498/1.m3u8
|
||||
#EXTINF:-1 ,北京冬奥纪实 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226438/1.m3u8
|
||||
#EXTINF:-1 ,北京影视 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226486/1.m3u8
|
||||
#EXTINF:-1 ,北京文艺 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226440/1.m3u8
|
||||
#EXTINF:-1 ,北京新闻 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226437/1.m3u8
|
||||
#EXTINF:-1 ,北京卡酷少儿 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226558/1.m3u8
|
||||
#EXTINF:-1 ,湖南快乐垂钓 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226549/1.m3u8
|
||||
#EXTINF:-1 ,湖南茶频道 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226548/1.m3u8
|
||||
#EXTINF:-1 ,黑莓动画 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225914/1.m3u8
|
||||
#EXTINF:-1 ,黑莓动画 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226289/1.m3u8
|
||||
#EXTINF:-1 ,黑莓电影 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225927/1.m3u8
|
||||
#EXTINF:-1 ,黑莓电影 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226292/1.m3u8
|
||||
#EXTINF:-1 ,黑莓电竞 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225931/1.m3u8
|
||||
#EXTINF:-1 ,黑莓电竞 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226250/1.m3u8
|
||||
#EXTINF:-1 ,黑莓电竞 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226262/1.m3u8
|
||||
#EXTINF:-1 ,黑莓电竞 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226307/1.m3u8
|
||||
#EXTINF:-1 ,NewTV中国功夫 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225951/1.m3u8
|
||||
#EXTINF:-1 ,NewTV中国功夫 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226298/1.m3u8
|
||||
#EXTINF:-1 ,NewTV中国功夫 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226321/1.m3u8
|
||||
#EXTINF:-1 ,NewTV怡伴健康 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225919/1.m3u8
|
||||
#EXTINF:-1 ,NewTV怡伴健康 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226306/1.m3u8
|
||||
#EXTINF:-1 ,NewTV怡伴健康 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226327/1.m3u8
|
||||
#EXTINF:-1 ,NewTV军事评论 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225926/1.m3u8
|
||||
#EXTINF:-1 ,NewTV军事评论 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226303/1.m3u8
|
||||
#EXTINF:-1 ,NewTV军事评论 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226326/1.m3u8
|
||||
#EXTINF:-1 ,NewTV军旅剧场 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225923/1.m3u8
|
||||
#EXTINF:-1 ,NewTV军旅剧场 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226301/1.m3u8
|
||||
#EXTINF:-1 ,NewTV军旅剧场 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226324/1.m3u8
|
||||
#EXTINF:-1 ,NewTV农业致富 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225930/1.m3u8
|
||||
#EXTINF:-1 ,NewTV农业致富 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226304/1.m3u8
|
||||
#EXTINF:-1 ,NewTV动作电影 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225915/1.m3u8
|
||||
#EXTINF:-1 ,NewTV动作电影 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226288/1.m3u8
|
||||
#EXTINF:-1 ,NewTV动作电影 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226329/1.m3u8
|
||||
#EXTINF:-1 ,NewTV古装剧场 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225916/1.m3u8
|
||||
#EXTINF:-1 ,NewTV古装剧场 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226300/1.m3u8
|
||||
#EXTINF:-1 ,NewTV古装剧场 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226323/1.m3u8
|
||||
#EXTINF:-1 ,NewTV家庭剧场 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225918/1.m3u8
|
||||
#EXTINF:-1 ,NewTV家庭剧场 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226290/1.m3u8
|
||||
#EXTINF:-1 ,NewTV家庭剧场 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226330/1.m3u8
|
||||
#EXTINF:-1 ,NewTV惊悚悬疑 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225921/1.m3u8
|
||||
#EXTINF:-1 ,NewTV惊悚悬疑 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226294/1.m3u8
|
||||
#EXTINF:-1 ,NewTV惊悚悬疑 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226423/1.m3u8
|
||||
#EXTINF:-1 ,NewTV明星大片 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225929/1.m3u8
|
||||
#EXTINF:-1 ,NewTV明星大片 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226295/1.m3u8
|
||||
#EXTINF:-1 ,NewTV明星大片 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226425/1.m3u8
|
||||
#EXTINF:-1 ,NewTV武搏世界 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226171/1.m3u8
|
||||
#EXTINF:-1 ,NewTV武搏世界 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226297/1.m3u8
|
||||
#EXTINF:-1 ,NewTV武搏世界 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226320/1.m3u8
|
||||
#EXTINF:-1 ,NewTV海外剧场 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225917/1.m3u8
|
||||
#EXTINF:-1 ,NewTV海外剧场 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226302/1.m3u8
|
||||
#EXTINF:-1 ,NewTV海外剧场 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226325/1.m3u8
|
||||
#EXTINF:-1 ,NewTV潮妈辣婆 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225957/1.m3u8
|
||||
#EXTINF:-1 ,NewTV潮妈辣婆 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226286/1.m3u8
|
||||
#EXTINF:-1 ,NewTV炫舞未来 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226248/1.m3u8
|
||||
#EXTINF:-1 ,NewTV爱情喜剧 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225913/1.m3u8
|
||||
#EXTINF:-1 ,NewTV爱情喜剧 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226299/1.m3u8
|
||||
#EXTINF:-1 ,NewTV爱情喜剧 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226322/1.m3u8
|
||||
#EXTINF:-1 ,NewTV精品体育 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226287/1.m3u8
|
||||
#EXTINF:-1 ,NewTV精品体育 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226328/1.m3u8
|
||||
#EXTINF:-1 ,NewTV精品体育 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225922/1.m3u8
|
||||
#EXTINF:-1 ,NewTV精品大剧 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225925/1.m3u8
|
||||
#EXTINF:-1 ,NewTV精品大剧 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226291/1.m3u8
|
||||
#EXTINF:-1 ,NewTV精品大剧 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226331/1.m3u8
|
||||
#EXTINF:-1 ,NewTV精品纪录 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226293/1.m3u8
|
||||
#EXTINF:-1 ,NewTV精品纪录 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226332/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级体育 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226157/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级体育 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226158/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级体育 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226232/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级体育 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226348/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级电影 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226133/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级电影 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226233/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级电影 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226369/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级电视剧 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225864/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级电视剧 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226253/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级电视剧 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226368/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级综艺 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226127/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级综艺 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226231/1.m3u8
|
||||
#EXTINF:-1 ,NewTV超级综艺 CQ
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226370/1.m3u8
|
||||
#EXTINF:-1 ,NewTV金牌综艺 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225920/1.m3u8
|
||||
#EXTINF:-1 ,NewTV金牌综艺 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226296/1.m3u8
|
||||
#EXTINF:-1 ,NewTV金牌综艺 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226347/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226374/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226375/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226377/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226378/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226379/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226380/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226381/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226382/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226394/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226395/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226396/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226397/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226398/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226393/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226392/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226391/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226390/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226372/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226373/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226376/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226383/1.m3u8
|
||||
#EXTINF:-1 ,咪咕视频 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226384/1.m3u8
|
||||
#EXTINF:-1 ,北京家有购物 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226429/1.m3u8
|
||||
#EXTINF:-1 ,山西优购物 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226386/1.m3u8
|
||||
#EXTINF:-1 ,中视购物 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226547/1.m3u8
|
||||
#EXTINF:-1 ,央广购物 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226319/1.m3u8
|
||||
#EXTINF:-1 ,央广购物 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226363/1.m3u8
|
||||
#EXTINF:-1 ,江苏好享购物 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226312/1.m3u8
|
||||
#EXTINF:-1 ,江苏好享购物 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226344/1.m3u8
|
||||
#EXTINF:-1 ,湖南快乐购 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226341/1.m3u8
|
||||
#EXTINF:-1 ,江西风尚购物 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225911/1.m3u8
|
||||
#EXTINF:-1 ,江西风尚购物 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226305/1.m3u8
|
||||
#EXTINF:-1 ,江西风尚购物 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226342/1.m3u8
|
||||
#EXTINF:-1 ,江苏好享购物 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226313/1.m3u8
|
||||
#EXTINF:-1 ,5GO美妆个护 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226387/1.m3u8
|
||||
#EXTINF:-1 ,5GO美妆个护 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226389/1.m3u8
|
||||
#EXTINF:-1 ,5GO服饰内衣 HD
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226388/1.m3u8
|
||||
#EXTINF:-1 ,CCTV1 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226432/1.m3u8
|
||||
#EXTINF:-1 ,CCTV1 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226338/1.m3u8
|
||||
#EXTINF:-1 ,CCTV2 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225934/1.m3u8
|
||||
#EXTINF:-1 ,CCTV2 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226457/1.m3u8
|
||||
#EXTINF:-1 ,CCTV3 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226456/1.m3u8
|
||||
#EXTINF:-1 ,CCTV4 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226156/1.m3u8
|
||||
#EXTINF:-1 ,CCTV4 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226455/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226454/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226256/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226257/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226258/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226259/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226260/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226261/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226340/1.m3u8
|
||||
#EXTINF:-1 ,CCTV5+ 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225938/1.m3u8
|
||||
#EXTINF:-1 ,CCTV6 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226453/1.m3u8
|
||||
#EXTINF:-1 ,CCTV7 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225863/1.m3u8
|
||||
#EXTINF:-1 ,CCTV7 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226452/1.m3u8
|
||||
#EXTINF:-1 ,CCTV8 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226451/1.m3u8
|
||||
#EXTINF:-1 ,CCTV9 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226450/1.m3u8
|
||||
#EXTINF:-1 ,CCTV9 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225865/1.m3u8
|
||||
#EXTINF:-1 ,CCTV10 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225868/1.m3u8
|
||||
#EXTINF:-1 ,CCTV10 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226449/1.m3u8
|
||||
#EXTINF:-1 ,CCTV11 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225869/1.m3u8
|
||||
#EXTINF:-1 ,CCTV11 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226448/1.m3u8
|
||||
#EXTINF:-1 ,CCTV12 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225870/1.m3u8
|
||||
#EXTINF:-1 ,CCTV12 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226447/1.m3u8
|
||||
#EXTINF:-1 ,CCTV13 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226446/1.m3u8
|
||||
#EXTINF:-1 ,CCTV13 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226159/1.m3u8
|
||||
#EXTINF:-1 ,CCTV13 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226339/1.m3u8
|
||||
#EXTINF:-1 ,CCTV14 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225872/1.m3u8
|
||||
#EXTINF:-1 ,CCTV14 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226445/1.m3u8
|
||||
#EXTINF:-1 ,CCTV14 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225928/1.m3u8
|
||||
#EXTINF:-1 ,CCTV15 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225940/1.m3u8
|
||||
#EXTINF:-1 ,CCTV15 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226444/1.m3u8
|
||||
#EXTINF:-1 ,CCTV17 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226442/1.m3u8
|
||||
#EXTINF:-1 ,CGTN 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226404/1.m3u8
|
||||
#EXTINF:-1 ,CGTN 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225867/1.m3u8
|
||||
#EXTINF:-1 ,CGTN 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226443/1.m3u8
|
||||
#EXTINF:-1 ,CGTN纪录 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226403/1.m3u8
|
||||
#EXTINF:-1 ,CGTN纪录 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225866/1.m3u8
|
||||
#EXTINF:-1 ,中国教育1 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226417/1.m3u8
|
||||
#EXTINF:-1 ,中国教育1 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226538/1.m3u8
|
||||
#EXTINF:-1 ,中国教育1 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225905/1.m3u8
|
||||
#EXTINF:-1 ,中国教育2 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226537/1.m3u8
|
||||
#EXTINF:-1 ,中国教育4 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226362/1.m3u8
|
||||
#EXTINF:-1 ,中国教育4 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226557/1.m3u8
|
||||
#EXTINF:-1 ,东南卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226517/1.m3u8
|
||||
#EXTINF:-1 ,东南卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225876/1.m3u8
|
||||
#EXTINF:-1 ,东方卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226519/1.m3u8
|
||||
#EXTINF:-1 ,东方卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226161/1.m3u8
|
||||
#EXTINF:-1 ,云南卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226424/1.m3u8
|
||||
#EXTINF:-1 ,云南卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225902/1.m3u8
|
||||
#EXTINF:-1 ,云南卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226543/1.m3u8
|
||||
#EXTINF:-1 ,内蒙古卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226415/1.m3u8
|
||||
#EXTINF:-1 ,内蒙古卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226530/1.m3u8
|
||||
#EXTINF:-1 ,内蒙古卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225891/1.m3u8
|
||||
#EXTINF:-1 ,北京卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226436/1.m3u8
|
||||
#EXTINF:-1 ,北京卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226160/1.m3u8
|
||||
#EXTINF:-1 ,厦门卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226542/1.m3u8
|
||||
#EXTINF:-1 ,吉林卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226426/1.m3u8
|
||||
#EXTINF:-1 ,吉林卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226533/1.m3u8
|
||||
#EXTINF:-1 ,吉林卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225886/1.m3u8
|
||||
#EXTINF:-1 ,四川卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226407/1.m3u8
|
||||
#EXTINF:-1 ,四川卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225898/1.m3u8
|
||||
#EXTINF:-1 ,四川卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226523/1.m3u8
|
||||
#EXTINF:-1 ,天津卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226489/1.m3u8
|
||||
#EXTINF:-1 ,天津卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225899/1.m3u8
|
||||
#EXTINF:-1 ,宁夏卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226413/1.m3u8
|
||||
#EXTINF:-1 ,宁夏卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226528/1.m3u8
|
||||
#EXTINF:-1 ,宁夏卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225892/1.m3u8
|
||||
#EXTINF:-1 ,安徽卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225873/1.m3u8
|
||||
#EXTINF:-1 ,安徽卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226490/1.m3u8
|
||||
#EXTINF:-1 ,山东卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226487/1.m3u8
|
||||
#EXTINF:-1 ,山西卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226410/1.m3u8
|
||||
#EXTINF:-1 ,山西卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225895/1.m3u8
|
||||
#EXTINF:-1 ,山西卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226531/1.m3u8
|
||||
#EXTINF:-1 ,广东卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226535/1.m3u8
|
||||
#EXTINF:-1 ,广西卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226408/1.m3u8
|
||||
#EXTINF:-1 ,广西卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225879/1.m3u8
|
||||
#EXTINF:-1 ,广西卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226534/1.m3u8
|
||||
#EXTINF:-1 ,新疆卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226422/1.m3u8
|
||||
#EXTINF:-1 ,新疆卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225901/1.m3u8
|
||||
#EXTINF:-1 ,新疆卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226546/1.m3u8
|
||||
#EXTINF:-1 ,江苏卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226491/1.m3u8
|
||||
#EXTINF:-1 ,江苏卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225887/1.m3u8
|
||||
#EXTINF:-1 ,江西卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226522/1.m3u8
|
||||
#EXTINF:-1 ,江西卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225888/1.m3u8
|
||||
#EXTINF:-1 ,河北卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226409/1.m3u8
|
||||
#EXTINF:-1 ,河北卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225881/1.m3u8
|
||||
#EXTINF:-1 ,河北卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226536/1.m3u8
|
||||
#EXTINF:-1 ,河南卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225882/1.m3u8
|
||||
#EXTINF:-1 ,河南卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226525/1.m3u8
|
||||
#EXTINF:-1 ,浙江卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226492/1.m3u8
|
||||
#EXTINF:-1 ,浙江卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225903/1.m3u8
|
||||
#EXTINF:-1 ,海南卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226427/1.m3u8
|
||||
#EXTINF:-1 ,海南卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225890/1.m3u8
|
||||
#EXTINF:-1 ,湖北卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226520/1.m3u8
|
||||
#EXTINF:-1 ,湖北卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225884/1.m3u8
|
||||
#EXTINF:-1 ,湖南卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226493/1.m3u8
|
||||
#EXTINF:-1 ,湖南卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226162/1.m3u8
|
||||
#EXTINF:-1 ,甘肃卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226414/1.m3u8
|
||||
#EXTINF:-1 ,甘肃卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225877/1.m3u8
|
||||
#EXTINF:-1 ,甘肃卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226545/1.m3u8
|
||||
#EXTINF:-1 ,西藏卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226428/1.m3u8
|
||||
#EXTINF:-1 ,西藏卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225900/1.m3u8
|
||||
#EXTINF:-1 ,西藏卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226527/1.m3u8
|
||||
#EXTINF:-1 ,贵州卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226405/1.m3u8
|
||||
#EXTINF:-1 ,贵州卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225880/1.m3u8
|
||||
#EXTINF:-1 ,贵州卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226521/1.m3u8
|
||||
#EXTINF:-1 ,辽宁卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226488/1.m3u8
|
||||
#EXTINF:-1 ,辽宁卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226336/1.m3u8
|
||||
#EXTINF:-1 ,辽宁卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225889/1.m3u8
|
||||
#EXTINF:-1 ,重庆卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225904/1.m3u8
|
||||
#EXTINF:-1 ,重庆卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226337/1.m3u8
|
||||
#EXTINF:-1 ,重庆卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226518/1.m3u8
|
||||
#EXTINF:-1 ,陕西卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226411/1.m3u8
|
||||
#EXTINF:-1 ,陕西卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225896/1.m3u8
|
||||
#EXTINF:-1 ,陕西卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226532/1.m3u8
|
||||
#EXTINF:-1 ,青海卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226412/1.m3u8
|
||||
#EXTINF:-1 ,青海卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225893/1.m3u8
|
||||
#EXTINF:-1 ,青海卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226529/1.m3u8
|
||||
#EXTINF:-1 ,黑龙江卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226524/1.m3u8
|
||||
#EXTINF:-1 ,黑龙江卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225883/1.m3u8
|
||||
#EXTINF:-1 ,山东教育卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226419/1.m3u8
|
||||
#EXTINF:-1 ,山东教育卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225908/1.m3u8
|
||||
#EXTINF:-1 ,山东教育卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226526/1.m3u8
|
||||
#EXTINF:-1 ,广东南方卫视地面 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226540/1.m3u8
|
||||
#EXTINF:-1 ,新疆兵团卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226541/1.m3u8
|
||||
#EXTINF:-1 ,海南三沙卫视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226544/1.m3u8
|
||||
#EXTINF:-1 ,北京卡酷少儿 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225907/1.m3u8
|
||||
#EXTINF:-1 ,北京卡酷少儿 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226511/1.m3u8
|
||||
#EXTINF:-1 ,北京国际 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226510/1.m3u8
|
||||
#EXTINF:-1 ,北京影视 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226433/1.m3u8
|
||||
#EXTINF:-1 ,北京文艺 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226435/1.m3u8
|
||||
#EXTINF:-1 ,北京新闻 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226512/1.m3u8
|
||||
#EXTINF:-1 ,北京生活 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226514/1.m3u8
|
||||
#EXTINF:-1 ,北京科教 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226434/1.m3u8
|
||||
#EXTINF:-1 ,北京财经 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226516/1.m3u8
|
||||
#EXTINF:-1 ,北京青年 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226513/1.m3u8
|
||||
#EXTINF:-1 ,上海哈哈炫动 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226421/1.m3u8
|
||||
#EXTINF:-1 ,上海哈哈炫动 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225909/1.m3u8
|
||||
#EXTINF:-1 ,广东嘉佳卡通 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226539/1.m3u8
|
||||
#EXTINF:-1 ,江苏优漫卡通 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226420/1.m3u8
|
||||
#EXTINF:-1 ,江苏优漫卡通 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225910/1.m3u8
|
||||
#EXTINF:-1 ,湖南金鹰卡通 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225906/1.m3u8
|
||||
#EXTINF:-1 ,CCTV中视购物 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226385/1.m3u8
|
||||
#EXTINF:-1 ,北京家有购物 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225912/1.m3u8
|
||||
#EXTINF:-1 ,北京家有购物 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226343/1.m3u8
|
||||
#EXTINF:-1 ,聚鲨环球精选 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226311/1.m3u8
|
||||
#EXTINF:-1 ,聚鲨环球精选 标清
|
||||
http://221.179.217.9/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226345/1.m3u8
|
||||
6489
extraResources/电视频道_2.m3u
Normal file
6489
extraResources/电视频道_2.m3u
Normal file
File diff suppressed because it is too large
Load Diff
1877
extraResources/电视频道_3_高清.m3u
Normal file
1877
extraResources/电视频道_3_高清.m3u
Normal file
File diff suppressed because it is too large
Load Diff
816
extraResources/电视频道_4.m3u
Normal file
816
extraResources/电视频道_4.m3u
Normal file
@@ -0,0 +1,816 @@
|
||||
#EXTM3U
|
||||
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-1
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226226/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-1
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225922/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-1
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/8380729188125675257/1.m3u8?stbId=005301FF001589101611549359B92C46&channel-id=shvoolive&Contentid=8380729188125675257&mos=jbjhhzstsl&livemode=1&proto=7&version=1.0&owaccmark=8380729188125675257&owchid=shvoolive&owsid=9810361579531242552&AuthInfo=2TOfGIahP4HrGWrHbpJXVOhAZZf%2B%2BRvFCOimr7PCGr9K%2B8TGA2jGwhx%2FP%2B9zbDc6lyCFd7nUPkjV5yhX4M591q%2Bjz%2FVPZBSXzMBonFGRPep2MwYhKpmBifYKbDBIkjbE
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-2
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226230/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-2
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225923/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-2
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/9059700522149664924/1.m3u8?stbId=005301FF00158910000000212621A0DD&channel-id=shvoolive&Contentid=9059700522149664924&mos=jbjhhzstsl&livemode=1&proto=7&version=1.0&owaccmark=9059700522149664924&owchid=shvoolive&owsid=9176631579531299298&AuthInfo=2TOfGIahP4HrGWrHbpJXVOJq5SVvpOdgyIf7tzyuJqdYhL2umVWk4VA%2BiWro6vS%2FGYbJQ4PkF2oGSeOSrHR8kErWftutbDOGxkGeSWuC8HvRlxrsJs3srD2VEDgCtlA%2B
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-3
|
||||
http://117.169.124.36:6610/ysten-businessmobile/live/cctv-3/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-3
|
||||
http://223.110.241.130:6610/gitv/live1/G_CCTV-3-HQ/.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-3
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/7583927553614607925/1.m3u8?stbId=005301FF001589101611549359B9531C&channel-id=shvoolive&Contentid=7583927553614607925&mos=jbjhhzstsl&livemode=1&proto=7&version=1.0&owaccmark=7583927553614607925&owchid=shvoolive&owsid=4975061579531175360&AuthInfo=2TOfGIahP4HrGWrHbpJXVMtGfw%2Bi1RmSk6DRVWhSYHpPQhuPB3gB9HD2kYmj6h2ghYJH%2BZemKqNLOjvtazNyyelvyYAlIu0Li8OHrMDUf9T6xYM6NbVkTDG8Dli2hoZV
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-4
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226314/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-4
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225802/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-4
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/1000000002000031664/1.m3u8?channel-id=ystenlive&Contentid=1000000002000031664&livemode=1&stbId=00000250001B50800001B401420BC069&userToken=&usergroup=&version=1.0&owaccmark=1000000002000031664&owchid=ystenlive&owsid=4493204828580187354&AuthInfo=zmDeINsczUw%2bXOm6icTIplPJYM0PdJZ7nyJeCqAhmgD4h2W12vkSCe%2bw8qoQi5%2fj1BMuqFcEHMRAJlgQD47XRVqqHN3O4Si9Wv7MjAX%2b8AK0eHLMDmPByGK0oSB43DB7
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-5
|
||||
http://223.110.241.130:6610/gitv/live1/G_CCTV-5-HQ/G_CCTV-5-HQ/
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-5
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226687/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-5
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/8134369599538150431/1.m3u8?stbId=005301FF001589101611549359B91F12&channel-id=shvoolive&Contentid=8134369599538150431&mos=jbjhhzstsl&livemode=1&proto=7&version=1.0&owaccmark=8134369599538150431&owchid=shvoolive&owsid=9856681579531396965&AuthInfo=2TOfGIahP4HrGWrHbpJXVHgbCHVZZF5UUv019%2FSsh88KJM1EuxjKGjHOptOCA%2B9qy7SUSUSlFcfpzdjGKbaNwXQPpC5RWUW%2BWPXxlyqlAmmp3eZqD0kAJRbC1HQjeP48
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-5+
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226225/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-5+
|
||||
http://117.169.124.46:6410/ysten-businessmobile/live/hdcctv05plus/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-5+
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/1000000001000020505/1.m3u8?stbId=005301FF001589101611549359B92F26&channel-id=ystenlive&Contentid=1000000001000020505&mos=jbjhhzstsl&livemode=1&version=1.0&owaccmark=1000000001000020505&owchid=ystenlive&owsid=3007521579531929012&AuthInfo=2TOfGIahP4HrGWrHbpJXVPo6e%2BHF%2BrVo6xQQtyKDSuqu3lLj0NrV6tPDBIsVEpn3e3h8FJNoRfXgk2fJ%2B8A%2BC9FKxw7DogGmhnFazyXoBZJZPx01aV9Q%2Bs%2B%2FVnd4tZOQ
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-6
|
||||
http://223.110.243.139/PLTV/3/224/3221225548/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-6
|
||||
http://117.169.124.36:6610/ysten-businessmobile/live/cctv-6/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-6
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/6705015643145867202/1.m3u8?stbId=005301FF00158910000000212621A501&channel-id=shvoolive&Contentid=6705015643145867202&mos=jbjhhzstsl&livemode=1&proto=7&version=1.0&owaccmark=6705015643145867202&owchid=shvoolive&owsid=7641431579531463387&AuthInfo=2TOfGIahP4HrGWrHbpJXVGtyhHJPIcRRegoBYBxkr5gU2nvM3aYRu9pk6g1cfGsxitbm7ri6Y%2BkjLjny72IEdjBnss%2Faslq1wPHTyGHeHFYaAuxUDnXfdynLgAo%2FAhgd
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-7
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226234/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-7
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225927/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-7
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/9021776916726275968/1.m3u8?stbId=005303FF00010060000100E400EDD522&channel-id=shvoolive&Contentid=9021776916726275968&mos=jbjhhzstsl&livemode=1&proto=7&version=1.0&owaccmark=9021776916726275968&owchid=shvoolive&owsid=1117721579531499433&AuthInfo=dIshjDc3shv8ei%2BWF5V%2F4V6lf0HKCsUdpGR8CeY5ZvwycVHGQkBt0T4Mgr0s8ldsXtd9fDrW5osGZSl1tYFcN4xKXGPanSFGs4GR6kXBOyjKyNYEmAQ7njzvrMpDpEoy
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-8
|
||||
http://117.169.124.36:6610/ysten-businessmobile/live/cctv-8/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-8
|
||||
http://223.110.247.161:6610/cntv/live1/HD-2500k-1080P-cctv8/HD-2500k-1080P-cctv8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-8
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/6718199708332952607/1.m3u8?stbId=005303FF00010060000100E400EDD522&channel-id=shvoolive&Contentid=6718199708332952607&mos=jbjhhzstsl&livemode=1&proto=7&version=1.0&owaccmark=6718199708332952607&owchid=shvoolive&owsid=5415971579531545952&AuthInfo=dIshjDc3shv8ei%2BWF5V%2F4V6lf0HKCsUdpGR8CeY5ZvwhPD49%2ByoYvwp35mAdL%2Fiv3IhMa6%2BWOwlWxbCOH9ParUjWZpISKyxZZPoQtekRP1dMl%2BCp9T%2BIEdj1ckDKKfLV
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-9
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226236/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-9
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225820/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-9
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/1000000001000014583/1.m3u8?stbId=005303FF00010060000100E400EDD522&channel-id=ystenlive&Contentid=1000000001000014583&mos=jbjhhzstsl&livemode=1&version=1.0&owaccmark=1000000001000014583&owchid=ystenlive&owsid=7167961579531601678&AuthInfo=dIshjDc3shv8ei%2BWF5V%2F4V6lf0HKCsUdpGR8CeY5Zvyu3lLj0NrV6tPDBIsVEpn34sImpRHeOmdxmKUDLs1%2BcZ4JMWbvuFdY7IsuWCFdW392C%2BvFQjyH4LwQq4yRWFvT
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-10
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226227/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-10
|
||||
http://ott.fj.chinamobile.com/PLTV/88888888/224/3221225814/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-10
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/5505774374187257095/1.m3u8?stbId=005301FF001589101611549359B928C9&channel-id=shvoolive&Contentid=5505774374187257095&mos=jbjhhzstsl&livemode=1&proto=7&version=1.0&owaccmark=5505774374187257095&owchid=shvoolive&owsid=1848841579531638041&AuthInfo=2TOfGIahP4HrGWrHbpJXVO9dhnpYCD6yZADsu%2BE3e1z0TmJ04Et2oauQoqLXutIbfy6yerDX1KNDnX4OGB2ZvZf3QlZMt7Oj%2B5HhHlpl0nNoTgXky6K2iYWb1eX3xCek
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-11
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226315/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-11
|
||||
http://ott.fj.chinamobile.com/PLTV/88888888/224/3221225815/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-11
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/1000000002000019789/1.m3u8?stbId=005301FF001589101611549359B96031&channel-id=ystenlive&Contentid=1000000002000019789&mos=jbjhhzstsl&livemode=1&version=1.0&owaccmark=1000000002000019789&owchid=ystenlive&owsid=5070431579531812673&AuthInfo=2TOfGIahP4HrGWrHbpJXVDOD3a2KOxiKxQ3OD0iK1ACjKNizoRlMOkuvsTe1URoeoCCSRcfgLDg%2FiG7BT3%2BNlEIMer5%2BuzAqyByddFhoQVMoMRKerLoSM5qM9Az%2Bea7u
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-12
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226228/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-12
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225816/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-12
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/6417486185316863297/1.m3u8?stbId=005301FF001589101611549359B92F26&channel-id=shvoolive&Contentid=6417486185316863297&mos=jbjhhzstsl&livemode=1&proto=7&version=1.0&owaccmark=6417486185316863297&owchid=shvoolive&owsid=9153671579531878340&AuthInfo=2TOfGIahP4HrGWrHbpJXVPo6e%2BHF%2BrVo6xQQtyKDSurAX3PB%2FnVIr3xix20cl8xPdgGi1rpRM1DYWZnyEDgQSmvEeryqwyIWUPNfICRzKqmuU3YFsCIaBI4jHMacn12g
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-13
|
||||
http://223.110.241.130:6610/gitv/live1/G_CCTV-13-HQ/.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-13
|
||||
http://223.110.247.161:6610/gitv/live1/G_CCTV-13-HQ/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-14
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226229/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-14
|
||||
http://117.148.187.37/PLTV/88888888/224/3221226126/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-14
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/5554452538079056392/1.m3u8?stbId=005301FF001589101611549359B92F26&channel-id=shvoolive&Contentid=5554452538079056392&mos=jbjhhzstsl&livemode=1&proto=7&version=1.0&owaccmark=5554452538079056392&owchid=shvoolive&owsid=1386521579531934459&AuthInfo=2TOfGIahP4HrGWrHbpJXVPo6e%2BHF%2BrVo6xQQtyKDSuraKH2KM768ZNQcj3PAdtOdSSlj5RtbM3onnzvUC8Txgj%2BRYROAJoRcjfZ4YOPHclFuVVM2CqA1FqqLFpU5t7y%2B
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-15
|
||||
http://111.13.111.167/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226333/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-15
|
||||
http://ott.fj.chinamobile.com/PLTV/88888888/224/3221225818/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-15
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/1000000002000008163/1.m3u8?stbId=005301FF00158910000000212621B0EF&channel-id=ystenlive&Contentid=1000000002000008163&mos=jbjhhzstsl&livemode=1&version=1.0&owaccmark=1000000002000008163&owchid=ystenlive&owsid=8159411579531758075&AuthInfo=2TOfGIahP4HrGWrHbpJXVCfBjPWQNL5VnKaoeN%2FnWIWjKNizoRlMOkuvsTe1URoev67GfI1oIH4w2vVjbaVRzv3Enx1RBixVDhCnZtdnlMixFs9te0%2Bpvr2OpfN5d0VT
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-17
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226318/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-17
|
||||
http://ott.fj.chinamobile.com/PLTV/88888888/224/3221226990/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-17
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/1000000005000056836/1.m3u8?stbId=005301FF001589101611549359B9325E&channel-id=ystenlive&Contentid=1000000005000056836&mos=jbjhhzstsl&livemode=1&version=1.0&owaccmark=1000000005000056836&owchid=ystenlive&owsid=9164551579532003738&AuthInfo=2TOfGIahP4HrGWrHbpJXVGO0L8hMYc%2BQSE26r5BPa9COQyZOTKfJypXfULnzEX8ov4wHfTVtjr5%2BH1gBPIHFdZVbPTqDjqKmcARryOXhfL7mPOk1Na7QiYpdWHg0hz19
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-4K
|
||||
http://112.17.40.12/PLTV/88888888/224/3221226758/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-4K
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226758/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-4K
|
||||
http://39.134.176.148/PLTV/88888888/224/3221226758/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CCTV-4K
|
||||
http://117.148.187.83/PLTV/88888888/224/3221226758/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,纯享4K源码1
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226825/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,纯享4K源码2
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn/000000001000/1000000004000011651/index.m3u8?channel-id=ystenlive&Contentid=1000000004000011651&livemode=1&authCode=3a&stbId=8A3603DD004735200000049573C4E39B&version=1.0&owaccmark=1000000004000011651&owchid=ystenlive&owsid=6721581571186720581&AuthInfo=QejU%2ByFkapDLEHjn7Vi7Bsh98cz5RjIeOqbMi0Qqlame2O8Id%2BgCUUdS4cJUD1ieqKIx8wFJ0pPdF5P8MGRzRrjFLuuRCIZ2D2ha%2Fr9iiM%2BAnSOfyc4s5zWrjzUdrEbf
|
||||
#EXTINF:-1 logo="" group-title="" ,百事4K频道
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226718/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,凤凰资讯
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226491/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,凤凰资讯
|
||||
http://117.169.124.37:6610/ysten-businessmobile/live/fhzixun/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,凤凰中文
|
||||
http://117.169.124.37:6610/ysten-businessmobile/live/fhchinese/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,凤凰中文
|
||||
http://117.169.120.138:8080/live/fhchinese/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,北京卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226224/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,北京卫视
|
||||
http://111.40.205.87/PLTV/88888888/224/3221225728/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,天津卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226246/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,天津卫视
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226412/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,河北卫视超清1
|
||||
http://223.110.245.149/ott.js.chinamobile.com/PLTV/3/224/3221225840/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,河北卫视超清2
|
||||
http://223.110.247.161:6610/gitv/live1/G_HEBEI/G_HEBEI
|
||||
#EXTINF:-1 logo="" group-title="" ,东方卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226237/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,东方卫视
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/1000000001000005866/1.m3u8?stbId=005301FF001589101611549359B9656A&channel-id=ystenlive&Contentid=1000000001000005866&mos=jbjhhzstsl&livemode=1&version=1.0&owaccmark=1000000001000005866&owchid=ystenlive&owsid=6312751579529792174&AuthInfo=2TOfGIahP4HrGWrHbpJXVB51rvh1oS437liFJd26gOOu3lLj0NrV6tPDBIsVEpn3OZnoLrZwa8b70lofXkPptSAmb4xhM2tKBJ0VUyBQsWCEzNrIVXcTeS%2F12UFJevdi
|
||||
#EXTINF:-1 logo="" group-title="" ,湖南卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226241/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,湖南卫视
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226553/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,浙江卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226247/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,浙江卫视
|
||||
http://223.110.243.173/PLTV/3/224/3221227215/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,江苏卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226242/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,江苏卫视
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226414/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,东南卫视
|
||||
http://117.169.124.37:6610/ysten-businessmobile/live/dongnanstv/yst.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,东南卫视
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/1000000002000009263/1.m3u8?channel-id=ystenlive&Contentid=1000000002000009263&livemode=1&stbId=005203FF000360100001001A34C0CD33&userToken=bd8bb70bdb2b54bd84b587dffa024f7621vv&usergroup=g21077200000&version=1.0&owaccmark=1000000002000009263&owchid=ystenlive&owsid=1106497909461310172&AuthInfo=yOLXJswzZFfV3FvB8MhHuElKGJKLbU5H0jB3qAhfSE5oj7lZFbEKIj3xJcvQPkjhM1XYZKCRYYY%2ff447%2bzETLijqfFgMTSA9x9T2lf3pyhagZIF%2fdE1lc49i65lODYA%2f
|
||||
#EXTINF:-1 logo="" group-title="" ,山东卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226308/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,山东卫视
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/1000000001000012807/1.m3u8?channel-id=ystenlive&Contentid=1000000001000012807&livemode=1&stbId=005203FF000360100001001A34C0CD33&userToken=bd8bb70bdb2b54bd84b587dffa024f7621vv&usergroup=g21077200000&version=1.0&owaccmark=1000000001000012807&owchid=ystenlive&owsid=1106497909461291586&AuthInfo=yOLXJswzZFfV3FvB8MhHuElKGJKLbU5H0jB3qAhfSE7AORAoVDZDWbFnJ0sXJEaR3cBsIsjm7UHdGO3a4NjD1C4TiYtYt%2by66pvMI%2bkz57DAkgjzetftIzpJRR8RWa0K
|
||||
#EXTINF:-1 logo="" group-title="" ,湖北卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226310/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,湖北卫视
|
||||
http://223.110.243.171/PLTV/3/224/3221227211/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,安徽卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226223/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,安徽卫视
|
||||
http://223.110.247.161:6610/gitv/live1/G_ANHUI-CQ/G_ANHUI-CQ
|
||||
#EXTINF:-1 logo="" group-title="" ,广东卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226238/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,广东卫视
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226225/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,深圳卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226245/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,深圳卫视
|
||||
http://223.110.243.171/PLTV/3/224/3221227217/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,辽宁卫视
|
||||
http://ott.fj.chinamobile.com/PLTV/88888888/224/3221225947/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,辽宁卫视
|
||||
http://223.110.245.145/ott.js.chinamobile.com/PLTV/3/224/3221227410/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,龙江卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226239/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,龙江卫视
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226555/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,吉林卫视
|
||||
http://116.199.5.52:8114/00000000/index.m3u8?&Fsv_ctype=LIVES&Fsv_otype=1&FvSeid=5abd1660af1babb4&Fsv_filetype=1&Fsv_ctype=LIVES&Fsv_cid=0&Fsv_chan_hls_se_idx=25&Fsv_rate_id=0&Fsv_SV_PARAM1=0&Fsv_ShiftEnable=0&Fsv_ShiftTsp=0&Provider_id=&Pcontent_id=&Fsv_CMSID=&Fsv_otype=1
|
||||
#EXTINF:-1 logo="" group-title="" ,吉林卫视
|
||||
http://223.110.247.161:6610/gitv/live1/G_JILIN/G_JILIN
|
||||
#EXTINF:-1 logo="" group-title="" ,江西卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226243/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,江西卫视
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226557/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,四川卫视
|
||||
http://ott.fj.chinamobile.com/PLTV/88888888/224/3221227006/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,四川卫视
|
||||
http://223.110.247.161:6610/gitv/live1/SCWS/SCWS
|
||||
#EXTINF:-1 logo="" group-title="" ,重庆卫视
|
||||
http://ott.fj.chinamobile.com/PLTV/88888888/224/3221225949/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,重庆卫视
|
||||
http://ivi.bupt.edu.cn/hls/cqhd.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,厦门卫视
|
||||
http://ott.fj.chinamobile.com/PLTV/88888888/224/3221226781/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,厦门卫视
|
||||
http://223.110.247.161:6610/gitv/live1/G_XIAMEN/G_XIAMEN
|
||||
#EXTINF:-1 logo="" group-title="" ,河南卫视
|
||||
http://116.199.5.52:8114/00000000/index.m3u8?&Fsv_ctype=LIVES&Fsv_otype=1&FvSeid=5abd1660af1babb4&Fsv_filetype=1&Fsv_ctype=LIVES&Fsv_cid=0&Fsv_chan_hls_se_idx=19&Fsv_rate_id=0&Fsv_SV_PARAM1=0&Fsv_ShiftEnable=0&Fsv_ShiftTsp=0&Provider_id=&Pcontent_id=&Fsv_CMSID=&Fsv_otype=1
|
||||
#EXTINF:-1 logo="" group-title="" ,河南卫视超清2
|
||||
http://223.110.245.157/ott.js.chinamobile.com/PLTV/3/224/3221225815/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,贵州卫视
|
||||
http://116.199.5.52:8114/00000000/index.m3u8?&Fsv_ctype=LIVES&Fsv_otype=1&FvSeid=5abd1660af1babb4&Fsv_filetype=1&Fsv_ctype=LIVES&Fsv_cid=0&Fsv_chan_hls_se_idx=41&Fsv_rate_id=0&Fsv_SV_PARAM1=0&Fsv_ShiftEnable=0&Fsv_ShiftTsp=0&Provider_id=&Pcontent_id=&Fsv_CMSID=&Fsv_otype=1
|
||||
#EXTINF:-1 logo="" group-title="" ,贵州卫视超清2
|
||||
http://223.110.245.149/ott.js.chinamobile.com/PLTV/3/224/3221225787/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,海南卫视超清1
|
||||
http://hnhbxww.com/live.php?http://mlive1.91kds.cn/b9/hitv.m3u8?id=lywshd
|
||||
#EXTINF:-1 logo="" group-title="" ,海南卫视
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225855/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,甘肃卫视超清1
|
||||
http://116.199.5.52:8114/00000000/index.m3u8?&Fsv_ctype=LIVES&Fsv_otype=1&FvSeid=5abd1660af1babb4&Fsv_filetype=1&Fsv_ctype=LIVES&Fsv_cid=0&Fsv_chan_hls_se_idx=142&Fsv_rate_id=0&Fsv_SV_PARAM1=0&Fsv_ShiftEnable=0&Fsv_ShiftTsp=0&Provider_id=&Pcontent_id=&Fsv_CMSID=&Fsv_otype=1
|
||||
#EXTINF:-1 logo="" group-title="" ,甘肃卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225877/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,青海卫视超清1
|
||||
http://116.199.5.52:8114/00000000/index.m3u8?&Fsv_ctype=LIVES&Fsv_otype=1&FvSeid=5abd1660af1babb4&Fsv_filetype=1&Fsv_ctype=LIVES&Fsv_cid=0&Fsv_chan_hls_se_idx=206&Fsv_rate_id=0&Fsv_SV_PARAM1=0&Fsv_ShiftEnable=0&Fsv_ShiftTsp=0&Provider_id=&Pcontent_id=&Fsv_CMSID=&Fsv_otype=1
|
||||
#EXTINF:-1 logo="" group-title="" ,青海卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225893/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,云南卫视超清1
|
||||
http://223.110.245.159/ott.js.chinamobile.com/PLTV/3/224/3221225838/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,云南卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225902/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,陕西卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225896/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,陕西卫视
|
||||
http://223.110.247.161:6610/gitv/live1/G_SHANXI/G_SHANXI
|
||||
#EXTINF:-1 logo="" group-title="" ,宁夏卫视超清1
|
||||
http://223.110.245.151/ott.js.chinamobile.com/PLTV/3/224/3221225842/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,宁夏卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225892/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,内蒙卫视超清1
|
||||
http://223.110.245.161/ott.js.chinamobile.com/PLTV/3/224/3221225836/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,内蒙卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225891/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,西藏卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225900/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,西藏卫视
|
||||
http://223.110.247.161:6610/gitv/live1/G_XIZANG/G_XIZANG
|
||||
#EXTINF:-1 logo="" group-title="" ,山西卫视
|
||||
http://223.110.247.161:6610/gitv/live1/SXWS/SXWS
|
||||
#EXTINF:-1 logo="" group-title="" ,山西卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225895/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,广西卫视
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225836/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,广西卫视
|
||||
http://223.110.247.161:6610/gitv/live1/GXWS/GXWS
|
||||
#EXTINF:-1 logo="" group-title="" ,新疆卫视
|
||||
http://223.110.247.161:6610/gitv/live1/G_XINJIANG/G_XINJIANG
|
||||
#EXTINF:-1 logo="" group-title="" ,新疆卫视
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225901/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,南方卫视高清
|
||||
http://223.110.247.161:6610/gitv/live1/G_NANFANG/G_NANFANG
|
||||
#EXTINF:-1 logo="" group-title="" ,兵团卫视高清
|
||||
http://223.110.247.161:6610/gitv/live1/G_BINGTUAN/G_BINGTUAN
|
||||
#EXTINF:-1 logo="" group-title="" ,延边卫视高清
|
||||
http://223.110.247.161:6610/gitv/live1/G_YANBIAN/G_YANBIAN
|
||||
#EXTINF:-1 logo="" group-title="" ,农林卫视高清
|
||||
http://223.110.247.161:6610/gitv/live1/G_NONGLIN/G_NONGLIN
|
||||
#EXTINF:-1 logo="" group-title="" ,康巴卫视高清
|
||||
http://223.110.247.161:6610/gitv/live1/G_KANGBA/G_KANGBA
|
||||
#EXTINF:-1 logo="" group-title="" ,安多卫视高清
|
||||
http://223.110.247.161:6610/gitv/live1/G_ANDUO/G_ANDUO
|
||||
#EXTINF:-1 logo="" group-title="" ,高清影视1台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226736/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清影视2台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225881/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清影视3台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226708/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清影视4台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226712/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清影视5台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225893/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清影视6台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226692/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清影视7台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226754/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清影视8台
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226608/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清影视9台
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226606/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清影视10台
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226360/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清动画11台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226732/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清动画12台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226741/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清动漫13台
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226743/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,高清影视14台
|
||||
http://ivi.bupt.edu.cn/hls/chchd.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,东方影视高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/5000000010000032212/index.m3u8?channel-id=bestzb&Contentid=5000000010000032212&livemode=1&authCode=3a&stbId=005301FF00158910000000212621B1F2&version=1.0&owaccmark=5000000010000032212&owchid=bestzb&owsid=2093431579530013084&AuthInfo=2TOfGIahP4HrGWrHbpJXVC70y2PVjmhUubUspsIcpqbPt3njBIzWc%2Fam35vTsnvWPWGkzpZH3A16MnnNHKq3GxKdDnIii87ggbdt%2FwooaevY4cuAtO0vMGGwXuHO%2Biok
|
||||
#EXTINF:-1 logo="" group-title="" ,纪实人文高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/1000000001000010606/1.m3u8?stbId=005301FF001589101611549359B92C46&channel-id=ystenlive&Contentid=1000000001000010606&mos=jbjhhzstsl&livemode=1&version=1.0&owaccmark=1000000001000010606&owchid=ystenlive&owsid=5474771579530255373&AuthInfo=2TOfGIahP4HrGWrHbpJXVOhAZZf%2B%2BRvFCOimr7PCGr%2Bu3lLj0NrV6tPDBIsVEpn3QZdNn969VxaznG4qedKIxPvWqo6nkyvxK0SnJLSEP%2FF4Wxm5gCchMH9VO%2BhWyofF
|
||||
#EXTINF:-1 logo="" group-title="" ,上海外语高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/5000000010000030951/index.m3u8?channel-id=bestzb&Contentid=5000000010000030951&livemode=1&authCode=3a&stbId=005303FF0002189018212C1875540E0E&version=1.0&owaccmark=5000000010000030951&owchid=bestzb&owsid=5275181579530295306&AuthInfo=%2FcylGCbqLdFJuk2wbal8%2B%2FwyUq8npJ58oVaJUzBhF9PPt3njBIzWc%2Fam35vTsnvW6JhDYuiodydLTeMKHTm0L2zYfQnHdO1Iw0VU34c0CqRBZ788c%2Fr%2FVjoxJ5D0QVcG
|
||||
#EXTINF:-1 logo="" group-title="" ,第一财经高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/5000000010000027146/index.m3u8?channel-id=bestzb&Contentid=5000000010000027146&livemode=1&authCode=3a&stbId=005301FF00158910000000212621B272&version=1.0&owaccmark=5000000010000027146&owchid=bestzb&owsid=2047321579530436324&AuthInfo=2TOfGIahP4HrGWrHbpJXVGQxu5HMK%2BIheH%2BppAJUFQfPt3njBIzWc%2Fam35vTsnvW%2Bh72VHwN1p1HFLVpAXsbYI0I2J%2FhJvUENkmrKWvJBWHflOM1WROOndOSHiRR8ilK
|
||||
#EXTINF:-1 logo="" group-title="" ,冬奥纪实高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/1000000001000001910/1.m3u8?stbId=005301FF001589101611549359B93B82&channel-id=ystenlive&Contentid=1000000001000001910&mos=jbjhhzstsl&livemode=1&version=1.0&owaccmark=1000000001000001910&owchid=ystenlive&owsid=6204131579532167784&AuthInfo=2TOfGIahP4HrGWrHbpJXVB3TJIR2vriLvDYSdNB63hOu3lLj0NrV6tPDBIsVEpn3tQTMvk8FXaCJplQYdE%2FaRS95e%2BAlAk4PMAmwzVuVNoUAyrBQjkJ2X3eTsBSYe8ta
|
||||
#EXTINF:-1 logo="" group-title="" ,北京纪实高清
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225944/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,五星体育高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/5000000010000017540/index.m3u8?channel-id=bestzb&Contentid=5000000010000017540&livemode=1&stbId=004003FF0017301364008422F151297C&userToken=22da83031e59d012e61af366ad30871e02vv&usergroup=g02020000000&version=1.0&owaccmark=5000000010000017540&owchid=bestzb&owsid=4493204831455228383&AuthInfo=N%2biD7%2bHgi9LcszGFRGa51uAqiHNpkS5d0%2fEIXqMyy8J6GNpZ%2bE47AWi696WsOzmj7u8gynrDaeemmd3KgHvW7jm8s%2fkPykV1GmMdpMkc7doBK82U9CVAXx34x1%2fYjl4A
|
||||
#EXTINF:-1 logo="" group-title="" ,生活时尚高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/8538616372715313491/index.m3u8?channel-id=bestzb&Contentid=8538616372715313491&livemode=1&authCode=3a&stbId=005301FF001589101611549359B95001&version=1.0&owaccmark=8538616372715313491&owchid=bestzb&owsid=9384351579529030195&AuthInfo=2TOfGIahP4HrGWrHbpJXVMf9GKsKSOxo3z9oMCSFNzfvIfeh1IeRuYy1UKStuEqgLEq69vAaIVm8yJ1Bv9Ubfc12nlc%2FSga%2FjQ8%2F3mwUrQxWfqFwePA0JQWqj9IZCH10
|
||||
#EXTINF:-1 logo="" group-title="" ,五星体育高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/4612233678249154892/index.m3u8?channel-id=bestzb&Contentid=4612233678249154892&livemode=1&authCode=3a&stbId=005301FF001589101611549359B95001&version=1.0&owaccmark=4612233678249154892&owchid=bestzb&owsid=1779721579529023740&AuthInfo=2TOfGIahP4HrGWrHbpJXVMf9GKsKSOxo3z9oMCSFNzd9hkuYOs2VB84It64D80NJi4eXOKW3GuNNz9Fm%2FKg8xywLT7mM729fPyVIkI9Esx1ZNxN%2F6BsKFZl0vwsL8fqK
|
||||
#EXTINF:-1 logo="" group-title="" ,上海都市高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/6789517052815334336/index.m3u8?channel-id=bestzb&Contentid=6789517052815334336&livemode=1&authCode=3a&stbId=005301FF001589101611549359B94488&version=1.0&owaccmark=6789517052815334336&owchid=bestzb&owsid=3529791579529328057&AuthInfo=2TOfGIahP4HrGWrHbpJXVG%2BEERpEQIU%2FdtpJfuYgRAZD6434P427oxBuLbFRCJn4JFqerLYeYbaWyhUzdTsyRsJkPPbC14Prjj67uIG3APHUBp7pkUo1m6jlajTP1QwT
|
||||
#EXTINF:-1 logo="" group-title="" ,风尚音乐高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/5529729098703832176/z.m3u8?authCode=07110409322147352675&stbId=005301FF001589101611549359B92801&Contentid=5529729098703832176&mos=jbjhhzstsl&livemode=1&channel-id=wasusyt&version=1.0&owaccmark=5529729098703832176&owchid=wasusyt&owsid=3246571579530794909&AuthInfo=2TOfGIahP4HrGWrHbpJXVM8tIjUabzvkQw3IFgi64wePjBmkxCliyfsNixolB3vk0fJDbsUHwM4ZMkLD2%2FuFtJVT%2FBKMSil0ujuXkiQNzBbZ5U6pNSIVxD4YjUWtTd0X
|
||||
#EXTINF:-1 logo="" group-title="" ,精品剧场高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/8230197131234717902/z.m3u8?authCode=07110409322147352675&stbId=005303FF000218901813C88F26C4CD9A&Contentid=8230197131234717902&mos=jbjhhzstsl&livemode=1&channel-id=wasusyt&version=1.0&owaccmark=8230197131234717902&owchid=wasusyt&owsid=7188071579532237669&AuthInfo=%2FcylGCbqLdFJuk2wbal8%2B0%2FXYYDGLpWdBEstTIR1PqI%2FOctjqHm7uarF9hdI%2FegylabK%2B2Kjwr6YmfYB%2B0U4%2FVMlD9%2BUH6H5BTAiFyR%2BGJWsoX2Ruwovu0ZMFHxX6702
|
||||
#EXTINF:-1 logo="" group-title="" ,亚洲影院高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/5841816227539527643/z.m3u8?authCode=07110409322147352675&stbId=005301FF001589101611549359B93B82&Contentid=5841816227539527643&mos=jbjhhzstsl&livemode=1&channel-id=wasusyt&version=1.0&owaccmark=5841816227539527643&owchid=wasusyt&owsid=1431411579532174401&AuthInfo=2TOfGIahP4HrGWrHbpJXVB3TJIR2vriLvDYSdNB63hPyA9qk2%2BTKLoJATlqPnb0MXm7l%2FiHeo2whk7VLomWH7w5GNiHxzOX6JECr7x0TLTmTY895HMYgWz4jiaElB1nN
|
||||
#EXTINF:-1 logo="" group-title="" ,上海都市高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/6789517052815334336/index.m3u8?channel-id=bestzb&Contentid=6789517052815334336&livemode=1&stbId=004003FF0041848666008422F155939C&userToken=22da83031e59d012e61af366ad30871e02vv&usergroup=g02020000000&version=1.0&owaccmark=6789517052815334336&owchid=bestzb&owsid=4493204831455331826&AuthInfo=zI7Ouajzmvoo0pGb64%2fbgLE2RFvrprmD90MrWZVi%2bL3HPQnDcXoFLI6SzbzVwjU3sNLudmh14A4CtBNHjWANkrrgGz1D3dYfcKudsIt%2bpr%2fjXiUqpuQHmAckVE8okPuA
|
||||
#EXTINF:-1 logo="" group-title="" ,上海ICS高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/6032059665143203976/index.m3u8?channel-id=bestzb&Contentid=6032059665143203976&livemode=1&authCode=3a&stbId=8A3603DD004735200000049573C4E39B&version=1.0&owaccmark=6032059665143203976&owchid=bestzb&owsid=8862091567733940095&AuthInfo=QejU%2ByFkapDLEHjn7Vi7Bsh98cz5RjIeOqbMi0QqlalAzdP65EW1KAjwws9eqr8onRppCkq5lhXK46o%2BFK3dV%2BCK3fxe9S11%2B88%2FynrqkhlXX%2BzVbd%2F5J%2FreUEsqODX5
|
||||
#EXTINF:-1 logo="" group-title="" ,生活时尚高清
|
||||
http://121.18.168.149/cache.ott.ystenlive.itv.cmvideo.cn:80/000000001000/8538616372715313491/index.m3u8?channel-id=bestzb&Contentid=8538616372715313491&livemode=1&authCode=3a&stbId=8A3603DD004735200000049573C4E39B&version=1.0&owaccmark=8538616372715313491&owchid=bestzb&owsid=5457861567734659356&AuthInfo=QejU%2ByFkapDLEHjn7Vi7Bsh98cz5RjIeOqbMi0QqlakS%2FOYtRGR5wcGJDIS9OeTlipH2OO8alDz%2F1TUrW3QAaMFdRScr5Z2333r7naICD73KmBnoU9%2B3A5Ot%2BJeysO4p
|
||||
#EXTINF:-1 logo="" group-title="" ,峨眉电影高清
|
||||
http://scgctvshow.sctv.com/hdlive/emei/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,欢笑剧场高清
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226729/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,纪实频道高清
|
||||
http://112.50.243.8/PLTV/88888888/224/3221225946/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,极速汽车高清
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226140/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,动漫秀场高清
|
||||
http://112.50.243.8/PLTV/88888888/224/3221226141/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,黑莓动画高清
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225914/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,黑莓电竞高清
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225931/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,黑莓电影高清
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225927/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,求索纪录
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226610/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,求索科学
|
||||
http://125.210.152.18:9090/live/QSKX_1200.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,求索动物
|
||||
http://125.210.152.18:9090/live/QSDW_1200.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,求索生活
|
||||
http://125.210.152.18:9090/live/QSSH_1200.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,日本天気预报
|
||||
http://movie.mcas.jp/mcas/wn1_2/master.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中国教育1台
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225905/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中国教育2台
|
||||
http://cctvalih5ca.v.myalicdn.com/cstv/cetv2_2/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中国教育3台
|
||||
http://cctvalih5ca.v.myalicdn.com/cstv/cetv3_2/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中国教育4台
|
||||
http://cctvalih5ca.v.myalicdn.com/cstv/cetv4_2/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,山东教育
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225908/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,奥林匹克高清
|
||||
http://ott-live.olympicchannel.com/out/u/OC1_2.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,奥铃匹克高清
|
||||
http://ott-live.olympicchannel.com/out/u/OC1_1.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,超级电影
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226233/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,超级综艺
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226231/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,超级体育
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226232/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,超级剧集
|
||||
http://111.13.111.167/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225864/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中国功夫
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226298/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,金牌综艺
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226296/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,农业致富
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226304/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,潮妈辣婆
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226286/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,炫舞未来
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226248/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,明星大片
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226295/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,自由搏击
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226297/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,海外综合
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226302/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,惊梀悬疑
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226294/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱情喜剧
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226299/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,精品记录
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226293/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,精品体育
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226328/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,精品大剧
|
||||
http://111.13.111.167/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226331/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,古装剧场
|
||||
http://111.13.111.167/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226323/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,军旅剧场
|
||||
http://111.13.111.167/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226324/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,军事评论
|
||||
http://111.13.111.167/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226326/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,健康有约
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225919/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,家庭剧场
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225918/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,动作电影
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221226288/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱电竞
|
||||
http://101.71.255.229:6610/zjhs/2/10110/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱动漫
|
||||
http://101.71.255.229:6610/zjhs/2/10107/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱都市
|
||||
http://101.71.255.229:6610/zjhs/2/10111/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱江湖
|
||||
http://101.71.255.229:6610/zjhs/2/10114/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱解密
|
||||
http://101.71.255.229:6610/zjhs/2/10109/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱经典
|
||||
http://101.71.255.229:6610/zjhs/2/10106/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱军武
|
||||
http://101.71.255.229:6610/zjhs/2/10119/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱科幻
|
||||
http://101.71.255.229:6610/zjhs/2/10113/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱历史
|
||||
http://101.71.255.229:6610/zjhs/2/10120/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱美食
|
||||
http://101.71.255.229:6610/zjhs/2/10108/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱奇谈
|
||||
http://101.71.255.229:6610/zjhs/2/10103/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱时尚
|
||||
http://101.71.255.229:6610/zjhs/2/10118/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱世界
|
||||
http://101.71.255.229:6610/zjhs/2/10121/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱玩具
|
||||
http://101.71.255.229:6610/zjhs/2/10117/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱喜剧
|
||||
http://101.71.255.229:6610/zjhs/2/10105/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱悬疑
|
||||
http://101.71.255.229:6610/zjhs/2/10104/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱幼教
|
||||
http://101.71.255.229:6610/zjhs/2/10112/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱院线
|
||||
http://101.71.255.229:6610/zjhs/2/10116/index.m3u8?virtualDomain=zjhs.live_hls.zte.com
|
||||
#EXTINF:-1 logo="" group-title="" ,爱青春
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230130/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱家庭
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230118/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱探索
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230112/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱科学
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230106/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱猎奇
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230097/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱谍战
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230092/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱娱乐
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230077/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱旅行
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230052/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱怀旧
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230049/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱体育
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230034/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱赛车
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230032/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,爱浪漫
|
||||
http://112.17.40.140/hwltc.tv.cdn.zj.chinamobile.com/PLTV/88888888/224/3221230005/index.m3u8?fmt=ts2hls
|
||||
#EXTINF:-1 logo="" group-title="" ,票房大片
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c16_lb_heibangdianying_1080p_t10/c16_lb_heibangdianying_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,惊悚午夜
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c16_lb_jingnawuyechang_1080p_t10/c16_lb_jingnawuyechang_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,动画电影
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c16_lb_donghuadianying_1080p_t10/c16_lb_donghuadianying_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,怀旧剧场
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c16_lb_huaijiujuchang_1080p_t10/c16_lb_huaijiujuchang_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,温情影院
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c15_lb_chenglong_1080p_t10/c15_lb_chenglong_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,周末影院
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c16_lb_fengxiaogang_1080p_t10/c16_lb_fengxiaogang_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,经典重温
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c16_lb_jingdianjuchang_1080p_t10/c16_lb_jingdianjuchang_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,谍战剧场
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c16_lb_diezhanjuchang_1080p_t10/c16_lb_diezhanjuchang_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,军旅剧场
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c16_lb_junlvjuchang_1080p_t10/c16_lb_junlvjuchang_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,青春剧场
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c15_lb_weizhangzhe_1080p_t10/c15_lb_weizhangzhe_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,抗战剧场
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c15_lb_kangzhanjuchang_1080p_t10/c15_lb_kangzhanjuchang_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,侦探柯南
|
||||
http://jvc.flashapp.cn/baiducdnct.inter.iqiyi.com/tslive/c20_lb_mingzhentankenan_720p_t10/c20_lb_mingzhentankenan_720p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,喜羊灰狼
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c15_lb_xiyangyang_1080p_t10/c15_lb_xiyangyang_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,儿子爸爸
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c16_lb_datouerzi_1080p_t10/c16_lb_datouerzi_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,儿歌大全
|
||||
http://101.72.196.41/r/baiducdnct.inter.iqiyi.com/tslive/c15_lb_ergedaquan_1080p_t10/c15_lb_ergedaquan_1080p_t10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,北京少儿
|
||||
http://ivi.bupt.edu.cn/hls/btv10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,动漫电影
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226178/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,云南少儿
|
||||
http://edge2.yntv.cn/channels/yntv/ynse/flv:sd/live
|
||||
#EXTINF:-1 logo="" group-title="" ,重庆少儿
|
||||
http://219.153.252.50/PLTV/88888888/224/3221225646/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,嘉佳卡通
|
||||
http://112.17.40.140/PLTV/88888888/224/3221226461/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,金鹰卡通
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225906/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,哈哈卡通
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225909/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,优漫卡通
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225910/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,卡酷少儿
|
||||
http://111.13.111.242/otttv.bj.chinamobile.com/PLTV/88888888/224/3221225907/1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,企鹅辅导一年级
|
||||
http://live-edu.wasu.tv/live/QiEFuDao-lv1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,企鹅辅导二年级
|
||||
http://live-edu.wasu.tv/live/QiEFuDao-lv2.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,企鹅辅导三年级
|
||||
http://live-edu.wasu.tv/live/QiEFuDao-lv3.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,企鹅辅导四年级
|
||||
http://live-edu.wasu.tv/live/QiEFuDao-lv4.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,企鹅辅导五年级
|
||||
http://live-edu.wasu.tv/live/QiEFuDao-lv5.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,企鹅辅导六年级
|
||||
http://live-edu.wasu.tv/live/QiEFuDao-lv6.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,企鹅辅导初一
|
||||
http://live-edu.wasu.tv/live/QiEFuDao-lv7.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,企鹅辅导初二
|
||||
http://live-edu.wasu.tv/live/QiEFuDao-lv8.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,企鹅辅导初三
|
||||
http://live-edu.wasu.tv/live/QiEFuDao-lv9.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,企鹅辅导高一
|
||||
http://live-edu.wasu.tv/live/QiEFuDao-lv10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,八大精彩台
|
||||
http://hdtv.ub1818.com/ublive/index_1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,民视第一台
|
||||
http://hdtv.ub1818.com/ublive/index_2.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,民视台湾台
|
||||
http://hdtv.ub1818.com/ublive/index_3.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,民视HD
|
||||
http://hdtv.ub1818.com/ublive/index_4.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,TvbsHD
|
||||
http://hdtv.ub1818.com/ublive/index_5.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,非凡新闻HD
|
||||
http://hdtv.ub1818.com/ublive/index_8.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中视新闻HD
|
||||
http://hdtv.ub1818.com/ublive/index_9.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,华视新闻资讯HD
|
||||
http://hdtv.ub1818.com/ublive/index_10.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,FTV综艺
|
||||
http://hdtv.ub1818.com/ublive/index_11.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,八大综合台
|
||||
http://hdtv.ub1818.com/ublive/index_12.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,ELTA娱乐
|
||||
http://hdtv.ub1818.com/ublive/index_13.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,亮社
|
||||
http://hdtv.ub1818.com/ublive/index_14.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,华视CTS
|
||||
http://hdtv.ub1818.com/ublive/index_15.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,公视戏剧
|
||||
http://hdtv.ub1818.com/ublive/index_16.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,动漫
|
||||
http://hdtv.ub1818.com/ublive/index_17.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,靖洋卡通台
|
||||
http://hdtv.ub1818.com/ublive/index_18.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,靖天综合台
|
||||
http://hdtv.ub1818.com/ublive/index_19.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,靖天日本台
|
||||
http://hdtv.ub1818.com/ublive/index_20.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,靖天卡通台
|
||||
http://hdtv.ub1818.com/ublive/index_21.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,靖天戏剧台
|
||||
http://hdtv.ub1818.com/ublive/index_22.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,靖天电影台
|
||||
http://hdtv.ub1818.com/ublive/index_23.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,靖天音乐台
|
||||
http://hdtv.ub1818.com/ublive/index_24.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,靖天国际台
|
||||
http://hdtv.ub1818.com/ublive/index_25.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,靖天映画
|
||||
http://hdtv.ub1818.com/ublive/index_26.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,台湾采昌
|
||||
http://hdtv.ub1818.com/ublive/index_27.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,台湾影迷电影
|
||||
http://hdtv.ub1818.com/ublive/index_28.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,台湾CNEX
|
||||
http://hdtv.ub1818.com/ublive/index_29.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,台湾AMC电影
|
||||
http://hdtv.ub1818.com/ublive/index_30.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,靖天资讯台
|
||||
http://hdtv.ub1818.com/ublive/index_31.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,靖天欢乐台
|
||||
http://hdtv.ub1818.com/ublive/index_32.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,靖洋戏剧台
|
||||
http://hdtv.ub1818.com/ublive/index_33.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,台湾音乐
|
||||
http://hdtv.ub1818.com/ublive/index_34.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,韩国娱乐台
|
||||
http://hdtv.ub1818.com/ublive/index_35.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,旅游频道
|
||||
http://hdtv.ub1818.com/ublive/index_36.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,户外频道
|
||||
http://hdtv.ub1818.com/ublive/index_37.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,台视财经HD
|
||||
http://hdtv.ub1818.com/ublive/index_38.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,TRACE体育
|
||||
http://hdtv.ub1818.com/ublive/index_39.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,TVB明珠
|
||||
http://116.199.5.52:8114/00000000/index.m3u8?&Fsv_ctype=LIVES&Fsv_otype=1&FvSeid=5abd1660af1babb4&Pcontent_id=&Provider_id=&Fsv_chan_hls_se_idx=12
|
||||
#EXTINF:-1 logo="" group-title="" ,香港卫视
|
||||
http://zhibo.hkstv.tv/livestream/mutfysrq.flv
|
||||
#EXTINF:-1 logo="" group-title="" ,翡翠明珠
|
||||
http://116.199.5.52:8114/00000000/index.m3u8?&Fsv_ctype=LIVES&Fsv_otype=1&FvSeid=5abd1660af1babb4&Fsv_filetype=1&Fsv_ctype=LIVES&Fsv_cid=0&Fsv_chan_hls_se_idx=12&Fsv_rate_id=0&Fsv_SV_PARAM1=0&Fsv_ShiftEnable=0&Fsv_ShiftTsp=0&Provider_id=&Pcontent_id=&Fsv_CMSID=&Fsv_otype=1
|
||||
#EXTINF:-1 logo="" group-title="" ,翡翠综合
|
||||
http://116.199.5.52:8114/00000000/index.m3u8?&Fsv_ctype=LIVES&Fsv_otype=1&FvSeid=5abd1660af1babb4&Fsv_filetype=1&Fsv_ctype=LIVES&Fsv_cid=0&Fsv_chan_hls_se_idx=188&Fsv_rate_id=0&Fsv_SV_PARAM1=0&Fsv_ShiftEnable=0&Fsv_ShiftTsp=0&Provider_id=&Pcontent_id=&Fsv&_res_tag_=video
|
||||
#EXTINF:-1 logo="" group-title="" ,耀才财经
|
||||
http://202.69.67.66:443/webcast/bshdlive-mobile/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,亚旅卫视
|
||||
http://hls.jingchangkan.tv/jingchangkan/156722438_0HaM/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,赛马频道
|
||||
http://tvbilive11-i.akamaihd.net/hls/live/494672/CH88/CH88-01.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,東森新聞
|
||||
http://104.250.154.42:8080/ZZ_dongsenxinwen/ZZ_dongsenxinwen.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,東森電影
|
||||
http://104.250.154.42:8080/ZZ_dongsendianying/ZZ_dongsendianying.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,東森洋片
|
||||
http://192.154.103.75:8080/ZZ_dongsenyangpian/ZZ_dongsenyangpian.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,東森洋片
|
||||
http://104.250.154.42:8080/ZZ_dongsenyangpian/ZZ_dongsenyangpian.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中天新闻
|
||||
http://104.250.154.42:8080/ZZ_zhongtiannews/ZZ_zhongtiannews.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中天综合
|
||||
http://104.250.154.42:8080/ZZ_zhongtianzonghe/ZZ_zhongtianzonghe.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中天綜合
|
||||
http://192.154.103.75:8080//ZZ_zhongtianzonghe/ZZ_zhongtianzonghe.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中天娱乐
|
||||
http://192.154.103.75:8080//ZZ_zhongtianyule/ZZ_zhongtianyule.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中天娱乐
|
||||
http://104.250.154.42:8080/ZZ_zhongtianyule/ZZ_zhongtianyule.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中視综合
|
||||
http://192.154.103.75:8080//ZZ_zhongshi/ZZ_zhongshi.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中视综合
|
||||
http://104.250.154.42:8080/ZZ_zhongshi/ZZ_zhongshi.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,华视综合
|
||||
http://104.250.154.42:8080/ZZ_huashi/ZZ_huashi.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,华视综合
|
||||
http://192.154.103.75:8080//ZZ_huashi/ZZ_huashi.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,年代新聞
|
||||
http://192.154.103.75:8080/ZZ_niandaixinwen/ZZ_niandianxinwen.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,年代新闻
|
||||
http://104.250.154.42:8080/ZZ_niandaixinwen/ZZ_niandianxinwen.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,八大綜合
|
||||
http://192.154.103.75:8080//ZZ_zhongtianyazhou/ZZ_zhongtianyazhou.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,八大综合
|
||||
http://104.250.154.42:8080/ZZ_zhongtianyazhou/ZZ_zhongtianyazhou.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,信吉电视
|
||||
http://220.130.241.203:1935/sjtv/livestream_360p/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,人間衛視
|
||||
http://54.64.23.79:1935/live/vod/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,唯心電視
|
||||
http://mobile.ccdntech.com/transcoder/_definst_/vod164_Live/live/chunklist_w1177047531.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,卫视卡视
|
||||
http://iliketot.dyndns.tv/c8233976dbba4a06a101780907447375.m3u8?&wmsAuthSign=c2VydmVyX3RpbWU9MTAvMjIvMjAxNyAxOjM2OjExIEFNJmhhc2hfdmFsdWU9T1lvZDZ5TjFaWk53M3J4OWZOTWtFUT09JnZhbGlkbWludXRlcz0yJmlkPW1jZ2x5bWFyfDc2MXxpcHR2aGVyb3wxNTA4NjM2MTcxfDIyMy4yMDUuMTIyLjE2Nw
|
||||
#EXTINF:-1 logo="" group-title="" ,国家地理
|
||||
http://104.250.154.42:8080/ZZ_hbo/ZZ_hbo.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,百事通台
|
||||
http://112.17.40.145/PLTV/88888888/224/3221226596/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,MTV音乐
|
||||
http://116.199.5.52:8114/00000000/index.m3u8?&Fsv_ctype=LIVES&Fsv_otype=1&FvSeid=5abd1660af1babb4&Fsv_filetype=1&Fsv_ctype=LIVES&Fsv_cid=0&Fsv_chan_hls_se_idx=202&Fsv_rate_id=0&Fsv_SV_PARAM1=0&Fsv_ShiftEnable=0&Fsv_ShiftTsp=0&Provider_id=&Pcontent_id=&Fsv_CMSID=&Fsv_otype=1
|
||||
#EXTINF:-1 logo="" group-title="" ,HBO2台
|
||||
http://161.0.157.5/PLTV/88888888/224/3221227026/03.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,动物星球
|
||||
http://104.250.154.42:8080/ZZ_dongwuxingqiu/ZZ_dongwuxingqiu.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,歐美影院
|
||||
http://101.71.255.229:6610/zjhs/2/10037/z.m3u8?ZTEUPSTREAM=1&IASHttpSessionId=SLB4328320190321203540013412&m3u8_level=2&ztecid=10037&virtualDomain=zjhs.live_hls.zte.com&ispcode=3&tid=Q894B3E8EEZ3T19UG09L8B03GSWB&ts=1553493266
|
||||
#EXTINF:-1 logo="" group-title="" ,亞洲影院
|
||||
http://101.71.255.229:6610/zjhs/2/10052/z.m3u8?ZTEUPSTREAM=1&IASHttpSessionId=SLB4328320190321203540013412&m3u8_level=2&ztecid=10052&virtualDomain=zjhs.live_hls.zte.com&ispcode=3&tid=C3V7K4ET1VFDUJY6C1IASRV55G66&ts=1553493153
|
||||
#EXTINF:-1 logo="" group-title="" ,华纳电视
|
||||
http://104.250.154.42:8080/ZZ_huanadianying/ZZ_huanadianying.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,福克斯动作
|
||||
http://104.250.154.42:8080/ZZ_foxaction/ZZ_foxaction.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,福克斯动作
|
||||
http://192.154.103.75:8080/ZZ_foxaction/ZZ_foxaction.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,大众影视
|
||||
http://39.134.52.206/wh7f454c46tw2522585283_-1736190513/hwottcdn.ln.chinamobile.com/PLTV/88888890/224/3221226752/index.m3u8?icpid=88888890&RTS=1575014274&from=1&ocs=2_39.134.52.206_80&hms_devid=835&vqe=3
|
||||
#EXTINF:-1 logo="" group-title="" ,点掌财经
|
||||
http://cclive2.aniu.tv/live/anzb.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,澳门卫视
|
||||
http://stream.mastvnet.com/MSTV/SD/live.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,澳亚卫视
|
||||
http://stream.mastvnet.com/MSTV/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,日本NHK华语
|
||||
https://nhkw-zh-hlscomp.akamaized.net/ixxemlzk1vqvy44o/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,日本NHK英语
|
||||
https://nhkwlive-ojp.akamaized.net/hls/live/2003459/nhkwlive-ojp/index_1M.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,日本Japan News 24
|
||||
http://www.news24.jp/livestream/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,日本JapanetChannelDX
|
||||
http://bcsecurelivehls-i.akamaihd.net/hls/live/265320/5043843989001/140130JTDX/index_1200.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,日本QVC
|
||||
http://cdn-live1.qvc.jp/iPhone/800/800.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,韩国EBS 第一频道
|
||||
http://ebsonairios.ebs.co.kr/groundwavetablet500k/tablet500k/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,韩国EBS 少儿频道
|
||||
http://ebsonairios.ebs.co.kr/ebsutablet500k/tablet500k/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,韩国KCTV
|
||||
http://119.77.96.184:1935/chn21/chn21/chunklist_w252131137.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,韩国UBC SBS
|
||||
http://59.25.202.81:1935/live/UBCstream/chunklist_w1495115977.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,朝鲜中央台
|
||||
http://119.77.96.184:1935/chn05/chn05/chunklist_w644291506.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,韩国KTV 韩国电视
|
||||
http://218.38.152.31:1935/klive/klive.stream/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,韩国EBS 儿童频道
|
||||
http://ebsonairios.ebs.co.kr/ebsutablet500k/_definst_/tablet500k/chunklist_w1965791004.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,韩国YTN 联合新闻
|
||||
http://ytnmmd.mmdlive.lldns.net/ytnmmd/9484b70302db4786886ae40308bf45a1/chunklist_b2592000.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,韩国阿里郎WORLDworld
|
||||
http://amdlive.ctnd.com.edgesuite.net/arirang_1ch/smil:arirang_1ch.smil/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,韩国阿里郎WORLD
|
||||
http://amdlive.ctnd.com.edgesuite.net/arirang_1ch/smil:arirang_1ch/master.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,韩国MBC MAX
|
||||
http://63.237.48.3/ios/MBC_MAX/MBC_MAX.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,KOREA YTN Science
|
||||
http://slive.sciencetv.kr:1935/science/yslive_20140419_1/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,Luxury World
|
||||
http://nano.teleservice.su:8080/hls/luxury.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,韩国BBS佛教广播
|
||||
http://bbstv.clouducs.com:1935/bbstv-live/livestream/chunklist_w1403706733.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CPAC
|
||||
http://bcoveliveios-i.akamaihd.net/hls/live/248519/1242843915001_1/master.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CGTN 记录频道
|
||||
http://live.cgtn.com/1000d/prog_index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,中国环球
|
||||
http://live.cgtn.com/1000/prog_index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,狗狗宠物
|
||||
http://video.blivenyc.com/broadcast/prod/2061/22/file-3192k.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,法国时尚
|
||||
http://lb.streaming.sk/fashiontv/stream/chunklist_w1702070444.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,亚洲新闻
|
||||
http://d2e1asnsl7br7b.cloudfront.net/7782e205e72f43aeb4a48ec97f66ebbe/index_4.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,朝阳频道
|
||||
http://d11h6a6nhl9kj9.cloudfront.net/hls/suriactv/master02.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,越南人民报
|
||||
http://27.118.16.98:1935/live/truyenhinhnhandan720/chunklist_w2006762604.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,越南人民报
|
||||
http://vietcago.net/vstv/thnd.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,印度音乐电视
|
||||
http://104.237.60.234/live/gabruutv.m3u8?dsjtv.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,法国中国环球
|
||||
http://live.cgtn.com/1000f/prog_index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,法国第五世界台
|
||||
http://v3plusinfo247hls-i.akamaihd.net/hls/live/218877-b/v3plusinfo247hls/v3plusinfo247hls_1_1.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,阿拉伯中国环球
|
||||
http://live.cgtn.com/1000a/prog_index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,俄罗斯中国环球
|
||||
http://live.cgtn.com/1000r/prog_index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,俄罗斯HD时尚频道
|
||||
http://95.67.47.115/hls/hdfashion_ua_hi/index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,乌克兰M2 音乐频道
|
||||
http://live.m2.tv/hls3/stream.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,西班牙中国环球
|
||||
http://livees.cgtn.com/1000e/prog_index.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,意大利Rai高清
|
||||
http://b2everyrai-lh.akamaihd.net/i/raigulp_1@66350/master.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,意大利Rai 少儿
|
||||
http://b2everyrai-lh.akamaihd.net/i/raiyoyo_1@191405/master.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,意大利Rai 电影
|
||||
http://b2everyrai-lh.akamaihd.net/i/raimovie_1@67348/master.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,意大利意大利电台
|
||||
http://radioitaliatv-lh.akamaihd.net/i/radioitaliatv_1@329645/index_720x480_av-p.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,意大利V2 音乐频道
|
||||
http://de1se01.v2beat.live/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,墨西哥墨西哥电视
|
||||
http://bcoveliveios-i.akamaihd.net/hls/live/201661/57828478001/milenio_center_512k@51752.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,音乐20TV
|
||||
http://m2otv-lh.akamaihd.net/i/m2oTv_1@186074/index_600_av-p.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,当红MTV
|
||||
http://unilivemtveu-lh.akamaihd.net/i/mtvno_1@346424/index_3500_av-b.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,WSVI-TV
|
||||
http://dcunilive30-lh.akamaihd.net/i/dclive_1@534251/master.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,酷酷频道
|
||||
http://edge1.tikilive.com:1935/unrestricted_tikilive/25947/amlst:NWKlw6jwyXpz/chunklist_w981409619_b1105254.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,红牛电视
|
||||
http://rbmn-live.akamaized.net/hls/live/590964/BoRB-AT/master_1660.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,NBC电视
|
||||
http://161.0.157.51/PLTV/88888888/224/3221227040/index.m3u8?fluxustv.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,Jewelry电视
|
||||
http://wowzaprod134-i.akamaihd.net/hls/live/577814/ccddaf02/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,Darcizzle电视
|
||||
http://30a-tv.com/darcizzle.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,CBS新闻
|
||||
http://cbsnewshd-lh.akamaihd.net/i/CBSNHD_7@199302/master.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,美国Deutsche Welle
|
||||
http://dwstream4-lh.akamaihd.net/i/dwstream4_live@131329/master.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,美国360 North
|
||||
http://wowzaprod3-i.akamaihd.net/hls/live/252236/2147483647_360north_247/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,美国Fox News Talk Radio
|
||||
http://fnurtmp-f.akamaihd.net/i/FNRADIO_1@92141/master.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,日本NHK台
|
||||
http://nhkwtvglobal-i.akamaihd.net/hls/live/263941/nhkwtvglobal/index_600.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,日本cgntv
|
||||
http://cgntv-glive.ofsdelivery.net/live/_definst_/cgntv_jp/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,日本映画
|
||||
http://192.240.127.34:1935/live/cs19.stream/playlist.m3u8
|
||||
#EXTINF:-1 logo="" group-title="" ,日本Japanet Channel DX
|
||||
http://bcsecurelivehls-i.akamaihd.net/hls/live/265320/5043843989001/140130JTDX/index_600.m3u8
|
||||
32
package.json
32
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "zy",
|
||||
"version": "1.2.1",
|
||||
"version": "2.5.7",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
@@ -17,24 +17,32 @@
|
||||
},
|
||||
"main": "background.js",
|
||||
"dependencies": {
|
||||
"axios": "^0.19.2",
|
||||
"axios": "^0.20.0",
|
||||
"cheerio": "^1.0.0-rc.3",
|
||||
"child_process": "^1.0.2",
|
||||
"core-js": "^3.6.5",
|
||||
"cors": "^2.8.5",
|
||||
"dexie": "^3.0.1",
|
||||
"dexie": "^3.0.2",
|
||||
"electron-localshortcut": "^3.2.1",
|
||||
"electron-updater": "^4.3.5",
|
||||
"element-ui": "^2.13.2",
|
||||
"express": "^4.17.1",
|
||||
"fast-xml-parser": "^3.17.4",
|
||||
"html2canvas": "^1.0.0-rc.5",
|
||||
"modern-normalize": "^0.6.0",
|
||||
"html2canvas": "^1.0.0-rc.7",
|
||||
"iptv-playlist-parser": "^0.5.0",
|
||||
"m3u": "0.0.2",
|
||||
"modern-normalize": "^1.0.0",
|
||||
"mousetrap": "^1.6.5",
|
||||
"qrcode.vue": "^1.7.0",
|
||||
"vue": "^2.6.11",
|
||||
"randomstring": "^1.1.5",
|
||||
"v-fit-columns": "^0.2.0",
|
||||
"vue": "^2.6.12",
|
||||
"vue-infinite-loading": "^2.4.5",
|
||||
"vue-waterfall-plugin": "^1.0.7",
|
||||
"vuex": "^3.4.0",
|
||||
"xgplayer": "^2.9.8",
|
||||
"xgplayer-hls.js": "^2.2.3"
|
||||
"vue-waterfall-plugin": "^1.1.0",
|
||||
"vuedraggable": "^2.24.2",
|
||||
"vuex": "^3.5.1",
|
||||
"xgplayer": "^2.13.0",
|
||||
"xgplayer-hls.js": "^2.2.5"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@vue/cli-plugin-babel": "~4.4.0",
|
||||
@@ -44,7 +52,7 @@
|
||||
"@vue/eslint-config-standard": "^5.1.2",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"babel-plugin-component": "^1.1.1",
|
||||
"electron": "^9.0.5",
|
||||
"electron": "^10.1.4",
|
||||
"electron-devtools-installer": "^3.1.0",
|
||||
"eslint": "^6.7.2",
|
||||
"eslint-plugin-import": "^2.20.2",
|
||||
@@ -55,6 +63,6 @@
|
||||
"sass": "^1.26.5",
|
||||
"sass-loader": "^8.0.2",
|
||||
"vue-cli-plugin-electron-builder": "2.0.0-rc.4",
|
||||
"vue-template-compiler": "^2.6.11"
|
||||
"vue-template-compiler": "^2.6.12"
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width,initial-scale=1.0">
|
||||
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
|
||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||
<title><%= htmlWebpackPlugin.options.title %></title>
|
||||
</head>
|
||||
<body>
|
||||
<noscript>
|
||||
|
||||
@@ -5,8 +5,11 @@
|
||||
<Frame />
|
||||
<Film v-show="view === 'Film'" />
|
||||
<Play v-show="view === 'Play'" />
|
||||
<IPTV v-show="view === 'IPTV'" />
|
||||
<Star v-show="view === 'Star'" />
|
||||
<History v-show="view === 'History'" />
|
||||
<Setting v-show="view === 'Setting'" />
|
||||
<EditSites v-if="view === 'EditSites'"/>
|
||||
</div>
|
||||
<transition name="slide">
|
||||
<Detail v-if="detail.show"/>
|
||||
@@ -37,6 +40,9 @@ export default {
|
||||
},
|
||||
setting () {
|
||||
return this.$store.getters.getSetting
|
||||
},
|
||||
editSites () {
|
||||
return this.$store.getters.getEditSites
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@@ -59,7 +65,7 @@ export default {
|
||||
@import './assets/scss/theme.scss';
|
||||
html, body, #app{
|
||||
height: 100%;
|
||||
border-radius: 6px;
|
||||
border-radius: 0px;
|
||||
}
|
||||
#app {
|
||||
font-family: 'Helvetica Neue', Helvetica, 'PingFang SC', 'Hiragino Sans GB', 'Microsoft YaHei', SimSun, sans-serif;
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 38 KiB |
BIN
src/assets/image/wepay-hunlongyu.png
Normal file
BIN
src/assets/image/wepay-hunlongyu.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 169 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 232 KiB |
BIN
src/assets/image/wepay_cuiocean.jpg
Normal file
BIN
src/assets/image/wepay_cuiocean.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 85 KiB |
@@ -78,16 +78,58 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.zy-input{
|
||||
position: relative;
|
||||
display: inline-block;
|
||||
white-space: nowrap;
|
||||
width: 200px;
|
||||
height: 30px;
|
||||
cursor: pointer;
|
||||
input{
|
||||
vertical-align: bottom;
|
||||
position: relative;
|
||||
border: none;
|
||||
width: 20px;
|
||||
height: 15px;
|
||||
background-color: #ffffff00;
|
||||
text-indent: 10px;
|
||||
}
|
||||
}
|
||||
.zy-highlighted{
|
||||
color: var(--highlight-color);
|
||||
}
|
||||
// table
|
||||
.zy-table{
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
height: 100%;
|
||||
font-size: 15px;
|
||||
.tHeader{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
height: 50px;
|
||||
min-height: 50px;
|
||||
width: 100%;
|
||||
border-bottom: 1px solid;
|
||||
.btn{
|
||||
user-select: none;
|
||||
margin-left: 15px;
|
||||
margin-right: 15px;
|
||||
cursor: pointer;
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
.tBody{
|
||||
flex: 1;
|
||||
border-bottom: 1px solid;
|
||||
overflow: auto;
|
||||
.el-table__row td{
|
||||
border: none;
|
||||
}
|
||||
.el-table::before{
|
||||
height: 0px;
|
||||
}
|
||||
ul{
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
@@ -102,45 +144,49 @@
|
||||
cursor: pointer;
|
||||
span{
|
||||
display: flex;
|
||||
width: 180px;
|
||||
font-size: 13px;
|
||||
height: 50px;
|
||||
line-height: 50px;
|
||||
overflow: hidden;
|
||||
margin-right: 5px;
|
||||
&.name{
|
||||
flex: 1;
|
||||
padding-left: 15px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
min-width: 100px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
&.note{
|
||||
width: 180px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
&.type{
|
||||
width: 120px;
|
||||
}
|
||||
&.last{
|
||||
width: 160px;
|
||||
width: 10%;
|
||||
}
|
||||
&.time{
|
||||
width: 60px;
|
||||
width: 10%;
|
||||
}
|
||||
&.from{
|
||||
width: 120px;
|
||||
&.last{
|
||||
width: 10%;
|
||||
}
|
||||
&.site{
|
||||
width: 10%;
|
||||
}
|
||||
&.note{
|
||||
width: 10%;
|
||||
}
|
||||
&.info{
|
||||
width: 10%;
|
||||
}
|
||||
&.operate{
|
||||
width: 170px;
|
||||
.btn{
|
||||
width: 40px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// scroll
|
||||
.zy-scroll{
|
||||
&::-webkit-scrollbar{
|
||||
width: 5px;
|
||||
width: 10px;
|
||||
height: 1px;
|
||||
}
|
||||
&::-webkit-scrollbar-thumb {
|
||||
@@ -153,6 +199,86 @@
|
||||
}
|
||||
}
|
||||
|
||||
// Page of list using el-table
|
||||
.listpage{
|
||||
position: absolute;
|
||||
left: 80px;
|
||||
right: 20px;
|
||||
top: 40px;
|
||||
bottom: 20px;
|
||||
width: calc(100% - 100px);
|
||||
height: calc(100% - 60px);
|
||||
border-radius: 5px;
|
||||
.listpage-content{
|
||||
height: 100%;
|
||||
position: relative;
|
||||
font-size: 1rem;
|
||||
.listpage-header{
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding-left: 50px;
|
||||
padding-right: 50px;
|
||||
.el-button{
|
||||
font-size: 1rem;
|
||||
border: none;
|
||||
&:hover{
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.is-loading:before {
|
||||
background-color: none !important;
|
||||
}
|
||||
.el-input{
|
||||
width: 200px;
|
||||
}
|
||||
}
|
||||
.listpage-body{
|
||||
height: calc(100% - 40px);
|
||||
overflow-y: auto;
|
||||
.el-table::before{
|
||||
height: 0px;
|
||||
}
|
||||
.el-table{
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
overflow-y: auto;
|
||||
font-size: 1rem;
|
||||
}
|
||||
.el-table__body-wrapper{
|
||||
&::-webkit-scrollbar{
|
||||
width: 10px;
|
||||
height: 1px;
|
||||
}
|
||||
&::-webkit-scrollbar-thumb {
|
||||
border-radius: 10px;
|
||||
position: absolute;
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
border-radius: 10px;
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
.el-input{
|
||||
width: 200px;
|
||||
}
|
||||
.el-table__body td,.el-table__body th{
|
||||
border-bottom: 1px solid;
|
||||
}
|
||||
.el-table--enable-row-hover .el-table__body tr:hover>td{
|
||||
transform: scale(1.02);
|
||||
}
|
||||
.el-table .highlight{
|
||||
color: var(--highlight-color) !important;
|
||||
}
|
||||
.el-button{
|
||||
font-size: 1rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// loading
|
||||
.zy-loading{
|
||||
width: 100%;
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
:root{
|
||||
// general
|
||||
--highlight-color: #38dd77;
|
||||
// light
|
||||
--l-c-0: #823aa0;
|
||||
--l-c-1: #823aa011;
|
||||
@@ -63,7 +65,7 @@
|
||||
--p-c-9: #f4f7f799;
|
||||
--p-fc-1: #ffffff;
|
||||
--p-fc-2: #FFFFF3;
|
||||
--p-fc-3: #f15c5c;
|
||||
--p-fc-3: #177ea7;
|
||||
--p-bgc-1: #ff8499;
|
||||
--p-bgc-2: #fea1b2;
|
||||
--p-bsc: 0 1px 3px #ef528533, 0 1px 2px #ef528544;
|
||||
|
||||
@@ -24,6 +24,8 @@
|
||||
}
|
||||
}
|
||||
.vs-input{
|
||||
color: var(--d-fc-1);
|
||||
background-color: var(--d-bgc-1);
|
||||
input{
|
||||
color: var(--d-fc-1);
|
||||
&::-webkit-input-placeholder{
|
||||
@@ -32,8 +34,27 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.zy-input{
|
||||
color: var(--d-fc-1);
|
||||
background-color: var(--d-bgc-1);
|
||||
input{
|
||||
color: var(--d-fc-1);
|
||||
}
|
||||
}
|
||||
.zy-checkbox{
|
||||
color: var(--d-fc-1);
|
||||
transition: all 0.3s cubic-bezier(.25,.8,.25,1);
|
||||
}
|
||||
.zy-table{
|
||||
color: var(--d-fc-2);
|
||||
.tHeader{
|
||||
border-bottom-color: var(--d-c-3);
|
||||
.btn{
|
||||
&:hover{
|
||||
color: var(--d-fc-3)
|
||||
}
|
||||
}
|
||||
}
|
||||
.tBody{
|
||||
border-bottom-color: var(--d-c-3);
|
||||
ul{
|
||||
@@ -41,7 +62,9 @@
|
||||
border-bottom-color: var(--d-c-2);
|
||||
transition: all 0.3s cubic-bezier(.25,.8,.25,1);
|
||||
&:hover{
|
||||
box-shadow: var(--d-bsc-hover);
|
||||
box-shadow: var(--d-bsc);
|
||||
background-color: var(--d-bgc-2);
|
||||
color: #fff;
|
||||
}
|
||||
span{
|
||||
&.btn:hover{
|
||||
@@ -101,6 +124,9 @@
|
||||
&.close{
|
||||
background-color: #ff5f56;
|
||||
}
|
||||
&.top{
|
||||
background-color: #f3bab7;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail{
|
||||
@@ -166,6 +192,11 @@
|
||||
box-shadow: var(--d-bsc);
|
||||
.title{
|
||||
color: var(--d-fc-1);
|
||||
.right {
|
||||
svg {
|
||||
fill: var(--d-fc-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.box{
|
||||
.more{
|
||||
@@ -189,6 +220,10 @@
|
||||
fill: var(--d-c-3);
|
||||
}
|
||||
}
|
||||
&.last-tip {
|
||||
color: var(--d-fc-1);
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,6 +253,9 @@
|
||||
background-color: var(--d-c-2);
|
||||
color: var(--d-fc-3);
|
||||
}
|
||||
&:hover{
|
||||
background-color: var(--d-c-3);
|
||||
}
|
||||
}
|
||||
}
|
||||
.list-history{
|
||||
@@ -263,7 +301,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.view, .shortcut, .site{
|
||||
.view, .search, .shortcut, .site{
|
||||
.title{
|
||||
color: var(--d-fc-1);
|
||||
}
|
||||
@@ -313,4 +351,76 @@
|
||||
background-color: var(--d-bgc-1);
|
||||
}
|
||||
}
|
||||
.history{
|
||||
background-color: var(--d-bgc-1);
|
||||
box-shadow: var(--d-bsc);
|
||||
}
|
||||
// Page of list using el-table
|
||||
.listpage{
|
||||
color: var(--d-fc-2);
|
||||
.listpage-content{
|
||||
.listpage-header{
|
||||
border-bottom-color: var(--d-c-3);
|
||||
.btn{
|
||||
&:hover{
|
||||
color: var(--d-fc-3)
|
||||
}
|
||||
}
|
||||
.el-button{
|
||||
background-color: var(--d-bgc-2);
|
||||
color: var(--d-fc-2);
|
||||
&:hover{
|
||||
color: var(--d-fc-3)
|
||||
}
|
||||
}
|
||||
.el-input{
|
||||
input{
|
||||
background-color: var(--d-bgc-1);
|
||||
border: 1px solid var(--d-bgc-1);
|
||||
color: var(--d-fc-2);
|
||||
}
|
||||
}
|
||||
}
|
||||
.listpage-body{
|
||||
/* 设置el-table的样式*/
|
||||
.el-table{
|
||||
color: var(--d-fc-1);
|
||||
background-color: var(--d-bgc-1);
|
||||
}
|
||||
.el-input{
|
||||
input{
|
||||
background-color: var(--d-bgc-2);
|
||||
border: 1px solid var(--d-bgc-2);
|
||||
color: var(--d-fc-1);
|
||||
}
|
||||
}
|
||||
.el-table__header th, .el-table__header tr, .el-table__body td,.el-table__body th{
|
||||
color: var(--d-fc-1);
|
||||
background-color: var(--d-bgc-1);
|
||||
border-bottom-color: var(--d-c-2);
|
||||
}
|
||||
.el-table__body-wrapper{
|
||||
&:hover{
|
||||
&::-webkit-scrollbar-thumb {
|
||||
box-shadow: var(--d-bsc-scroll);
|
||||
background: var(--d-c-5);
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
box-shadow: var(--d-bsc-scroll);
|
||||
background: var(--d-bgc-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.el-table--enable-row-hover .el-table__body tr:hover>td{
|
||||
background-color: var(--d-bgc-2);
|
||||
}
|
||||
.el-button{
|
||||
color: var(--d-fc-1);
|
||||
&:hover{
|
||||
color: var(--d-fc-3)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,8 +32,27 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.zy-input{
|
||||
color: var(--g-fc-1);
|
||||
background-color: var(--g-bgc-1);
|
||||
input{
|
||||
color: var(--g-fc-1);
|
||||
background-color: var(--g-bgc-1);
|
||||
}
|
||||
}
|
||||
.zy-checkbox{
|
||||
color: var(--g-fc-1);
|
||||
}
|
||||
.zy-table{
|
||||
color: var(--g-fc-2);
|
||||
.tHeader{
|
||||
border-bottom-color: var(--g-c-3);
|
||||
.btn{
|
||||
&:hover{
|
||||
color: var(--g-fc-3)
|
||||
}
|
||||
}
|
||||
}
|
||||
.tBody{
|
||||
border-bottom-color: var(--g-c-3);
|
||||
ul{
|
||||
@@ -101,6 +120,9 @@
|
||||
&.close{
|
||||
background-color: #ff5f56;
|
||||
}
|
||||
&.top{
|
||||
background-color: #f3bab7;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail{
|
||||
@@ -166,6 +188,11 @@
|
||||
box-shadow: var(--g-bsc);
|
||||
.title{
|
||||
color: var(--g-fc-1);
|
||||
.right {
|
||||
svg {
|
||||
fill: var(--g-fc-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.box{
|
||||
.more{
|
||||
@@ -189,6 +216,10 @@
|
||||
fill: var(--g-c-3);
|
||||
}
|
||||
}
|
||||
&.last-tip {
|
||||
color: var(--g-fc-1);
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,6 +249,9 @@
|
||||
background-color: var(--g-c-2);
|
||||
color: var(--g-fc-3);
|
||||
}
|
||||
&:hover{
|
||||
background-color: var(--g-c-3);
|
||||
}
|
||||
}
|
||||
}
|
||||
.list-history{
|
||||
@@ -263,7 +297,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.view, .shortcut, .site{
|
||||
.view, .search, .shortcut, .site{
|
||||
.title{
|
||||
color: var(--g-fc-1);
|
||||
}
|
||||
@@ -313,4 +347,76 @@
|
||||
background-color: var(--g-bgc-1);
|
||||
}
|
||||
}
|
||||
.history{
|
||||
background-color: var(--g-bgc-1);
|
||||
box-shadow: var(--g-bsc);
|
||||
}
|
||||
// Page of list using el-table
|
||||
.listpage{
|
||||
color: var(--g-fc-2);
|
||||
.listpage-content{
|
||||
.listpage-header{
|
||||
border-bottom-color: var(--g-c-3);
|
||||
.btn{
|
||||
&:hover{
|
||||
color: var(--g-fc-3)
|
||||
}
|
||||
}
|
||||
.el-button{
|
||||
background-color: var(--g-bgc-2);
|
||||
color: var(--g-fc-2);
|
||||
&:hover{
|
||||
color: var(--g-fc-3)
|
||||
}
|
||||
}
|
||||
.el-input{
|
||||
input{
|
||||
background-color: var(--g-bgc-1);
|
||||
border: 1px solid var(--g-bgc-1);
|
||||
color: var(--g-fc-2);
|
||||
}
|
||||
}
|
||||
}
|
||||
.listpage-body{
|
||||
/* 设置el-table的样式*/
|
||||
.el-table{
|
||||
color: var(--g-fc-1);
|
||||
background-color: var(--g-bgc-1);
|
||||
}
|
||||
.el-input{
|
||||
input{
|
||||
background-color: var(--g-bgc-2);
|
||||
border: 1px solid var(--g-bgc-2);
|
||||
color: var(--g-fc-1);
|
||||
}
|
||||
}
|
||||
.el-table__header th, .el-table__header tr, .el-table__body td,.el-table__body th{
|
||||
color: var(--g-fc-1);
|
||||
background-color: var(--g-bgc-1);
|
||||
border-bottom-color: var(--g-c-2);
|
||||
}
|
||||
.el-table__body-wrapper{
|
||||
&:hover{
|
||||
&::-webkit-scrollbar-thumb {
|
||||
box-shadow: var(--g-bsc-scroll);
|
||||
background: var(--g-c-5);
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
box-shadow: var(--g-bsc-scroll);
|
||||
background: var(--g-bgc-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.el-table--enable-row-hover .el-table__body tr:hover>td{
|
||||
background-color: var(--g-bgc-2);
|
||||
}
|
||||
.el-button{
|
||||
color: var(--g-fc-1);
|
||||
&:hover{
|
||||
color: var(--g-fc-3)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,8 +32,27 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.zy-input{
|
||||
color: var(--l-fc-1);
|
||||
background-color: var(--l-bgc-1);
|
||||
input{
|
||||
color: var(--l-fc-1);
|
||||
background-color: var(--l-bgc-1);
|
||||
}
|
||||
}
|
||||
.zy-checkbox{
|
||||
color: var(--l-fc-1);
|
||||
}
|
||||
.zy-table{
|
||||
color: var(--l-fc-2);
|
||||
.tHeader{
|
||||
border-bottom-color: var(--l-c-3);
|
||||
.btn{
|
||||
&:hover{
|
||||
color: var(--l-fc-3)
|
||||
}
|
||||
}
|
||||
}
|
||||
.tBody{
|
||||
border-bottom-color: var(--l-c-3);
|
||||
ul{
|
||||
@@ -101,6 +120,9 @@
|
||||
&.close{
|
||||
background-color: #ff5f56;
|
||||
}
|
||||
&.top{
|
||||
background-color: #f3bab7;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail{
|
||||
@@ -166,6 +188,11 @@
|
||||
box-shadow: var(--l-bsc);
|
||||
.title{
|
||||
color: var(--l-fc-1);
|
||||
.right {
|
||||
svg {
|
||||
fill: var(--l-fc-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.box{
|
||||
.more{
|
||||
@@ -189,6 +216,10 @@
|
||||
fill: var(--l-c-3);
|
||||
}
|
||||
}
|
||||
&.last-tip {
|
||||
color: var(--l-fc-1);
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,6 +249,9 @@
|
||||
background-color: var(--l-c-2);
|
||||
color: var(--l-fc-3);
|
||||
}
|
||||
&:hover{
|
||||
background-color: var(--l-c-3);
|
||||
}
|
||||
}
|
||||
}
|
||||
.list-history{
|
||||
@@ -263,7 +297,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.view, .shortcut, .site{
|
||||
.view, .search, .shortcut, .site{
|
||||
.title{
|
||||
color: var(--l-fc-1);
|
||||
}
|
||||
@@ -313,4 +347,76 @@
|
||||
background-color: var(--l-bgc-1);
|
||||
}
|
||||
}
|
||||
.history{
|
||||
background-color: var(--l-bgc-1);
|
||||
box-shadow: var(--l-bsc);
|
||||
}
|
||||
// Page of list using el-table
|
||||
.listpage{
|
||||
color: var(--l-fc-2);
|
||||
.listpage-content{
|
||||
.listpage-header{
|
||||
border-bottom-color: var(--l-c-3);
|
||||
.btn{
|
||||
&:hover{
|
||||
color: var(--l-fc-3)
|
||||
}
|
||||
}
|
||||
.el-button{
|
||||
background-color: var(--l-bgc-2);
|
||||
color: var(--l-fc-2);
|
||||
&:hover{
|
||||
color: var(--l-fc-3)
|
||||
}
|
||||
}
|
||||
.el-input{
|
||||
input{
|
||||
background-color: var(--l-bgc-1);
|
||||
border: 1px solid var(--l-bgc-1);
|
||||
color: var(--l-fc-2);
|
||||
}
|
||||
}
|
||||
}
|
||||
.listpage-body{
|
||||
/* 设置el-table的样式*/
|
||||
.el-table{
|
||||
color: var(--l-fc-1);
|
||||
background-color: var(--l-bgc-1);
|
||||
}
|
||||
.el-input{
|
||||
input{
|
||||
background-color: var(--l-bgc-2);
|
||||
border: 1px solid var(--l-bgc-2);
|
||||
color: var(--l-fc-1);
|
||||
}
|
||||
}
|
||||
.el-table__header th, .el-table__header tr, .el-table__body td,.el-table__body th{
|
||||
color: var(--l-fc-1);
|
||||
background-color: var(--l-bgc-1);
|
||||
border-bottom-color: var(--l-c-2);
|
||||
}
|
||||
.el-table__body-wrapper{
|
||||
&:hover{
|
||||
&::-webkit-scrollbar-thumb {
|
||||
box-shadow: var(--l-bsc-scroll);
|
||||
background: var(--l-c-5);
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
box-shadow: var(--l-bsc-scroll);
|
||||
background: var(--l-bgc-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.el-table--enable-row-hover .el-table__body tr:hover>td{
|
||||
background-color: var(--l-bgc-2);
|
||||
}
|
||||
.el-button{
|
||||
color: var(--l-fc-1);
|
||||
&:hover{
|
||||
color: var(--l-fc-3)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -32,8 +32,26 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.zy-input{
|
||||
color: var(--p-fc-1);
|
||||
background-color: var(--p-bgc-1);
|
||||
input{
|
||||
color: var(--p-fc-1);
|
||||
}
|
||||
}
|
||||
.zy-checkbox{
|
||||
color: var(--p-fc-1);
|
||||
}
|
||||
.zy-table{
|
||||
color: var(--p-fc-2);
|
||||
.tHeader{
|
||||
border-bottom-color: var(--p-c-3);
|
||||
.btn{
|
||||
&:hover{
|
||||
color: var(--p-fc-3)
|
||||
}
|
||||
}
|
||||
}
|
||||
.tBody{
|
||||
border-bottom-color: var(--p-c-3);
|
||||
ul{
|
||||
@@ -101,6 +119,9 @@
|
||||
&.close{
|
||||
background-color: #ff5f56;
|
||||
}
|
||||
&.top{
|
||||
background-color: #f3bab7;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail{
|
||||
@@ -166,6 +187,11 @@
|
||||
box-shadow: var(--p-bsc);
|
||||
.title{
|
||||
color: var(--p-fc-1);
|
||||
.right {
|
||||
svg {
|
||||
fill: var(--p-fc-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.box{
|
||||
.more{
|
||||
@@ -189,6 +215,10 @@
|
||||
fill: var(--p-c-3);
|
||||
}
|
||||
}
|
||||
&.last-tip {
|
||||
color: var(--p-fc-1);
|
||||
font-size: 14px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -218,6 +248,9 @@
|
||||
background-color: var(--p-c-2);
|
||||
color: var(--p-fc-3);
|
||||
}
|
||||
&:hover{
|
||||
background-color: var(--p-c-3);
|
||||
}
|
||||
}
|
||||
}
|
||||
.list-history{
|
||||
@@ -263,7 +296,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.view, .shortcut, .site{
|
||||
.view, .search, .shortcut, .site{
|
||||
.title{
|
||||
color: var(--p-fc-1);
|
||||
}
|
||||
@@ -313,4 +346,76 @@
|
||||
background-color: var(--p-bgc-1);
|
||||
}
|
||||
}
|
||||
.history{
|
||||
background-color: var(--p-bgc-1);
|
||||
box-shadow: var(--p-bsc);
|
||||
}
|
||||
// Page of list using el-table
|
||||
.listpage{
|
||||
color: var(--p-fc-2);
|
||||
.listpage-content{
|
||||
.listpage-header{
|
||||
border-bottom-color: var(--p-c-3);
|
||||
.btn{
|
||||
&:hover{
|
||||
color: var(--p-fc-3)
|
||||
}
|
||||
}
|
||||
.el-button{
|
||||
background-color: var(--p-bgc-2);
|
||||
color: var(--p-fc-2);
|
||||
&:hover{
|
||||
color: var(--p-fc-3)
|
||||
}
|
||||
}
|
||||
.el-input{
|
||||
input{
|
||||
background-color: var(--p-bgc-1);
|
||||
border: 1px solid var(--p-bgc-1);
|
||||
color: var(--p-fc-2);
|
||||
}
|
||||
}
|
||||
}
|
||||
.listpage-body{
|
||||
/* 设置el-table的样式*/
|
||||
.el-table{
|
||||
color: var(--p-fc-1);
|
||||
background-color: var(--p-bgc-1);
|
||||
}
|
||||
.el-input{
|
||||
input{
|
||||
background-color: var(--p-bgc-2);
|
||||
border: 1px solid var(--p-bgc-2);
|
||||
color: var(--p-fc-1);
|
||||
}
|
||||
}
|
||||
.el-table__header th, .el-table__header tr, .el-table__body td,.el-table__body th{
|
||||
color: var(--p-fc-1);
|
||||
background-color: var(--p-bgc-1);
|
||||
border-bottom-color: var(--p-c-2);
|
||||
}
|
||||
.el-table__body-wrapper{
|
||||
&:hover{
|
||||
&::-webkit-scrollbar-thumb {
|
||||
box-shadow: var(--p-bsc-scroll);
|
||||
background: var(--p-c-5);
|
||||
}
|
||||
&::-webkit-scrollbar-track {
|
||||
box-shadow: var(--p-bsc-scroll);
|
||||
background: var(--p-bgc-1);
|
||||
}
|
||||
}
|
||||
}
|
||||
.el-table--enable-row-hover .el-table__body tr:hover>td{
|
||||
background-color: var(--p-bgc-2);
|
||||
}
|
||||
.el-button{
|
||||
color: var(--p-fc-1);
|
||||
&:hover{
|
||||
color: var(--p-fc-3)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,8 +4,12 @@ import './lib/site/server'
|
||||
import { app, protocol, BrowserWindow, globalShortcut, ipcMain } from 'electron'
|
||||
import { createProtocol } from 'vue-cli-plugin-electron-builder/lib'
|
||||
import installExtension, { VUEJS_DEVTOOLS } from 'electron-devtools-installer'
|
||||
import { initUpdater } from './lib/update/update'
|
||||
const isDevelopment = process.env.NODE_ENV !== 'production'
|
||||
|
||||
app.commandLine.appendSwitch('disable-features', 'OutOfBlinkCors') // 允许跨域
|
||||
app.commandLine.appendSwitch('--ignore-certificate-errors', 'true') // 忽略证书相关错误
|
||||
|
||||
let win
|
||||
let mini
|
||||
|
||||
@@ -19,6 +23,7 @@ function createWindow () {
|
||||
resizable: true,
|
||||
webPreferences: {
|
||||
webSecurity: false,
|
||||
enableRemoteModule: true,
|
||||
nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION
|
||||
}
|
||||
})
|
||||
@@ -31,6 +36,8 @@ function createWindow () {
|
||||
win.loadURL('app://./index.html')
|
||||
}
|
||||
|
||||
initUpdater(win)
|
||||
|
||||
win.on('closed', () => {
|
||||
win = null
|
||||
})
|
||||
@@ -45,7 +52,9 @@ function createMini () {
|
||||
frame: false,
|
||||
resizable: true,
|
||||
webPreferences: {
|
||||
sandbox: false,
|
||||
webSecurity: false,
|
||||
enableRemoteModule: true,
|
||||
nodeIntegration: process.env.ELECTRON_NODE_INTEGRATION
|
||||
}
|
||||
})
|
||||
@@ -68,6 +77,7 @@ if (process.platform === 'darwin') {
|
||||
}
|
||||
if (process.platform === 'Linux') {
|
||||
app.disableHardwareAcceleration()
|
||||
app.commandLine.appendSwitch('--no-sandbox') // linux 关闭沙盒模式
|
||||
}
|
||||
app.allowRendererProcessReuse = true
|
||||
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
<div class="aside">
|
||||
<span :class="[view === 'Film' ? 'active ': ''] + 'zy-svg'" @click="changeView('Film')">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="apertureIconTitle">
|
||||
<title id="apertureIconTitle">view</title>
|
||||
<title id="apertureIconTitle">电影</title>
|
||||
<path d="M12 22C17.5228 22 22 17.5228 22 12C22 6.47715 17.5228 2 12 2C6.47715 2 2 6.47715 2 12C2 17.5228 6.47715 22 12 22Z"></path>
|
||||
<g stroke-linecap="round">
|
||||
<path d="M3 16H14.3164"></path>
|
||||
@@ -14,21 +14,35 @@
|
||||
</g>
|
||||
</svg>
|
||||
</span>
|
||||
<span :class="[view === 'IPTV' ? 'active ': ''] + 'zy-svg'" @click="changeView('IPTV')">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="tvIconTitle">
|
||||
<title id="tvIconTitle">电视直播</title>
|
||||
<polygon points="20 8 20 20 4 20 4 8"></polygon>
|
||||
<polyline stroke-linejoin="round" points="8 4 12 7.917 16 4"></polyline>
|
||||
</svg>
|
||||
</span>
|
||||
<span :class="[view === 'Play' ? 'active ': ''] + 'zy-svg'" @click="changeView('Play')">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="playIconTitle">
|
||||
<title id="playIconTitle">play</title>
|
||||
<title id="playIconTitle">播放</title>
|
||||
<path d="M20 12L5 21V3z"></path>
|
||||
</svg>
|
||||
</span>
|
||||
<span :class="[view === 'Star' ? 'active ': ''] + 'zy-svg'" @click="changeView('Star')">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="favouriteIconTitle">
|
||||
<title id="favouriteIconTitle">star</title>
|
||||
<title id="favouriteIconTitle">收藏</title>
|
||||
<path d="M12,21 L10.55,19.7051771 C5.4,15.1242507 2,12.1029973 2,8.39509537 C2,5.37384196 4.42,3 7.5,3 C9.24,3 10.91,3.79455041 12,5.05013624 C13.09,3.79455041 14.76,3 16.5,3 C19.58,3 22,5.37384196 22,8.39509537 C22,12.1029973 18.6,15.1242507 13.45,19.7149864 L12,21 Z"></path>
|
||||
</svg>
|
||||
</span>
|
||||
<span :class="[view === 'History' ? 'active ': ''] + 'zy-svg'" @click="changeView('History')">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="timeIconTitle">
|
||||
<title id="timeIconTitle">历史记录</title>
|
||||
<circle cx="12" cy="12" r="10"></circle>
|
||||
<polyline points="12 5 12 12 16 16"></polyline>
|
||||
</svg>
|
||||
</span>
|
||||
<span :class="[view === 'Setting' ? 'active ': ''] + 'zy-svg'" @click="changeView('Setting')">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="settingsIconTitle">
|
||||
<title id="settingsIconTitle">setting</title>
|
||||
<title id="settingsIconTitle">设置</title>
|
||||
<path d="M5.03506429,12.7050339 C5.01187484,12.4731696 5,12.2379716 5,12 C5,11.7620284 5.01187484,11.5268304 5.03506429,11.2949661 L3.20577137,9.23205081 L5.20577137,5.76794919 L7.9069713,6.32070904 C8.28729123,6.0461342 8.69629298,5.80882212 9.12862533,5.61412402 L10,3 L14,3 L14.8713747,5.61412402 C15.303707,5.80882212 15.7127088,6.0461342 16.0930287,6.32070904 L18.7942286,5.76794919 L20.7942286,9.23205081 L18.9649357,11.2949661 C18.9881252,11.5268304 19,11.7620284 19,12 C19,12.2379716 18.9881252,12.4731696 18.9649357,12.7050339 L20.7942286,14.7679492 L18.7942286,18.2320508 L16.0930287,17.679291 C15.7127088,17.9538658 15.303707,18.1911779 14.8713747,18.385876 L14,21 L10,21 L9.12862533,18.385876 C8.69629298,18.1911779 8.28729123,17.9538658 7.9069713,17.679291 L5.20577137,18.2320508 L3.20577137,14.7679492 L5.03506429,12.7050339 Z"></path>
|
||||
<circle cx="12" cy="12" r="1"></circle>
|
||||
</svg>
|
||||
@@ -47,12 +61,23 @@ export default {
|
||||
set (val) {
|
||||
this.SET_VIEW(val)
|
||||
}
|
||||
},
|
||||
detail: {
|
||||
get () {
|
||||
return this.$store.getters.getDetail
|
||||
},
|
||||
set (val) {
|
||||
this.SET_DETAIL(val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_VIEW']),
|
||||
...mapMutations(['SET_VIEW', 'SET_DETAIL']),
|
||||
changeView (e) {
|
||||
this.view = e
|
||||
this.detail = {
|
||||
show: false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,7 +4,14 @@
|
||||
<div class="detail-header">
|
||||
<span class="detail-title">详情</span>
|
||||
<span class="detail-close zy-svg" @click="close">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="closeIconTitle">
|
||||
<svg
|
||||
role="img"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
aria-labelledby="closeIconTitle"
|
||||
>
|
||||
<title id="closeIconTitle">关闭</title>
|
||||
<path d="M6.34314575 6.34314575L17.6568542 17.6568542M6.34314575 17.6568542L17.6568542 6.34314575"></path>
|
||||
</svg>
|
||||
@@ -25,6 +32,7 @@
|
||||
<div class="year" v-show="info.year">上映: {{info.year}}</div>
|
||||
<div class="last" v-show="info.last">更新: {{info.last}}</div>
|
||||
<div class="note" v-show="info.note">备注: {{info.note}}</div>
|
||||
<div class="rate" v-show="info.rate">豆瓣评分: {{info.rate}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="operate">
|
||||
@@ -32,8 +40,19 @@
|
||||
<span @click="starEvent">收藏</span>
|
||||
<span @click="downloadEvent">下载</span>
|
||||
<span @click="shareEvent">分享</span>
|
||||
<span @click="doubanLinkEvent">豆瓣</span>
|
||||
<span @click="togglePlayOnlineEvent">
|
||||
<input type="checkbox" v-model="playOnline"> 播放在线高清视频
|
||||
</span>
|
||||
<span>
|
||||
<select v-model="selectedOnlineSite" class="vs-options">
|
||||
<option disabled value="">Please select one</option>
|
||||
<option v-for="(i, j) in onlineSites" :key="j">{{i}}</option>
|
||||
</select>
|
||||
</span>
|
||||
</div>
|
||||
<div class="desc" v-show="info.des">{{info.des}}</div>
|
||||
<div
|
||||
class="desc" v-show="info.des">{{info.des}}</div>
|
||||
<div class="m3u8">
|
||||
<div class="box">
|
||||
<span v-for="(i, j) in m3u8List" :key="j" @click="playEvent(j)">{{i | ftName}}</span>
|
||||
@@ -49,6 +68,7 @@
|
||||
<script>
|
||||
import { mapMutations } from 'vuex'
|
||||
import zy from '../lib/site/tools'
|
||||
import onlineVideo from '../lib/site/onlineVideo'
|
||||
import { star, history } from '../lib/dexie'
|
||||
const { clipboard } = require('electron')
|
||||
export default {
|
||||
@@ -57,7 +77,10 @@ export default {
|
||||
return {
|
||||
loading: true,
|
||||
m3u8List: [],
|
||||
info: {}
|
||||
info: {},
|
||||
playOnline: false,
|
||||
selectedOnlineSite: '哔嘀',
|
||||
onlineSites: ['哔嘀', '素白白', '简影', '极品', '喜欢看', '1080影视']
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
@@ -118,42 +141,90 @@ export default {
|
||||
this.m3u8List = dd._t.split('#')
|
||||
}
|
||||
},
|
||||
playEvent (n) {
|
||||
history.find({ site: this.detail.key, ids: this.detail.info.id }).then(res => {
|
||||
if (res) {
|
||||
this.video = { key: res.site, info: { id: res.ids, name: res.name, index: n } }
|
||||
async playEvent (n) {
|
||||
if (!this.playOnline) {
|
||||
const db = await history.find({ site: this.detail.key, ids: this.detail.info.id })
|
||||
if (db) {
|
||||
this.video = { key: db.site, info: { id: db.ids, name: db.name, index: n, site: this.detail.site } }
|
||||
} else {
|
||||
this.video = { key: this.detail.key, info: { id: this.detail.info.id, name: this.detail.info.name, index: n } }
|
||||
this.video = { key: this.detail.key, info: { id: this.detail.info.id, name: this.detail.info.name, index: n, site: this.detail.site } }
|
||||
}
|
||||
})
|
||||
|
||||
this.view = 'Play'
|
||||
this.detail.show = false
|
||||
},
|
||||
starEvent () {
|
||||
star.find({ site: this.detail.key, ids: this.info.id }).then(res => {
|
||||
if (res) {
|
||||
this.$message.info('已存在')
|
||||
this.view = 'Play'
|
||||
this.detail.show = false
|
||||
} else {
|
||||
const db = await history.find({ site: this.detail.key, ids: this.detail.info.id })
|
||||
if (db) {
|
||||
db.index = n
|
||||
history.update(db.id, db)
|
||||
} else {
|
||||
const docs = {
|
||||
const doc = {
|
||||
site: this.detail.key,
|
||||
ids: this.info.id,
|
||||
name: this.info.name,
|
||||
type: this.info.type,
|
||||
year: this.info.year,
|
||||
last: this.info.last
|
||||
ids: this.detail.info.id,
|
||||
name: this.detail.info.name,
|
||||
type: this.detail.info.type,
|
||||
year: this.detail.info.year,
|
||||
index: n,
|
||||
time: ''
|
||||
}
|
||||
star.add(docs).then(res => {
|
||||
this.$message.success('收藏成功')
|
||||
})
|
||||
history.add(doc)
|
||||
}
|
||||
}).catch(() => {
|
||||
this.$message.warning('收藏失败')
|
||||
})
|
||||
onlineVideo.playVideoOnline(this.selectedOnlineSite, this.detail.info.name, n)
|
||||
}
|
||||
},
|
||||
async starEvent () {
|
||||
const db = await star.find({ key: this.detail.key, ids: this.info.id })
|
||||
if (db) {
|
||||
this.$message.info('该影片已被收藏')
|
||||
} else {
|
||||
const docs = {
|
||||
key: this.detail.key,
|
||||
ids: this.info.id,
|
||||
site: this.detail.site,
|
||||
name: this.info.name,
|
||||
type: this.info.type,
|
||||
year: this.info.year,
|
||||
note: this.info.note,
|
||||
last: this.info.last
|
||||
|
||||
}
|
||||
star.add(docs).then(res => {
|
||||
this.$message.success('收藏成功')
|
||||
})
|
||||
}
|
||||
},
|
||||
togglePlayOnlineEvent () {
|
||||
this.playOnline = !this.playOnline
|
||||
},
|
||||
playVideoOnline (videoName, videoIndex) {
|
||||
switch (this.selectedOnlineSite) {
|
||||
case '哔嘀':
|
||||
onlineVideo.playVideoOnBde4(videoName, videoIndex)
|
||||
break
|
||||
case '1080影视':
|
||||
onlineVideo.playVideoOnK1080(videoName, videoIndex)
|
||||
break
|
||||
case '素白白':
|
||||
onlineVideo.playVideoOnSubaibai(videoName, videoIndex)
|
||||
break
|
||||
case '哆咪动漫':
|
||||
onlineVideo.playVideoOndmdm2020(videoName, videoIndex)
|
||||
break
|
||||
case '樱花动漫':
|
||||
onlineVideo.playVideoOnYhdm(videoName, videoIndex)
|
||||
break
|
||||
case '简影':
|
||||
onlineVideo.playVideoOnSyrme(videoName, videoIndex)
|
||||
break
|
||||
case '极品':
|
||||
onlineVideo.playVideoOnJpysvip(videoName, videoIndex)
|
||||
break
|
||||
default:
|
||||
this.$message.console.error(`不支持该网站:${this.selectedOnlineSite}`)
|
||||
}
|
||||
},
|
||||
downloadEvent () {
|
||||
zy.download(this.detail.key, this.info.id).then(res => {
|
||||
if (res) {
|
||||
if (res && res.dl && res.dl.dd) {
|
||||
const text = res.dl.dd._t
|
||||
if (text) {
|
||||
const list = text.split('#')
|
||||
@@ -186,12 +257,72 @@ export default {
|
||||
info: this.detail.info
|
||||
}
|
||||
},
|
||||
doubanLinkEvent () {
|
||||
const open = require('open')
|
||||
const axios = require('axios')
|
||||
const cheerio = require('cheerio')
|
||||
const name = this.detail.info.name.trim()
|
||||
// 豆瓣搜索链接
|
||||
var doubanSearchLink = 'https://www.douban.com/search?q=' + name
|
||||
var link = doubanSearchLink
|
||||
axios.get(doubanSearchLink).then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
// 比较第一和第二豆瓣搜索结果, 如果名字相符, 就打开该链接,否则打开搜索页面
|
||||
var nameInDouban = $($('div.result')[0]).find('div>div>h3>a').first()
|
||||
if (name.replace(/\s/g, '') === nameInDouban.text().replace(/\s/g, '')) {
|
||||
link = nameInDouban.attr('href')
|
||||
} else {
|
||||
nameInDouban = $($('div.result')[1]).find('div>div>h3>a').first()
|
||||
if (name.replace(/\s/g, '') === nameInDouban.text().replace(/\s/g, '')) {
|
||||
link = nameInDouban.attr('href')
|
||||
}
|
||||
}
|
||||
open(link)
|
||||
})
|
||||
},
|
||||
getDoubanRate () {
|
||||
const axios = require('axios')
|
||||
const cheerio = require('cheerio')
|
||||
const name = this.detail.info.name.trim()
|
||||
// 豆瓣搜索链接
|
||||
var doubanSearchLink = 'https://www.douban.com/search?q=' + name
|
||||
axios.get(doubanSearchLink).then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
// 比较第一和第二给豆瓣搜索结果, 看名字是否相符
|
||||
var link = ''
|
||||
var nameInDouban = $($('div.result')[0]).find('div>div>h3>a').first()
|
||||
if (name.replace(/\s/g, '') === nameInDouban.text().replace(/\s/g, '')) {
|
||||
link = nameInDouban.attr('href')
|
||||
} else {
|
||||
nameInDouban = $($('div.result')[1]).find('div>div>h3>a').first()
|
||||
if (name.replace(/\s/g, '') === nameInDouban.text().replace(/\s/g, '')) {
|
||||
link = nameInDouban.attr('href')
|
||||
}
|
||||
}
|
||||
// 如果找到链接,就打开该链接获取评分
|
||||
if (link) {
|
||||
axios.get(link).then(response => {
|
||||
const parsedHtml = cheerio.load(response.data)
|
||||
var rating = parsedHtml('body').find('#interest_sectl').first().find('strong').first()
|
||||
if (rating.text()) {
|
||||
this.info.rate = rating.text()
|
||||
} else {
|
||||
this.info.rate = '暂无评分'
|
||||
}
|
||||
})
|
||||
} else {
|
||||
this.info.rate = '暂无评分'
|
||||
}
|
||||
})
|
||||
},
|
||||
getDetailInfo () {
|
||||
const id = this.detail.info.ids || this.detail.info.id
|
||||
zy.detail(this.detail.key, id).then(res => {
|
||||
if (res) {
|
||||
this.info = res
|
||||
this.$set(this.info, 'rate', '')
|
||||
this.m3u8Parse(res)
|
||||
this.getDoubanRate()
|
||||
this.loading = false
|
||||
}
|
||||
})
|
||||
@@ -203,35 +334,36 @@ export default {
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.detail{
|
||||
.detail {
|
||||
position: absolute;
|
||||
left: 0;
|
||||
left: 80px;
|
||||
right: 20px;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
width: calc(100% - 100px);
|
||||
height: calc(100% - 40px);
|
||||
z-index: 888;
|
||||
.detail-content{
|
||||
.detail-content {
|
||||
height: calc(100% - 10px);
|
||||
padding: 0 60px;
|
||||
position: relative;
|
||||
.detail-header{
|
||||
.detail-header {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
.detail-title{
|
||||
.detail-title {
|
||||
font-size: 16px;
|
||||
}
|
||||
.detail-close{
|
||||
.detail-close {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail-body{
|
||||
.detail-body {
|
||||
height: calc(100% - 50px);
|
||||
overflow-y: auto;
|
||||
.info{
|
||||
.info {
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
display: flex;
|
||||
@@ -242,42 +374,54 @@ export default {
|
||||
border-radius: 2px;
|
||||
margin-bottom: 10px;
|
||||
height: auto;
|
||||
.info-left{
|
||||
.info-left {
|
||||
width: 200px;
|
||||
height: 100%;
|
||||
img{
|
||||
img {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
.info-right{
|
||||
.info-right {
|
||||
flex: 1;
|
||||
margin-left: 20px;
|
||||
.name{
|
||||
.name {
|
||||
font-size: 20px;
|
||||
margin-bottom: 10px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.director, .actor, .type, .area, .lang, .year, .last, .note{
|
||||
.director,
|
||||
.actor,
|
||||
.type,
|
||||
.area,
|
||||
.lang,
|
||||
.year,
|
||||
.last,
|
||||
.note {
|
||||
font-size: 14px;
|
||||
line-height: 26px;
|
||||
}
|
||||
.rate {
|
||||
font-size: 16px;
|
||||
line-height: 26px;
|
||||
font-weight: bolder;
|
||||
}
|
||||
}
|
||||
}
|
||||
.operate{
|
||||
.operate {
|
||||
border: 1px solid;
|
||||
padding: 10px;
|
||||
width: 100%;
|
||||
margin-bottom: 10px;
|
||||
border-radius: 2px;
|
||||
span{
|
||||
span {
|
||||
margin-right: 20px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
user-select: none;
|
||||
}
|
||||
}
|
||||
.desc{
|
||||
.desc {
|
||||
border: 1px solid;
|
||||
padding: 10px;
|
||||
width: 100%;
|
||||
@@ -286,15 +430,15 @@ export default {
|
||||
font-size: 14px;
|
||||
line-height: 20px;
|
||||
}
|
||||
.m3u8{
|
||||
.m3u8 {
|
||||
border: 1px solid;
|
||||
padding: 10px 0 10px 10px;
|
||||
width: 100%;
|
||||
margin-bottom: 10px;
|
||||
border-radius: 2px;
|
||||
.box{
|
||||
.box {
|
||||
width: 100%;
|
||||
span{
|
||||
span {
|
||||
display: inline-block;
|
||||
font-size: 12px;
|
||||
border: 1px solid;
|
||||
@@ -306,7 +450,7 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail-mask{
|
||||
.detail-mask {
|
||||
position: absolute;
|
||||
top: 50px;
|
||||
left: 0;
|
||||
@@ -328,28 +472,37 @@ export default {
|
||||
@keyframes load4 {
|
||||
0%,
|
||||
100% {
|
||||
box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
|
||||
box-shadow: 0 -3em 0 0.2em, 2em -2em 0 0em, 3em 0 0 -1em, 2em 2em 0 -1em,
|
||||
0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 0;
|
||||
}
|
||||
12.5% {
|
||||
box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
|
||||
box-shadow: 0 -3em 0 0, 2em -2em 0 0.2em, 3em 0 0 0, 2em 2em 0 -1em,
|
||||
0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
|
||||
}
|
||||
25% {
|
||||
box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0, 0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
|
||||
box-shadow: 0 -3em 0 -0.5em, 2em -2em 0 0, 3em 0 0 0.2em, 2em 2em 0 0,
|
||||
0 3em 0 -1em, -2em 2em 0 -1em, -3em 0 0 -1em, -2em -2em 0 -1em;
|
||||
}
|
||||
37.5% {
|
||||
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em, 0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
|
||||
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 0, 2em 2em 0 0.2em,
|
||||
0 3em 0 0em, -2em 2em 0 -1em, -3em 0em 0 -1em, -2em -2em 0 -1em;
|
||||
}
|
||||
50% {
|
||||
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em, 0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
|
||||
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 0em,
|
||||
0 3em 0 0.2em, -2em 2em 0 0, -3em 0em 0 -1em, -2em -2em 0 -1em;
|
||||
}
|
||||
62.5% {
|
||||
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
|
||||
box-shadow: 0 -3em 0 -1em, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em,
|
||||
0 3em 0 0, -2em 2em 0 0.2em, -3em 0 0 0, -2em -2em 0 -1em;
|
||||
}
|
||||
75% {
|
||||
box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em, -2em -2em 0 0;
|
||||
box-shadow: 0em -3em 0 -1em, 2em -2em 0 -1em, 3em 0em 0 -1em,
|
||||
2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0.2em,
|
||||
-2em -2em 0 0;
|
||||
}
|
||||
87.5% {
|
||||
box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em, 0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
|
||||
box-shadow: 0em -3em 0 0, 2em -2em 0 -1em, 3em 0 0 -1em, 2em 2em 0 -1em,
|
||||
0 3em 0 -1em, -2em 2em 0 0, -3em 0em 0 0, -2em -2em 0 0.2em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
454
src/components/EditSites.vue
Normal file
454
src/components/EditSites.vue
Normal file
@@ -0,0 +1,454 @@
|
||||
<template>
|
||||
<div class="listpage" id="editSites">
|
||||
<div class="listpage-content">
|
||||
<div class="listpage-header" v-show="!enableBatchEdit">
|
||||
<el-switch v-model="enableBatchEdit" active-text="批处理分组">></el-switch>
|
||||
<el-button @click="addSite" icon="el-icon-document-add">新增</el-button>
|
||||
<el-button @click="exportSites" icon="el-icon-upload2" >导出</el-button>
|
||||
<el-button @click="importSites" icon="el-icon-download">导入</el-button>
|
||||
<el-button @click="checkAllSite" icon="el-icon-refresh" :loading="checkAllSiteLoading">检测</el-button>
|
||||
<el-button @click="removeAllSites" icon="el-icon-delete-solid">清空</el-button>
|
||||
<el-button @click="resetSitesEvent" icon="el-icon-refresh-left">重置</el-button>
|
||||
</div>
|
||||
<div class="listpage-header" v-show="enableBatchEdit">
|
||||
<el-switch v-model="enableBatchEdit" active-text="批处理分组"></el-switch>
|
||||
<el-input placeholder="新组名" v-model="batchGroupName"></el-input>
|
||||
<el-switch v-model="batchIsActive" :active-value="1" :inactive-value="0" active-text="自选源"></el-switch>
|
||||
<el-button type="primary" icon="el-icon-edit" @click.stop="saveBatchEdit">保存</el-button>
|
||||
</div>
|
||||
<div class="listpage-body" id="sites-table">
|
||||
<el-table
|
||||
ref="editSitesTable"
|
||||
size="mini" fit height="100%" row-key="id"
|
||||
:data="sites"
|
||||
:key="tableKey"
|
||||
@selection-change="handleSelectionChange"
|
||||
@sort-change="handleSortChange">
|
||||
<el-table-column
|
||||
type="selection"
|
||||
v-if="enableBatchEdit">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="name"
|
||||
label="资源名">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="isActive"
|
||||
label="自选源">
|
||||
<template slot-scope="scope">
|
||||
<el-switch
|
||||
v-model="scope.row.isActive"
|
||||
:active-value="1"
|
||||
:inactive-value="0"
|
||||
@change='isActiveChangeEvent'>
|
||||
</el-switch>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="group"
|
||||
label="分组"
|
||||
:filters="getFilters"
|
||||
:filter-method="filterHandle"
|
||||
filter-placement="bottom-end">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text">{{scope.row.group}}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column label="状态" width="120">
|
||||
<template slot-scope="scope">
|
||||
<span v-show="scope.row.status === ''">
|
||||
<i class="el-icon-loading"></i>
|
||||
检测中...
|
||||
</span>
|
||||
<span v-show="scope.row.status !== ''">{{scope.row.status}}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
header-align="right"
|
||||
align="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button size="mini" @click.stop="moveToTopEvent(scope.row)" type="text">置顶</el-button>
|
||||
<el-button size="mini" @click.stop="editSite(scope.row)" type="text">编辑</el-button>
|
||||
<el-button size="mini" @click.stop="removeEvent(scope.row)" type="text">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
<!-- 编辑页面 -->
|
||||
<div>
|
||||
<el-dialog :visible.sync="dialogVisible" v-if='dialogVisible' :title="dialogType==='edit'?'编辑源':'新增源'" :append-to-body="true" @close="closeDialog">
|
||||
<el-form :model="siteInfo" ref='siteInfo' label-width="75px" label-position="left" :rules="rules">
|
||||
<el-form-item label="源站名" prop='name'>
|
||||
<el-input v-model="siteInfo.name" placeholder="请输入源站名" />
|
||||
</el-form-item>
|
||||
<el-form-item label="API接口" prop='api'>
|
||||
<el-input v-model="siteInfo.api" :autosize="{ minRows: 2, maxRows: 4}" type="textarea" placeholder="请输入API接口地址"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="下载接口" prop='download'>
|
||||
<el-input v-model="siteInfo.download" :autosize="{ minRows: 2, maxRows: 4}" type="textarea" placeholder="请输入Download接口地址,可以空着"/>
|
||||
</el-form-item>
|
||||
<el-form-item label="分组" prop='group'>
|
||||
<el-select v-model="siteInfo.group" allow-create filterable default-first-option placeholder="请输入分组">
|
||||
<el-option v-for="item in siteGroup" :key="item" :label="item" :value="item"></el-option>
|
||||
</el-select>
|
||||
</el-form-item>
|
||||
<el-form-item label="源站标识" prop='key'>
|
||||
<el-input v-model="siteInfo.key" placeholder="请输入源站标识,如果为空,系统则自动生成" />
|
||||
</el-form-item>
|
||||
</el-form>
|
||||
<span slot="footer" class="dialog-footer">
|
||||
<el-button @click="closeDialog">取消</el-button>
|
||||
<el-button type="primary" @click="addOrEditSite">保存</el-button>
|
||||
</span>
|
||||
</el-dialog>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { mapMutations } from 'vuex'
|
||||
import { sites } from '../lib/dexie'
|
||||
import zy from '../lib/site/tools'
|
||||
import { remote } from 'electron'
|
||||
import { sites as defaultSites } from '../lib/dexie/initData'
|
||||
import fs from 'fs'
|
||||
import Sortable from 'sortablejs'
|
||||
|
||||
export default {
|
||||
name: 'editSites',
|
||||
data () {
|
||||
return {
|
||||
show: false,
|
||||
sites: [],
|
||||
dialogType: 'new',
|
||||
dialogVisible: false,
|
||||
siteInfo: {
|
||||
key: '',
|
||||
name: '',
|
||||
api: '',
|
||||
download: '',
|
||||
group: '',
|
||||
isActive: 1
|
||||
},
|
||||
siteGroup: [],
|
||||
rules: {
|
||||
name: [
|
||||
{ required: true, message: '源站名不能为空', trigger: 'blur' }
|
||||
],
|
||||
api: [
|
||||
{ required: true, message: 'API地址不能为空', trigger: 'blur' }
|
||||
],
|
||||
download: [
|
||||
{ required: false, trigger: 'blur' }
|
||||
]
|
||||
},
|
||||
enableBatchEdit: false,
|
||||
batchGroupName: '',
|
||||
batchIsActive: 1,
|
||||
multipleSelection: [],
|
||||
tableKey: 1,
|
||||
checkAllSiteLoading: false,
|
||||
editeOldkey: ''
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
setting: {
|
||||
get () {
|
||||
return this.$store.getters.getSetting
|
||||
},
|
||||
set (val) {
|
||||
this.SET_SETTING(val)
|
||||
}
|
||||
},
|
||||
editSites: {
|
||||
get () {
|
||||
return this.$store.getters.getEditSites
|
||||
},
|
||||
set (val) {
|
||||
this.SET_EDITSITES(val)
|
||||
}
|
||||
},
|
||||
getFilters () {
|
||||
const groups = [...new Set(this.sites.map(site => site.group))]
|
||||
var filters = []
|
||||
groups.forEach(g => {
|
||||
var doc = {
|
||||
text: g,
|
||||
value: g
|
||||
}
|
||||
filters.push(doc)
|
||||
})
|
||||
return filters
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_SETTING', 'SET_EDITSITES']),
|
||||
filterHandle (value, row) {
|
||||
return row.group === value
|
||||
},
|
||||
handleSelectionChange (rows) {
|
||||
this.multipleSelection = rows
|
||||
},
|
||||
handleSortChange (column, prop, order) {
|
||||
this.updateDatabase(this.sites)
|
||||
},
|
||||
saveBatchEdit () {
|
||||
this.multipleSelection.forEach(ele => {
|
||||
if (this.batchGroupName) {
|
||||
ele.group = this.batchGroupName
|
||||
}
|
||||
ele.isActive = this.batchIsActive
|
||||
})
|
||||
this.updateDatabase()
|
||||
},
|
||||
getSites () {
|
||||
sites.all().then(res => {
|
||||
this.sites = res
|
||||
this.editSites = {
|
||||
sites: res
|
||||
}
|
||||
})
|
||||
for (const i of this.sites) {
|
||||
delete i.status
|
||||
}
|
||||
},
|
||||
getSitesGroup () {
|
||||
const arr = []
|
||||
for (const i of this.sites) {
|
||||
if (arr.indexOf(i.group) < 0) {
|
||||
arr.push(i.group)
|
||||
}
|
||||
}
|
||||
this.siteGroup = arr
|
||||
},
|
||||
addSite () {
|
||||
this.getSitesGroup()
|
||||
this.dialogType = 'new'
|
||||
this.dialogVisible = true
|
||||
this.siteInfo = {
|
||||
key: '',
|
||||
name: '',
|
||||
api: '',
|
||||
download: '',
|
||||
group: '',
|
||||
isActive: 1
|
||||
}
|
||||
},
|
||||
editSite (siteInfo) {
|
||||
this.getSitesGroup()
|
||||
if (this.checkAllSiteLoading) {
|
||||
this.$message.info('正在检测, 请勿操作.')
|
||||
return false
|
||||
}
|
||||
this.dialogType = 'edit'
|
||||
this.dialogVisible = true
|
||||
this.siteInfo = siteInfo
|
||||
this.editeOldkey = siteInfo.key
|
||||
},
|
||||
closeDialog () {
|
||||
this.dialogVisible = false
|
||||
this.getSites()
|
||||
},
|
||||
removeEvent (e) {
|
||||
if (this.checkAllSiteLoading) {
|
||||
this.$message.info('正在检测, 请勿操作.')
|
||||
return false
|
||||
}
|
||||
sites.remove(e.id).then(res => {
|
||||
this.getSites()
|
||||
}).catch(err => {
|
||||
this.$message.warning('删除源失败, 错误信息: ' + err)
|
||||
})
|
||||
},
|
||||
listUpdatedEvent () {
|
||||
sites.clear().then(res1 => {
|
||||
// 重新排序
|
||||
var id = 1
|
||||
this.sites.forEach(element => {
|
||||
element.id = id
|
||||
sites.add(element)
|
||||
id += 1
|
||||
})
|
||||
})
|
||||
},
|
||||
checkSiteKey (e) {
|
||||
if (this.dialogType === 'edit' && this.editeOldkey === this.siteInfo.key) {
|
||||
return true
|
||||
} else {
|
||||
for (const i of this.sites) {
|
||||
if (i.key === this.siteInfo.key) {
|
||||
this.$message.warning(`源站标识: ${i.key} 已存在, 请勿重复填写.`)
|
||||
return false
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
},
|
||||
addOrEditSite () {
|
||||
if (!this.siteInfo.name || !this.siteInfo.api) {
|
||||
this.$message.error('名称和API接口不能为空。')
|
||||
return false
|
||||
}
|
||||
if (!this.checkSiteKey()) {
|
||||
return false
|
||||
}
|
||||
var randomstring = require('randomstring')
|
||||
var doc = {
|
||||
key: this.dialogType === 'edit' ? this.siteInfo.key : this.siteInfo.key ? this.siteInfo.key : randomstring.generate(6),
|
||||
id: this.dialogType === 'edit' ? this.siteInfo.id : this.sites[this.sites.length - 1].id + 1,
|
||||
name: this.siteInfo.name,
|
||||
api: this.siteInfo.api,
|
||||
download: this.siteInfo.download,
|
||||
group: this.siteInfo.group,
|
||||
isActive: this.siteInfo.isActive
|
||||
}
|
||||
if (this.dialogType === 'edit') sites.remove(this.siteInfo.id)
|
||||
sites.add(doc).then(res => {
|
||||
this.siteInfo = {
|
||||
key: '',
|
||||
name: '',
|
||||
api: '',
|
||||
download: '',
|
||||
group: ''
|
||||
}
|
||||
this.dialogType === 'edit' ? this.$message.success('修改成功!') : this.$message.success('新增源成功!')
|
||||
this.dialogVisible = false
|
||||
this.getSites()
|
||||
})
|
||||
this.editeOldkey = ''
|
||||
},
|
||||
exportSites () {
|
||||
this.getSites()
|
||||
const arr = [...this.sites]
|
||||
const str = JSON.stringify(arr, null, 2)
|
||||
const options = {
|
||||
filters: [
|
||||
{ name: 'JSON file', extensions: ['json'] },
|
||||
{ name: 'Normal text file', extensions: ['txt'] },
|
||||
{ name: 'All types', extensions: ['*'] }
|
||||
]
|
||||
}
|
||||
remote.dialog.showSaveDialog(options).then(result => {
|
||||
if (!result.canceled) {
|
||||
fs.writeFileSync(result.filePath, str)
|
||||
this.$message.success('已保存成功')
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err)
|
||||
})
|
||||
},
|
||||
importSites () {
|
||||
const options = {
|
||||
filters: [
|
||||
{ name: 'JSON file', extensions: ['json'] },
|
||||
{ name: 'Normal text file', extensions: ['txt'] },
|
||||
{ name: 'All types', extensions: ['*'] }
|
||||
],
|
||||
properties: ['openFile', 'multiSelections']
|
||||
}
|
||||
remote.dialog.showOpenDialog(options).then(result => {
|
||||
if (!result.canceled) {
|
||||
result.filePaths.forEach(file => {
|
||||
var str = fs.readFileSync(file)
|
||||
const json = JSON.parse(str)
|
||||
json.forEach(ele => {
|
||||
if (ele.api && this.sites.filter(x => x.key === ele.key).length === 0 && this.sites.filter(x => x.name === ele.name && x.api === ele.api).length === 0) {
|
||||
// 不含该key 同时也不含名字和url一样的
|
||||
if (ele.isActive === undefined) {
|
||||
ele.isActive = 1
|
||||
}
|
||||
if (ele.group === undefined) {
|
||||
ele.group = '导入'
|
||||
}
|
||||
this.sites.push(ele)
|
||||
}
|
||||
})
|
||||
this.resetId(this.sites)
|
||||
sites.clear().then(sites.bulkAdd(this.sites))
|
||||
this.$message.success('导入成功')
|
||||
this.getSites()
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
resetSitesEvent () {
|
||||
sites.clear().then(sites.bulkAdd(defaultSites).then(this.getSites()))
|
||||
this.$message.success('重置源成功')
|
||||
},
|
||||
moveToTopEvent (i) {
|
||||
if (this.checkAllSiteLoading) {
|
||||
this.$message.info('正在检测, 请勿操作.')
|
||||
return false
|
||||
}
|
||||
this.sites.sort(function (x, y) { return x.key === i.key ? -1 : y.key === i.key ? 1 : 0 })
|
||||
this.updateDatabase()
|
||||
},
|
||||
syncTableData () {
|
||||
if (this.$refs.editSitesTable.tableData && this.$refs.editSitesTable.tableData.length === this.sites.length) {
|
||||
this.sites = this.$refs.editSitesTable.tableData
|
||||
}
|
||||
},
|
||||
isActiveChangeEvent (row) {
|
||||
this.updateDatabase()
|
||||
},
|
||||
resetId (inArray) {
|
||||
var id = 1
|
||||
inArray.forEach(ele => {
|
||||
ele.id = id
|
||||
id += 1
|
||||
})
|
||||
},
|
||||
updateDatabase () {
|
||||
// 因为el-table的数据是单向绑定,我们先同步el-table里的数据和其绑定的数据
|
||||
this.syncTableData()
|
||||
sites.clear().then(res => {
|
||||
var id = 1
|
||||
this.sites.forEach(ele => {
|
||||
ele.id = id
|
||||
id += 1
|
||||
})
|
||||
sites.bulkAdd(this.sites).then(this.getSites())
|
||||
})
|
||||
},
|
||||
removeAllSites () {
|
||||
sites.clear().then(this.getSites())
|
||||
},
|
||||
rowDrop () {
|
||||
const tbody = document.getElementById('sites-table').querySelector('.el-table__body-wrapper tbody')
|
||||
var _this = this
|
||||
Sortable.create(tbody, {
|
||||
onEnd ({ newIndex, oldIndex }) {
|
||||
const currRow = _this.sites.splice(oldIndex, 1)[0]
|
||||
_this.sites.splice(newIndex, 0, currRow)
|
||||
_this.updateDatabase()
|
||||
}
|
||||
})
|
||||
},
|
||||
async checkAllSite () {
|
||||
this.checkAllSiteLoading = true
|
||||
for (const i of this.sites) {
|
||||
i.status = ''
|
||||
this.tableKey = Math.random()
|
||||
const flag = await zy.check(i.key)
|
||||
if (flag) {
|
||||
i.status = '可用'
|
||||
} else {
|
||||
i.status = '失效'
|
||||
i.isActive = 0
|
||||
}
|
||||
this.tableKey = Math.random()
|
||||
}
|
||||
this.checkAllSiteLoading = false
|
||||
this.updateDatabase()
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
this.rowDrop()
|
||||
this.checkAllSiteLoading = false
|
||||
},
|
||||
created () {
|
||||
this.getSites()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -9,47 +9,47 @@
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zy-select" @mouseleave="show.classList = false" v-if="show.class">
|
||||
<div class="zy-select" @mouseleave="show.classList = false" v-show="show.class">
|
||||
<div class="vs-placeholder" @click="show.classList = true">{{type.name}}</div>
|
||||
<div class="vs-options" v-show="show.classList">
|
||||
<ul class="zy-scroll" style="max-height: 600px;">
|
||||
<li :class="type.tid === i.tid ? 'active' : ''" v-for="i in classList" :key="i.tid" @click="classClick(i)">{{ i.name }}</li>
|
||||
<li :class="type.tid === i.tid ? 'active' : ''" v-for="i in classList" :key="i.tid" @click="classClick(i)">{{ i.name | classNameFilter }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zy-select" @mouseleave="show.search = false">
|
||||
<div class="vs-input" @click="show.search = true"><input v-model.trim="searchTxt" type="text" placeholder="搜索" @keyup.enter="searchEvent"></div>
|
||||
<div class="vs-input" @click="show.search = true"><input v-model.trim="searchTxt" type="text" placeholder="搜索" @keyup.enter="searchEvent(searchTxt)"></div>
|
||||
<div class="vs-options" v-show="show.search">
|
||||
<ul class="zy-scroll" style="max-height: 600px">
|
||||
<li v-for="(i, j) in searchList" :key="j" @click="searchClickEvent(i)">{{i.keywords}}</li>
|
||||
<li v-for="(i, j) in searchList" :key="j" @click="searchEvent(i.keywords)">{{i.keywords}}</li>
|
||||
<li v-show="searchList.length >= 1" @click="clearSearch">清空历史记录</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="body zy-scroll" infinite-wrapper>
|
||||
<div class="body-box" v-if="!show.find">
|
||||
<div class="body-box" v-show="!show.find">
|
||||
<div class="show-img" v-if="setting.view === 'picture'">
|
||||
<Waterfall :list="list" :gutter="20" :width="240"
|
||||
<Waterfall ref="waterfall" :list="list" :gutter="20" :width="240"
|
||||
:breakpoints="{ 1200: { rowPerView: 4 } }"
|
||||
animationEffect="fadeInUp"
|
||||
backgroundColor="rgba(0, 0, 0, 0)"
|
||||
ref="wimg">
|
||||
backgroundColor="rgba(0, 0, 0, 0)">
|
||||
<template slot="item" slot-scope="props">
|
||||
<div class="card">
|
||||
<div class="card" v-show="!setting.excludeR18Films || !containsR18Keywords(props.data.type)">
|
||||
<div class="img">
|
||||
<img style="width: 100%" :src="props.data.pic" alt="" @load="$refs.wimg.refresh()" @click="detailEvent(props.data)">
|
||||
<img style="width: 100%" :src="props.data.pic" alt="" @load="$refs.waterfall.refresh()" @click="detailEvent(site, props.data)">
|
||||
<div class="operate">
|
||||
<div class="operate-wrap">
|
||||
<span class="o-play" @click="playEvent(props.data)">播放</span>
|
||||
<span class="o-star" @click="starEvent(props.data)">收藏</span>
|
||||
<span class="o-share" @click="shareEvent(props.data)">分享</span>
|
||||
<span class="o-play" @click="playEvent(site, props.data)">播放</span>
|
||||
<span class="o-star" @click="starEvent(site, props.data)">收藏</span>
|
||||
<span class="o-share" @click="shareEvent(site, props.data)">分享</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="name" @click="detailEvent(props.data)">{{props.data.name}}</div>
|
||||
<div class="name" @click="detailEvent(site, props.data)">{{props.data.name}}</div>
|
||||
<div class="info">
|
||||
<span>{{props.data.year}}</span>
|
||||
<span>{{props.data.note}}</span>
|
||||
<span>{{props.data.type}}</span>
|
||||
</div>
|
||||
</div>
|
||||
@@ -61,39 +61,44 @@
|
||||
<div class="zy-table">
|
||||
<div class="tBody">
|
||||
<ul>
|
||||
<li v-for="(i, j) in list" :key="j" @click="detailEvent(i)">
|
||||
<li v-for="(i, j) in list" :key="j" @click="detailEvent(site, i)" v-show="!setting.excludeR18Films || !containsR18Keywords(i.type)">
|
||||
<span class="name">{{i.name}}</span>
|
||||
<span class="type">{{i.type}}</span>
|
||||
<span class="time">{{i.year}}</span>
|
||||
<span class="note">{{i.note}}</span>
|
||||
<span class="last">{{i.last}}</span>
|
||||
<span class="operate">
|
||||
<span class="btn" @click.stop="playEvent(i)">播放</span>
|
||||
<span class="btn" @click.stop="starEvent(i)">收藏</span>
|
||||
<span class="btn" @click.stop="shareEvent(i)">分享</span>
|
||||
<span class="btn" @click.stop="downloadEvent(i)">下载</span>
|
||||
<span class="btn" @click.stop="playEvent(site, i)">播放</span>
|
||||
<span class="btn" @click.stop="starEvent(site, i)">收藏</span>
|
||||
<span class="btn" @click.stop="shareEvent(site, i)">分享</span>
|
||||
<span class="btn" @click.stop="downloadEvent(site, i)">下载</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
<infinite-loading force-use-infinite-wrapper="tBody" :identifier="infiniteId" @infinite="infiniteHandler"></infinite-loading>
|
||||
<infinite-loading force-use-infinite-wrapper :identifier="infiniteId" @infinite="infiniteHandler"></infinite-loading>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="body-box" v-if="show.find">
|
||||
<div class="body-box" v-show="show.find">
|
||||
<div class="show-table">
|
||||
<div class="zy-table">
|
||||
<div class="tBody">
|
||||
<div class="tBody zy-scroll">
|
||||
<ul>
|
||||
<li v-for="(i, j) in searchContents" :key="j" @click="detailEvent(i)">
|
||||
<li v-for="(i, j) in searchContents" :key="j" @click="detailEvent(i.site, i)">
|
||||
<span class="name">{{i.name}}</span>
|
||||
<span class="type">{{i.type}}</span>
|
||||
<span class="time">{{i.year}}</span>
|
||||
<span class="last">{{i.last}}</span>
|
||||
<span class="info">{{i.site.name}}</span>
|
||||
<span class="info">{{i.director}}</span>
|
||||
<span class="info">{{i.type}}</span>
|
||||
<span class="info">{{i.area}}</span>
|
||||
<span class="info">{{i.lang}}</span>
|
||||
<span class="info">{{i.year}}</span>
|
||||
<span class="info">{{i.note}}</span>
|
||||
<span class="operate">
|
||||
<span class="btn" @click.stop="playEvent(i)">播放</span>
|
||||
<span class="btn" @click.stop="starEvent(i)">收藏</span>
|
||||
<span class="btn" @click.stop="shareEvent(i)">分享</span>
|
||||
<span class="btn" @click.stop="downloadEvent(i)">下载</span>
|
||||
<span class="btn" @click.stop="playEvent(i.site, i)">播放</span>
|
||||
<span class="btn" @click.stop="starEvent(i.site, i)">收藏</span>
|
||||
<span class="btn" @click.stop="shareEvent(i.site, i)">分享</span>
|
||||
<span class="btn" @click.stop="downloadEvent(i.site, i)">下载</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -121,8 +126,6 @@ export default {
|
||||
class: false,
|
||||
classList: false,
|
||||
search: false,
|
||||
img: true,
|
||||
table: false,
|
||||
find: false
|
||||
},
|
||||
sites: [],
|
||||
@@ -134,7 +137,9 @@ export default {
|
||||
infiniteId: +new Date(),
|
||||
searchList: [],
|
||||
searchTxt: '',
|
||||
searchContents: []
|
||||
searchContents: [],
|
||||
// 福利片关键词
|
||||
r18KeyWords: ['伦理', '论理', '倫理', '福利', '激情', '理论', '写真', '情色', '美女', '街拍', '赤足', '性感', '里番']
|
||||
}
|
||||
},
|
||||
components: {
|
||||
@@ -176,6 +181,14 @@ export default {
|
||||
},
|
||||
setting () {
|
||||
return this.$store.getters.getSetting
|
||||
},
|
||||
sitesList () {
|
||||
return this.$store.getters.getEditSites.sites // 需要监听的数据
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
classNameFilter: (name) => {
|
||||
return name.replace(/[^\u4e00-\u9fa5]/gi, '')
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
@@ -185,11 +198,8 @@ export default {
|
||||
searchTxt () {
|
||||
this.searchChangeEvent()
|
||||
},
|
||||
setting: {
|
||||
handler (ov, nv) {
|
||||
this.settingChangeEvent(ov, nv)
|
||||
},
|
||||
deep: true
|
||||
sitesList () {
|
||||
this.getAllsites()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@@ -200,7 +210,7 @@ export default {
|
||||
this.show.site = false
|
||||
this.show.class = false
|
||||
if (this.searchTxt.length > 0) {
|
||||
this.searchEvent()
|
||||
this.searchSingleSiteEvent(this.site, this.searchTxt)
|
||||
} else {
|
||||
this.classList = []
|
||||
this.type = {}
|
||||
@@ -225,17 +235,39 @@ export default {
|
||||
getClass () {
|
||||
return new Promise((resolve, reject) => {
|
||||
const key = this.site.key
|
||||
// 屏蔽主分类
|
||||
const classToHide = ['电影', '电影片', '电视剧', '连续剧', '综艺', '动漫']
|
||||
zy.class(key).then(res => {
|
||||
this.classList = res.class
|
||||
var allClass = [{ name: '最新', tid: 0 }]
|
||||
res.class.forEach(element => {
|
||||
if (!this.setting.excludeRootClasses || !classToHide.includes(element.name)) {
|
||||
if (this.setting.excludeR18Films) {
|
||||
const containKeyWord = this.containsR18Keywords(element.name)
|
||||
if (!containKeyWord) {
|
||||
allClass.push(element)
|
||||
}
|
||||
} else {
|
||||
allClass.push(element)
|
||||
}
|
||||
}
|
||||
})
|
||||
this.classList = allClass
|
||||
this.show.class = true
|
||||
this.pagecount = res.pagecount
|
||||
this.type = { name: '最新', tid: 0 }
|
||||
this.type = this.classList[0]
|
||||
resolve(true)
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
},
|
||||
containsR18Keywords (name) {
|
||||
var containKeyWord = false
|
||||
if (!name) {
|
||||
return containKeyWord
|
||||
}
|
||||
return this.r18KeyWords.some(v => name.includes(v))
|
||||
},
|
||||
getPage () {
|
||||
return new Promise((resolve, reject) => {
|
||||
const key = this.site.key
|
||||
@@ -265,7 +297,8 @@ export default {
|
||||
$state.complete()
|
||||
}
|
||||
if (type === '[object Array]') {
|
||||
this.list.push(...res)
|
||||
// zy.list 返回的是按时间从旧到新排列, 我门需要翻转为从新到旧
|
||||
this.list.push(...res.reverse())
|
||||
}
|
||||
if (type === '[object Object]') {
|
||||
this.list.push(res)
|
||||
@@ -276,54 +309,53 @@ export default {
|
||||
}
|
||||
})
|
||||
},
|
||||
detailEvent (e) {
|
||||
detailEvent (site, e) {
|
||||
this.detail = {
|
||||
show: true,
|
||||
key: this.site.key,
|
||||
key: site.key,
|
||||
site: site,
|
||||
info: e
|
||||
}
|
||||
},
|
||||
playEvent (e) {
|
||||
history.find({ site: this.site.key, ids: e.id }).then(res => {
|
||||
if (res) {
|
||||
this.video = { key: res.site, info: { id: res.ids, name: res.name, index: res.index } }
|
||||
} else {
|
||||
this.video = { key: this.site.key, info: { id: e.id, name: e.name, index: 0 } }
|
||||
}
|
||||
})
|
||||
async playEvent (site, e) {
|
||||
const db = await history.find({ site: site.key, ids: e.id })
|
||||
if (db) {
|
||||
this.video = { key: db.site, info: { id: db.ids, name: db.name, index: db.index, site: site } }
|
||||
} else {
|
||||
this.video = { key: site.key, info: { id: e.id, name: e.name, index: 0, site: site } }
|
||||
}
|
||||
this.view = 'Play'
|
||||
},
|
||||
starEvent (e) {
|
||||
star.find({ site: this.site.key, ids: e.id }).then(res => {
|
||||
if (res) {
|
||||
this.$message.info('已存在')
|
||||
} else {
|
||||
const docs = {
|
||||
site: this.site.key,
|
||||
ids: e.id,
|
||||
name: e.name,
|
||||
type: e.type,
|
||||
year: e.year,
|
||||
last: e.last
|
||||
}
|
||||
star.add(docs).then(res => {
|
||||
this.$message.success('收藏成功')
|
||||
})
|
||||
async starEvent (site, e) {
|
||||
const db = await star.find({ key: site.key, ids: e.id })
|
||||
if (db) {
|
||||
this.$message.info('已存在')
|
||||
} else {
|
||||
const docs = {
|
||||
key: site.key,
|
||||
ids: e.id,
|
||||
site: site,
|
||||
name: e.name,
|
||||
type: e.type,
|
||||
year: e.year,
|
||||
last: e.last,
|
||||
note: e.note
|
||||
}
|
||||
}).catch(() => {
|
||||
this.$message.warning('收藏失败')
|
||||
})
|
||||
star.add(docs).then(res => {
|
||||
this.$message.success('收藏成功')
|
||||
})
|
||||
}
|
||||
},
|
||||
shareEvent (e) {
|
||||
shareEvent (site, e) {
|
||||
this.share = {
|
||||
show: true,
|
||||
key: this.site.key,
|
||||
key: site.key,
|
||||
info: e
|
||||
}
|
||||
},
|
||||
downloadEvent (e) {
|
||||
zy.download(this.site.key, e.id).then(res => {
|
||||
if (res) {
|
||||
downloadEvent (site, e) {
|
||||
zy.download(site.key, e.id).then(res => {
|
||||
if (res && res.length > 0 && res.dl && res.dl.dd) {
|
||||
const text = res.dl.dd._t
|
||||
if (text) {
|
||||
const list = text.split('#')
|
||||
@@ -338,9 +370,20 @@ export default {
|
||||
this.$message.warning('没有查询到下载链接.')
|
||||
}
|
||||
} else {
|
||||
const list = [...this.m3u8List]
|
||||
let m3u8List = []
|
||||
const dd = res.dl.dd
|
||||
const type = Object.prototype.toString.call(dd)
|
||||
if (type === '[object Array]') {
|
||||
for (const i of dd) {
|
||||
if (i._flag.indexOf('m3u8') >= 0) {
|
||||
m3u8List = i._t.split('#')
|
||||
}
|
||||
}
|
||||
} else {
|
||||
m3u8List = dd._t.split('#')
|
||||
}
|
||||
let downloadUrl = e.name + '\n'
|
||||
for (const i of list) {
|
||||
for (const i of m3u8List) {
|
||||
const url = encodeURI(i.split('$')[1])
|
||||
downloadUrl += (url + '\n')
|
||||
}
|
||||
@@ -351,13 +394,11 @@ export default {
|
||||
},
|
||||
changeView () {
|
||||
if (this.view === 'Film') {
|
||||
if (this.show.img) {
|
||||
this.$refs.wimg.refresh()
|
||||
if (this.setting.view === 'picture') {
|
||||
this.$refs.waterfall.refresh()
|
||||
}
|
||||
this.getPage().then(() => {
|
||||
this.infiniteId += 1
|
||||
if (this.show.img || this.show.table) {
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
@@ -366,11 +407,19 @@ export default {
|
||||
this.searchList = res.reverse()
|
||||
})
|
||||
},
|
||||
searchEvent () {
|
||||
const wd = this.searchTxt
|
||||
searchEvent (wd) {
|
||||
if (this.setting.searchAllSites) {
|
||||
this.searchAllSitesEvent(this.sites, wd)
|
||||
} else {
|
||||
this.searchSingleSiteEvent(this.site, wd)
|
||||
}
|
||||
},
|
||||
searchAllSitesEvent (sites, wd) {
|
||||
this.searchTxt = wd
|
||||
this.searchContents = []
|
||||
this.pagecount = 0
|
||||
this.show.search = false
|
||||
this.show.find = true
|
||||
if (wd) {
|
||||
search.find({ keywords: wd }).then(res => {
|
||||
if (!res) {
|
||||
@@ -378,18 +427,24 @@ export default {
|
||||
}
|
||||
this.getAllSearch()
|
||||
})
|
||||
zy.search(this.site.key, wd).then(res => {
|
||||
const type = Object.prototype.toString.call(res)
|
||||
if (type === '[object Undefined]') {
|
||||
this.$message.info('无搜索结果')
|
||||
}
|
||||
if (type === '[object Array]') {
|
||||
this.searchContents.push(...res)
|
||||
}
|
||||
if (type === '[object Object]') {
|
||||
this.searchContents.push(res)
|
||||
}
|
||||
this.show.find = true
|
||||
sites.forEach(site => {
|
||||
zy.search(site.key, wd).then(res => {
|
||||
const type = Object.prototype.toString.call(res)
|
||||
if (type === '[object Array]') {
|
||||
res.forEach(element => {
|
||||
zy.detail(site.key, element.id).then(detailRes => {
|
||||
detailRes.site = site
|
||||
this.searchContents.push(detailRes)
|
||||
})
|
||||
})
|
||||
}
|
||||
if (type === '[object Object]') {
|
||||
zy.detail(site.key, res.id).then(detailRes => {
|
||||
detailRes.site = site
|
||||
this.searchContents.push(detailRes)
|
||||
})
|
||||
}
|
||||
})
|
||||
})
|
||||
} else {
|
||||
this.show.find = false
|
||||
@@ -400,28 +455,10 @@ export default {
|
||||
})
|
||||
}
|
||||
},
|
||||
searchClickEvent (e) {
|
||||
this.searchContents = []
|
||||
this.pagecount = 0
|
||||
this.searchTxt = e.keywords
|
||||
this.show.search = false
|
||||
search.remove(e.id).then(res => {
|
||||
search.add({ keywords: e.keywords })
|
||||
this.getAllSearch()
|
||||
})
|
||||
zy.search(this.site.key, e.keywords).then(res => {
|
||||
const type = Object.prototype.toString.call(res)
|
||||
if (type === '[object Undefined]') {
|
||||
this.$message.info('无搜索结果')
|
||||
}
|
||||
if (type === '[object Array]') {
|
||||
this.searchContents.push(...res)
|
||||
}
|
||||
if (type === '[object Object]') {
|
||||
this.searchContents.push(res)
|
||||
}
|
||||
this.show.find = true
|
||||
})
|
||||
searchSingleSiteEvent (site, wd) {
|
||||
var sites = []
|
||||
sites.push(this.site)
|
||||
this.searchAllSitesEvent(sites, wd)
|
||||
},
|
||||
clearSearch () {
|
||||
search.clear().then(res => {
|
||||
@@ -435,21 +472,25 @@ export default {
|
||||
this.show.class = true
|
||||
this.searchContents = []
|
||||
this.show.find = false
|
||||
if (this.show.img) {
|
||||
this.$refs.wimg.refresh()
|
||||
if (this.setting.view === 'picture') {
|
||||
this.$refs.waterfall.refresh()
|
||||
}
|
||||
}
|
||||
},
|
||||
getAllsites () {
|
||||
sites.all().then(res => {
|
||||
this.sites = res
|
||||
this.site = this.sites[0]
|
||||
this.siteClick(this.site)
|
||||
if (res.length <= 0) {
|
||||
this.site = {}
|
||||
this.type = {}
|
||||
this.list = []
|
||||
} else {
|
||||
this.sites = res.filter((item, index, self) => {
|
||||
return self.indexOf(item) >= 0 && item.isActive
|
||||
})
|
||||
this.site = this.sites[0]
|
||||
this.siteClick(this.site)
|
||||
}
|
||||
})
|
||||
},
|
||||
settingChangeEvent (ov, nv) {
|
||||
console.log(ov, nv, 'ov nv')
|
||||
this.getAllsites()
|
||||
}
|
||||
},
|
||||
created () {
|
||||
|
||||
@@ -1,14 +1,29 @@
|
||||
<template>
|
||||
<div class="frame">
|
||||
<span class="min" @click="frameClickEvent('min')"></span>
|
||||
<span class="max" @click="frameClickEvent('max')"></span>
|
||||
<span class="close" @click="frameClickEvent('close')"></span>
|
||||
<span class="top" @click="frameClickEvent('top')" title="置顶">
|
||||
<svg t="1595919317571" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1188" style="width:10px;height:14px"><path d="M43.072 974.72l380.864-301.952 151.936 161.6c0 0 63.424 17.28 67.328-30.72l-3.904-163.584 225.088-259.648 98.048-5.696c0 0 76.928-15.488 21.184-82.752l-275.072-276.928c0 0-74.944-9.6-69.248 59.584l0 75.008L383.552 367.104 225.856 376.64c0 0-57.728 19.2-36.608 69.248l148.16 146.176L43.072 974.72 43.072 974.72z" p-id="1189" :fill="isAlwaysOnTop ? '#555555' : '#ffffff'"></path></svg>
|
||||
</span>
|
||||
<span class="min" @click="frameClickEvent('min')" title="最小化">
|
||||
<svg t="1595917239849" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1155" style="width:8px;height:14px"><path d="M0 479.936C0 444.64 28.448 416 64.064 416L959.936 416C995.328 416 1024 444.736 1024 479.936L1024 544.064C1024 579.392 995.552 608 959.936 608L64.064 608C28.672 608 0 579.264 0 544.064L0 479.936Z" p-id="1156" fill="#ffffff"></path></svg>
|
||||
</span>
|
||||
<span class="max" @click="frameClickEvent('max')" title="最大化">
|
||||
<svg t="1595917343956" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1540" style="width:8px;height:14px"><path d="M416 416 64.064 416C28.448 416 0 444.64 0 479.936L0 544.064C0 579.264 28.672 608 64.064 608L416 608 416 959.936C416 995.552 444.64 1024 479.936 1024L544.064 1024C579.264 1024 608 995.328 608 959.936L608 608 959.936 608C995.552 608 1024 579.36 1024 544.064L1024 479.936C1024 444.736 995.328 416 959.936 416L608 416 608 64.064C608 28.448 579.36 0 544.064 0L479.936 0C444.736 0 416 28.672 416 64.064L416 416Z" p-id="1541" fill="#ffffff"></path></svg>
|
||||
</span>
|
||||
<span class="close" @click="frameClickEvent('close')" title="关闭">
|
||||
<svg t="1595917372551" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1685" style="width:8px;height:14px"><path d="M511.968 376.224 796.096 92.096C833.536 54.624 894.4 54.624 931.84 92.096 969.312 129.568 969.312 190.4 931.84 227.872L647.744 512 931.84 796.096C969.312 833.568 969.312 894.4 931.84 931.872 894.4 969.344 833.536 969.344 796.096 931.872L511.968 647.744 227.84 931.872C190.4 969.344 129.536 969.344 92.096 931.872 54.624 894.4 54.624 833.568 92.096 796.096L376.224 512 92.096 227.872C54.624 190.4 54.624 129.568 92.096 92.096 129.536 54.624 190.4 54.624 227.84 92.096L511.968 376.224Z" p-id="1686" fill="#ffffff"></path></svg>
|
||||
</span>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
const { remote } = require('electron')
|
||||
export default {
|
||||
name: 'frame',
|
||||
data () {
|
||||
const win = remote.getCurrentWindow()
|
||||
return {
|
||||
isAlwaysOnTop: win.isAlwaysOnTop()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
frameClickEvent (e) {
|
||||
const win = remote.getCurrentWindow()
|
||||
@@ -21,6 +36,10 @@ export default {
|
||||
if (e === 'close') {
|
||||
win.destroy()
|
||||
}
|
||||
if (e === 'top') {
|
||||
this.isAlwaysOnTop = !this.isAlwaysOnTop
|
||||
win.setAlwaysOnTop(this.isAlwaysOnTop)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -40,6 +59,8 @@ export default {
|
||||
cursor: pointer;
|
||||
margin-left: 10px;
|
||||
border-radius: 50%;
|
||||
text-align: center;
|
||||
line-height: 14px;
|
||||
display: inline-block;
|
||||
-webkit-app-region: no-drag;
|
||||
}
|
||||
|
||||
269
src/components/History.vue
Normal file
269
src/components/History.vue
Normal file
@@ -0,0 +1,269 @@
|
||||
<template>
|
||||
<div class="listpage" id="history">
|
||||
<div class="listpage-content">
|
||||
<div class="listpage-header">
|
||||
<el-button @click.stop="exportHistory" icon="el-icon-upload2">导出</el-button>
|
||||
<el-button @click.stop="importHistory" icon="el-icon-download">导入</el-button>
|
||||
<el-button @click.stop="clearAllHistory" icon="el-icon-delete-solid">清空</el-button>
|
||||
</div>
|
||||
<div class="listpage-body" id="history-table">
|
||||
<el-table size="mini" fit height="100%" :data="history" row-key="id" @row-click="detailEvent">
|
||||
<el-table-column
|
||||
prop="name"
|
||||
label="片名">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="site"
|
||||
width="120"
|
||||
label="片源">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ getSiteName(scope.row.site) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
prop="index"
|
||||
width="120"
|
||||
label="观看至">
|
||||
<template slot-scope="scope">
|
||||
<span>第{{ scope.row.index + 1 }}集</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
header-align="right"
|
||||
align="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click.stop="playEvent(scope.row)" type="text">播放</el-button>
|
||||
<el-button @click.stop="shareEvent(scope.row)" type="text">分享</el-button>
|
||||
<el-button @click.stop="downloadEvent(scope.row)" type="text">下载</el-button>
|
||||
<el-button @click.stop="removeHistoryItem(scope.row)" type="text">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { mapMutations } from 'vuex'
|
||||
import { history, sites } from '../lib/dexie'
|
||||
import zy from '../lib/site/tools'
|
||||
import Sortable from 'sortablejs'
|
||||
import { remote } from 'electron'
|
||||
import fs from 'fs'
|
||||
const { clipboard } = require('electron')
|
||||
|
||||
export default {
|
||||
name: 'history',
|
||||
data () {
|
||||
return {
|
||||
history: [],
|
||||
sites: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
view: {
|
||||
get () {
|
||||
return this.$store.getters.getView
|
||||
},
|
||||
set (val) {
|
||||
this.SET_VIEW(val)
|
||||
}
|
||||
},
|
||||
video: {
|
||||
get () {
|
||||
return this.$store.getters.getVideo
|
||||
},
|
||||
set (val) {
|
||||
this.SET_VIDEO(val)
|
||||
}
|
||||
},
|
||||
detail: {
|
||||
get () {
|
||||
return this.$store.getters.getDetail
|
||||
},
|
||||
set (val) {
|
||||
this.SET_DETAIL(val)
|
||||
}
|
||||
},
|
||||
share: {
|
||||
get () {
|
||||
return this.$store.getters.getShare
|
||||
},
|
||||
set (val) {
|
||||
this.SET_SHARE(val)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
view () {
|
||||
this.getAllhistory()
|
||||
this.getAllsites()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_VIEW', 'SET_DETAIL', 'SET_VIDEO', 'SET_SHARE']),
|
||||
detailEvent (e) {
|
||||
this.detail = {
|
||||
show: true,
|
||||
key: e.site,
|
||||
info: {
|
||||
id: e.ids,
|
||||
name: e.name
|
||||
}
|
||||
}
|
||||
},
|
||||
async playEvent (e) {
|
||||
const db = await history.find({ site: e.site, ids: e.ids })
|
||||
if (db) {
|
||||
this.video = { key: db.site, info: { id: db.ids, name: db.name, index: db.index } }
|
||||
} else {
|
||||
this.video = { key: e.site, info: { id: e.ids, name: e.name, index: 0 } }
|
||||
}
|
||||
this.view = 'Play'
|
||||
},
|
||||
shareEvent (e) {
|
||||
this.share = {
|
||||
show: true,
|
||||
key: e.site,
|
||||
info: e
|
||||
}
|
||||
},
|
||||
downloadEvent (e) {
|
||||
zy.download(e.site, e.ids).then(res => {
|
||||
if (res && res.dl && res.dl.dd) {
|
||||
const text = res.dl.dd._t
|
||||
if (text) {
|
||||
const list = text.split('#')
|
||||
let downloadUrl = ''
|
||||
for (const i of list) {
|
||||
const url = encodeURI(i.split('$')[1])
|
||||
downloadUrl += (url + '\n')
|
||||
}
|
||||
clipboard.writeText(downloadUrl)
|
||||
this.$message.success('『MP4』格式的链接已复制, 快去下载吧!')
|
||||
} else {
|
||||
this.$message.warning('没有查询到下载链接.')
|
||||
}
|
||||
} else {
|
||||
var m3u8List = {}
|
||||
zy.detail(e.site, e.ids).then(res => {
|
||||
const dd = res.dl.dd
|
||||
const type = Object.prototype.toString.call(dd)
|
||||
if (type === '[object Array]') {
|
||||
for (const i of dd) {
|
||||
if (i._flag.indexOf('m3u8') >= 0) {
|
||||
m3u8List = i._t.split('#')
|
||||
}
|
||||
}
|
||||
} else {
|
||||
m3u8List = dd._t.split('#')
|
||||
}
|
||||
const list = [...m3u8List]
|
||||
let downloadUrl = ''
|
||||
for (const i of list) {
|
||||
const url = encodeURI(i.split('$')[1])
|
||||
downloadUrl += (url + '\n')
|
||||
}
|
||||
clipboard.writeText(downloadUrl)
|
||||
this.$message.success('『M3U8』格式的链接已复制, 快去下载吧!')
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
exportHistory () {
|
||||
this.getAllhistory()
|
||||
const arr = [...this.history]
|
||||
const str = JSON.stringify(arr, null, 2)
|
||||
const options = {
|
||||
filters: [
|
||||
{ name: 'JSON file', extensions: ['json'] }
|
||||
]
|
||||
}
|
||||
remote.dialog.showSaveDialog(options).then(result => {
|
||||
if (!result.canceled) {
|
||||
fs.writeFileSync(result.filePath, str)
|
||||
this.$message.success('已保存成功')
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err)
|
||||
})
|
||||
},
|
||||
importHistory () {
|
||||
const options = {
|
||||
filters: [
|
||||
{ name: 'JSON file', extensions: ['json'] }
|
||||
],
|
||||
properties: ['openFile', 'multiSelections']
|
||||
}
|
||||
remote.dialog.showOpenDialog(options).then(result => {
|
||||
if (!result.canceled) {
|
||||
result.filePaths.forEach(file => {
|
||||
var str = fs.readFileSync(file)
|
||||
const json = JSON.parse(str)
|
||||
history.bulkAdd(json).then(res => {
|
||||
this.$message.success('导入成功')
|
||||
this.getAllhistory()
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
clearAllHistory () {
|
||||
history.clear().then(res => {
|
||||
this.history = []
|
||||
})
|
||||
},
|
||||
getAllhistory () {
|
||||
history.all().then(res => {
|
||||
this.history = res.reverse()
|
||||
})
|
||||
},
|
||||
getAllsites () {
|
||||
sites.all().then(res => {
|
||||
this.sites = res
|
||||
})
|
||||
},
|
||||
getSiteName (key) {
|
||||
var site = this.sites.find(e => e.key === key)
|
||||
if (site) {
|
||||
return site.name
|
||||
}
|
||||
},
|
||||
removeHistoryItem (e) {
|
||||
history.remove(e.id).then(res => {
|
||||
this.getAllhistory()
|
||||
}).catch(err => {
|
||||
this.$message.warning('删除历史记录失败, 错误信息: ' + err)
|
||||
})
|
||||
},
|
||||
updateDatabase (data) {
|
||||
history.clear().then(res => {
|
||||
var id = length
|
||||
data.forEach(ele => {
|
||||
ele.id = id
|
||||
id -= 1
|
||||
history.add(ele)
|
||||
})
|
||||
})
|
||||
},
|
||||
rowDrop () {
|
||||
const tbody = document.getElementById('history-table').querySelector('.el-table__body-wrapper tbody')
|
||||
const _this = this
|
||||
Sortable.create(tbody, {
|
||||
onEnd ({ newIndex, oldIndex }) {
|
||||
const currRow = _this.history.splice(oldIndex, 1)[0]
|
||||
_this.history.splice(newIndex, 0, currRow)
|
||||
_this.updateDatabase(_this.history)
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
this.rowDrop()
|
||||
},
|
||||
created () {
|
||||
this.getAllhistory()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
373
src/components/IPTV.vue
Normal file
373
src/components/IPTV.vue
Normal file
@@ -0,0 +1,373 @@
|
||||
<template>
|
||||
<div class="listpage" id="IPTV">
|
||||
<div class="listpage-content">
|
||||
<div class="listpage-header" v-show="!enableBatchEdit">
|
||||
<el-switch v-model="enableBatchEdit" active-text="批处理分组"></el-switch>
|
||||
<el-button @click.stop="exportChannels" icon="el-icon-upload2" >导出</el-button>
|
||||
<el-button @click.stop="importChannels" icon="el-icon-download">导入</el-button>
|
||||
<el-button @click.stop="removeAllChannels" icon="el-icon-delete-solid">清空</el-button>
|
||||
<el-button @click.stop="resetChannelsEvent" icon="el-icon-refresh-left">重置</el-button>
|
||||
</div>
|
||||
<div class="listpage-header" v-show="enableBatchEdit">
|
||||
<el-switch v-model="enableBatchEdit" active-text="批处理分组"></el-switch>
|
||||
<el-input placeholder="新组名" v-model="batchGroupName"></el-input>
|
||||
<el-button type="primary" icon="el-icon-edit" @click.stop="saveBatchEdit">保存</el-button>
|
||||
</div>
|
||||
<div class="listpage-body" id="iptv-table">
|
||||
<el-table
|
||||
ref="iptvTable"
|
||||
size="mini" fit height="100%" row-key="id"
|
||||
:data="filteredTableData"
|
||||
@row-click="playEvent"
|
||||
@selection-change="handleSelectionChange"
|
||||
@sort-change="handleSortChange">>
|
||||
<el-table-column
|
||||
type="selection"
|
||||
v-if="enableBatchEdit">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
default-sort="ascending"
|
||||
prop="name"
|
||||
label="频道名">
|
||||
<template #header>
|
||||
<el-input
|
||||
placeholder="搜索"
|
||||
size="mini"
|
||||
v-model.trim="searchTxt">
|
||||
<i slot="prefix" class="el-input__icon el-icon-search"></i>
|
||||
</el-input>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sort-by="['group', 'name']"
|
||||
sortable
|
||||
:sort-method="sortByGroup"
|
||||
prop="group"
|
||||
label="分组"
|
||||
:filters="getFilters"
|
||||
:filter-method="filterHandle"
|
||||
filter-placement="bottom-end">
|
||||
<template slot-scope="scope">
|
||||
<el-button type="text">{{scope.row.group}}</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
header-align="right"
|
||||
align="right">
|
||||
<template #header>
|
||||
<span>总频道数:{{ iptvList.length }}</span>
|
||||
</template>
|
||||
<template slot-scope="scope">
|
||||
<el-button @click.stop="moveToTopEvent(scope.row)" type="text">置顶</el-button>
|
||||
<el-button @click.stop="removeEvent(scope.row)" type="text">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { mapMutations } from 'vuex'
|
||||
import { iptv, iptvSearch } from '../lib/dexie'
|
||||
import { iptv as defaultSites } from '../lib/dexie/initData'
|
||||
import { remote } from 'electron'
|
||||
import fs from 'fs'
|
||||
import Sortable from 'sortablejs'
|
||||
export default {
|
||||
name: 'iptv',
|
||||
data () {
|
||||
return {
|
||||
iptvList: [],
|
||||
searchTxt: '',
|
||||
searchRecordList: [],
|
||||
enableBatchEdit: false,
|
||||
batchGroupName: '',
|
||||
multipleSelection: [],
|
||||
show: {
|
||||
search: false
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
view: {
|
||||
get () {
|
||||
return this.$store.getters.getView
|
||||
},
|
||||
set (val) {
|
||||
this.SET_VIEW(val)
|
||||
}
|
||||
},
|
||||
setting () {
|
||||
return this.$store.getters.getSetting
|
||||
},
|
||||
video: {
|
||||
get () {
|
||||
return this.$store.getters.getVideo
|
||||
},
|
||||
set (val) {
|
||||
this.SET_VIDEO(val)
|
||||
}
|
||||
},
|
||||
filteredTableData () {
|
||||
if (this.searchTxt) {
|
||||
return this.iptvList.filter(x => x.name.toLowerCase().includes(this.searchTxt.toLowerCase()))
|
||||
} else {
|
||||
return this.iptvList
|
||||
}
|
||||
},
|
||||
getFilters () {
|
||||
const groups = [...new Set(this.iptvList.map(iptv => iptv.group))]
|
||||
var filters = []
|
||||
groups.forEach(g => {
|
||||
var doc = {
|
||||
text: g,
|
||||
value: g
|
||||
}
|
||||
filters.push(doc)
|
||||
})
|
||||
return filters
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
view () {
|
||||
this.getChannels()
|
||||
},
|
||||
searchTxt () {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_VIEW', 'SET_DETAIL', 'SET_VIDEO', 'SET_SHARE']),
|
||||
sortByGroup (a, b) {
|
||||
return a.group.localeCompare(b.group, 'zh')
|
||||
},
|
||||
handleSelectionChange (rows) {
|
||||
this.multipleSelection = rows
|
||||
},
|
||||
handleSortChange (column, prop, order) {
|
||||
this.updateDatabase()
|
||||
},
|
||||
saveBatchEdit () {
|
||||
if (this.multipleSelection && this.batchGroupName) {
|
||||
this.multipleSelection.forEach(ele => {
|
||||
ele.group = this.batchGroupName
|
||||
})
|
||||
}
|
||||
this.updateDatabase()
|
||||
},
|
||||
playEvent (e) {
|
||||
this.video = { iptv: { name: e.name, url: e.url } }
|
||||
this.view = 'Play'
|
||||
},
|
||||
filterHandle (value, row) {
|
||||
return row.group === value
|
||||
},
|
||||
containsearchTxt (i) {
|
||||
if (this.searchTxt) {
|
||||
return i.name.toLowerCase().includes(this.searchTxt.toLowerCase())
|
||||
} else {
|
||||
return true
|
||||
}
|
||||
},
|
||||
removeEvent (e) {
|
||||
iptv.remove(e.id).then(res => {
|
||||
this.getChannels()
|
||||
}).catch(err => {
|
||||
this.$message.warning('删除频道失败, 错误信息: ' + err)
|
||||
})
|
||||
},
|
||||
listUpdatedEvent () {
|
||||
iptv.clear().then(res1 => {
|
||||
// 重新排序
|
||||
var id = 1
|
||||
this.iptvList.forEach(element => {
|
||||
element.id = id
|
||||
iptv.add(element)
|
||||
id += 1
|
||||
})
|
||||
})
|
||||
},
|
||||
exportChannels () {
|
||||
const options = {
|
||||
filters: [
|
||||
{ name: 'm3u file', extensions: ['m3u'] },
|
||||
{ name: 'JSON file', extensions: ['json'] }
|
||||
]
|
||||
}
|
||||
remote.dialog.showSaveDialog(options).then(result => {
|
||||
if (!result.canceled) {
|
||||
if (result.filePath.endsWith('m3u')) {
|
||||
var writer = require('m3u').extendedWriter()
|
||||
this.iptvList.forEach(e => {
|
||||
writer.file(e.url, -1, e.name)
|
||||
})
|
||||
fs.writeFileSync(result.filePath, writer.toString())
|
||||
this.$message.success('已保存成功')
|
||||
} else {
|
||||
const arr = [...this.iptvList]
|
||||
const str = JSON.stringify(arr, null, 2)
|
||||
fs.writeFileSync(result.filePath, str)
|
||||
this.$message.success('已保存成功')
|
||||
}
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err)
|
||||
})
|
||||
},
|
||||
importChannels () {
|
||||
const options = {
|
||||
filters: [
|
||||
{ name: 'm3u file', extensions: ['m3u', 'm3u8'] },
|
||||
{ name: 'JSON file', extensions: ['json'] }
|
||||
],
|
||||
properties: ['openFile', 'multiSelections']
|
||||
}
|
||||
remote.dialog.showOpenDialog(options).then(result => {
|
||||
if (!result.canceled) {
|
||||
var docs = this.iptvList
|
||||
var id = docs.length
|
||||
result.filePaths.forEach(file => {
|
||||
if (file.endsWith('m3u') || file.endsWith('m3u8')) {
|
||||
const parser = require('iptv-playlist-parser')
|
||||
const playlist = fs.readFileSync(file, { encoding: 'utf-8' })
|
||||
const result = parser.parse(playlist)
|
||||
result.items.forEach(ele => {
|
||||
if (ele.name && ele.url && ele.url.endsWith('.m3u8')) {
|
||||
var doc = {
|
||||
id: id,
|
||||
name: ele.name,
|
||||
url: ele.url,
|
||||
group: this.determineGroup(ele.name)
|
||||
}
|
||||
id += 1
|
||||
docs.push(doc)
|
||||
}
|
||||
})
|
||||
} else {
|
||||
// Import Json file
|
||||
var str = fs.readFileSync(file)
|
||||
const json = JSON.parse(str)
|
||||
json.forEach(ele => {
|
||||
if (ele.name && ele.url && ele.url.endsWith('.m3u8')) {
|
||||
var doc = {
|
||||
id: id,
|
||||
name: ele.name,
|
||||
url: ele.url,
|
||||
group: this.determineGroup(ele.name)
|
||||
}
|
||||
id += 1
|
||||
docs.push(doc)
|
||||
}
|
||||
})
|
||||
}
|
||||
})
|
||||
// 获取name不重复的列表
|
||||
const uniqueList = [...new Map(docs.map(item => [item.name, item])).values()]
|
||||
iptv.clear().then(res => {
|
||||
iptv.bulkAdd(uniqueList).then(e => {
|
||||
this.getChannels()
|
||||
this.$message.success('导入成功')
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
determineGroup (name) {
|
||||
if (name.toLowerCase().includes('cctv') && (name.includes('蓝光') || name.includes('高清'))) {
|
||||
return '央视高清'
|
||||
} else if (name.toLowerCase().includes('cctv')) {
|
||||
return '央视'
|
||||
} else if (name.includes('卫视')) {
|
||||
return '卫视'
|
||||
} else if (name.includes('香港') || name.includes('澳门') || name.includes('台湾') || name.includes('凤凰')) {
|
||||
return '港澳台'
|
||||
} else if (name.includes('高清') || name.includes('蓝光') || name.includes('1080P')) {
|
||||
return '高清'
|
||||
} else {
|
||||
return '其他'
|
||||
}
|
||||
},
|
||||
resetChannelsEvent () {
|
||||
this.resetChannels(defaultSites)
|
||||
},
|
||||
resetChannels (newSites) {
|
||||
this.resetId(newSites)
|
||||
iptv.clear().then(iptv.bulkAdd(newSites).then(this.getChannels()))
|
||||
},
|
||||
removeAllChannels () {
|
||||
iptv.clear().then(res => {
|
||||
this.getChannels()
|
||||
})
|
||||
},
|
||||
getChannels () {
|
||||
iptv.all().then(res => {
|
||||
this.iptvList = res
|
||||
})
|
||||
},
|
||||
getSearchRecordList () {
|
||||
iptvSearch.all().then(res => {
|
||||
this.searchRecordList = res.reverse()
|
||||
})
|
||||
},
|
||||
clearSearch () {
|
||||
iptvSearch.clear().then(res => {
|
||||
this.getSearchRecordList()
|
||||
})
|
||||
},
|
||||
searchEvent (wd) {
|
||||
this.searchTxt = wd
|
||||
this.show.search = false
|
||||
if (wd) {
|
||||
iptvSearch.find({ keywords: wd }).then(res => {
|
||||
if (!res) {
|
||||
iptvSearch.add({ keywords: wd })
|
||||
}
|
||||
this.getSearchRecordList()
|
||||
})
|
||||
}
|
||||
},
|
||||
moveToTopEvent (i) {
|
||||
this.iptvList.sort(function (x, y) { return (x.name === i.name && x.url === i.url) ? -1 : (y.name === i.name && y.url === i.url) ? 1 : 0 })
|
||||
this.updateDatabase()
|
||||
},
|
||||
syncTableData () {
|
||||
if (this.$refs.iptvTable.tableData && this.$refs.iptvTable.tableData.length === this.iptvList.length) {
|
||||
this.iptvList = this.$refs.iptvTable.tableData
|
||||
}
|
||||
},
|
||||
updateDatabase () {
|
||||
this.syncTableData()
|
||||
iptv.clear().then(res => {
|
||||
this.resetId(this.iptvList)
|
||||
iptv.bulkAdd(this.iptvList)
|
||||
})
|
||||
},
|
||||
resetId (inArray) {
|
||||
var id = 1
|
||||
inArray.forEach(ele => {
|
||||
ele.id = id
|
||||
id += 1
|
||||
})
|
||||
},
|
||||
rowDrop () {
|
||||
const tbody = document.getElementById('iptv-table').querySelector('.el-table__body-wrapper tbody')
|
||||
const _this = this
|
||||
Sortable.create(tbody, {
|
||||
onEnd ({ newIndex, oldIndex }) {
|
||||
const currRow = _this.iptvList.splice(oldIndex, 1)[0]
|
||||
_this.iptvList.splice(newIndex, 0, currRow)
|
||||
_this.updateDatabase()
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
this.rowDrop()
|
||||
},
|
||||
created () {
|
||||
this.getChannels()
|
||||
this.getSearchRecordList()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
File diff suppressed because it is too large
Load Diff
@@ -5,7 +5,8 @@
|
||||
<div class="info">
|
||||
<a @click="linkOpen('http://zyplayer.fun/')">官网</a>
|
||||
<a @click="linkOpen('https://github.com/Hunlongyu/ZY-Player')">Github</a>
|
||||
<a @click="linkOpen('https://github.com/Hunlongyu/ZY-Player/issues')">v{{pkg.version}} 反馈</a>
|
||||
<a @click="linkOpen('https://github.com/Hunlongyu/ZY-Player/issues')">当前版本v{{pkg.version}} 反馈</a>
|
||||
<a style="color:#38dd77" @click="quitAndInstall()" v-show="latestVersion !== pkg.version" >最新版本v{{latestVersion}}</a>
|
||||
</div>
|
||||
<div class="view">
|
||||
<div class="title">视图</div>
|
||||
@@ -39,31 +40,56 @@
|
||||
<div class="zy-select">
|
||||
<div class="vs-placeholder vs-noAfter" @click="impShortcut">导入</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="shortcut">
|
||||
<div class="title">缓存</div>
|
||||
<div class="shortcut-box">
|
||||
<div class="zy-select">
|
||||
<div class="vs-placeholder vs-noAfter" @click="openDoc('shortcut')">说明文档</div>
|
||||
<div class="vs-placeholder vs-noAfter" @click="clearCache">清理视频缓存</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site">
|
||||
<div class="title">源管理</div>
|
||||
<div class="site-box">
|
||||
<div class="zy-select" @mouseleave="show.site = false">
|
||||
<div class="vs-placeholder" @click="show.site = true">默认源</div>
|
||||
<div class="vs-options" v-show="show.site">
|
||||
<ul class="zy-scroll" style="height: 300px">
|
||||
<li :class="d.site === i.key ? 'active' : ''" v-for="(i, j) in sitesList" :key="j" @click="siteClick(i.key)">{{ i.name }}</li>
|
||||
</ul>
|
||||
<div class="title">定位时间设置</div>
|
||||
<div class="zy-input">
|
||||
左/右方向键:<input style="width:50px" type="number" v-model = "d.forwardTimeInSec" @change="updateSettingEvent">秒
|
||||
</div>
|
||||
</div>
|
||||
<div class='search'>
|
||||
<div class="title">搜索</div>
|
||||
<div class="zy-input" @click="toggleSearchAllSites">
|
||||
<input type="checkbox" v-model = "d.searchAllSites" @change="updateSettingEvent"> 搜索所有资源
|
||||
</div>
|
||||
</div>
|
||||
<div class='site'>
|
||||
<div class="title">第三方播放</div>
|
||||
<div class="site-box">
|
||||
<div class="zy-select">
|
||||
<div class="vs-placeholder vs-noAfter" @click="selectLocalPlayer">选择本地播放器</div>
|
||||
</div>
|
||||
<div class="zy-select" @click = "editPlayerPath = true">
|
||||
<div class="vs-placeholder vs-noAfter" v-show = "editPlayerPath == false">
|
||||
<label>编辑</label>
|
||||
</div>
|
||||
<input class="zy-input" v-show = "editPlayerPath == true" v-model = "d.externalPlayer"
|
||||
@blur= "updateSettingEvent"
|
||||
@keyup.enter = "updateSettingEvent">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site">
|
||||
<div class="title">源管理</div>
|
||||
<div class="site-box">
|
||||
<div class="zy-select">
|
||||
<div class="vs-placeholder vs-noAfter" @click="expSites">导出</div>
|
||||
<div class="vs-placeholder vs-noAfter" @click="editSitesEvent">编辑源</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div class="vs-placeholder vs-noAfter" @click="impSites">导入</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div class="vs-placeholder vs-noAfter" @click="openDoc('sites')">说明文档</div>
|
||||
<div class="zy-input" @click="toggleExcludeRootClasses">
|
||||
<input type="checkbox" v-model = "d.excludeRootClasses" @change="updateSettingEvent"> 屏蔽主分类
|
||||
</div>
|
||||
<div class="zy-input" @click="toggleExcludeR18Films">
|
||||
<input type="checkbox" v-model = "d.excludeR18Films" @change="updateSettingEvent"> 屏蔽福利片
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="theme">
|
||||
@@ -98,13 +124,13 @@
|
||||
<div class="qrcode">
|
||||
<div class="title">请作者吃辣条</div>
|
||||
<div class="qrcode-box">
|
||||
<img class="qrcode-item" src="../assets/image/alipay.png">
|
||||
<img class="qrcode-item" src="../assets/image/wepay.jpg">
|
||||
<img class="qrcode-item" src="../assets/image/wepay-hunlongyu.png">
|
||||
<img class="qrcode-item" src="../assets/image/wepay_cuiocean.jpg">
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearDB">
|
||||
<span @click="clearDBEvent" class="clearBtn">软件重置</span>
|
||||
<span class="clearTips">如非必要, 切勿点击. 会清空用户数据, 恢复默认设置. 点击即软件重置, 并关闭软件.</span>
|
||||
<span class="clearTips">如果新安装用户, 无法显示资源, 请点击软件重置. 如非必要, 切勿点击. 会清空用户数据, 恢复默认设置. 点击即软件重置, 并关闭软件.</span>
|
||||
</div>
|
||||
<div class="Tips">
|
||||
<span>所有资源来自网上, 该软件不参与任何制作, 上传, 储存等内容, 禁止传播违法资源. 该软件仅供学习参考, 请于安装后24小时内删除.</span>
|
||||
@@ -116,7 +142,8 @@
|
||||
import { mapMutations } from 'vuex'
|
||||
import pkg from '../../package.json'
|
||||
import { setting, sites, shortcut } from '../lib/dexie'
|
||||
import { shell, clipboard, remote } from 'electron'
|
||||
import { sites as defaultSites } from '../lib/dexie/initData'
|
||||
import { shell, clipboard, remote, ipcRenderer } from 'electron'
|
||||
import db from '../lib/dexie/dexie'
|
||||
export default {
|
||||
name: 'setting',
|
||||
@@ -130,16 +157,35 @@ export default {
|
||||
shortcut: false,
|
||||
view: false
|
||||
},
|
||||
externalPlayer: '',
|
||||
editPlayerPath: false,
|
||||
excludeR18Films: true,
|
||||
latestVersion: pkg.version,
|
||||
forwardTimeInSec: 5,
|
||||
d: {
|
||||
id: 0,
|
||||
site: '',
|
||||
theme: '',
|
||||
shortcut: true,
|
||||
view: 'picture'
|
||||
searchAllSites: true,
|
||||
view: 'picture',
|
||||
externalPlayer: '',
|
||||
editPlayerPath: false,
|
||||
excludeRootClasses: true,
|
||||
excludeR18Films: true,
|
||||
forwardTimeInSec: 5
|
||||
}
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
view: {
|
||||
get () {
|
||||
return this.$store.getters.getView
|
||||
},
|
||||
set (val) {
|
||||
this.SET_VIEW(val)
|
||||
}
|
||||
},
|
||||
setting: {
|
||||
get () {
|
||||
return this.$store.getters.getSetting
|
||||
@@ -147,10 +193,18 @@ export default {
|
||||
set (val) {
|
||||
this.SET_SETTING(val)
|
||||
}
|
||||
},
|
||||
editSites: {
|
||||
get () {
|
||||
return this.$store.getters.getEditSites
|
||||
},
|
||||
set (val) {
|
||||
this.SET_EDITSITES(val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_SETTING']),
|
||||
...mapMutations(['SET_SETTING', 'SET_VIEW', 'SET_EDITSITES']),
|
||||
linkOpen (e) {
|
||||
shell.openExternal(e)
|
||||
},
|
||||
@@ -158,17 +212,29 @@ export default {
|
||||
setting.find().then(res => {
|
||||
this.d = {
|
||||
id: res.id,
|
||||
site: res.site,
|
||||
theme: res.theme,
|
||||
shortcut: res.shortcut,
|
||||
view: res.view
|
||||
view: res.view,
|
||||
externalPlayer: res.externalPlayer,
|
||||
searchAllSites: res.searchAllSites,
|
||||
excludeRootClasses: res.excludeRootClasses,
|
||||
excludeR18Films: res.excludeR18Films,
|
||||
forwardTimeInSec: res.forwardTimeInSec
|
||||
}
|
||||
this.setting = this.d
|
||||
})
|
||||
},
|
||||
getSites () {
|
||||
sites.all().then(res => {
|
||||
this.sitesList = res
|
||||
if (res.length <= 0) {
|
||||
this.$message.warning('检测到视频源未能正常加载, 即将重置源.')
|
||||
sites.clear().then(sites.bulkAdd(defaultSites).then(this.getSites()))
|
||||
} else {
|
||||
this.sitesList = res
|
||||
this.editSites = {
|
||||
sites: res
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
getShortcut () {
|
||||
@@ -178,56 +244,80 @@ export default {
|
||||
},
|
||||
changeView (e) {
|
||||
this.d.view = e
|
||||
this.updateSettingEvent()
|
||||
this.show.view = false
|
||||
},
|
||||
async clearCache () {
|
||||
const win = remote.getCurrentWindow()
|
||||
const ses = win.webContents.session
|
||||
const size = await ses.getCacheSize() / 1024 / 1024
|
||||
const mb = size.toFixed(2)
|
||||
await ses.clearCache()
|
||||
this.$message.success(`清除缓存成功, 共清理 ${mb} MB`)
|
||||
},
|
||||
updateSettingEvent () {
|
||||
this.editPlayerPath = false
|
||||
this.setting = this.d
|
||||
setting.update(this.d)
|
||||
},
|
||||
toggleSearchAllSites () {
|
||||
this.d.searchAllSites = !this.d.searchAllSites
|
||||
this.updateSettingEvent()
|
||||
},
|
||||
toggleExcludeR18Films () {
|
||||
this.d.excludeR18Films = !this.d.excludeR18Films
|
||||
this.updateSettingEvent()
|
||||
},
|
||||
toggleExcludeRootClasses () {
|
||||
this.d.excludeRootClasses = !this.d.excludeRootClasses
|
||||
this.updateSettingEvent()
|
||||
},
|
||||
selectLocalPlayer () {
|
||||
const options = {
|
||||
filters: [
|
||||
{ name: 'Executable file', extensions: ['exe'] },
|
||||
{ name: 'All types', extensions: ['*'] }
|
||||
],
|
||||
properties: ['openFile']
|
||||
}
|
||||
remote.dialog.showOpenDialog(options).then(result => {
|
||||
if (!result.canceled) {
|
||||
var playerPath = result.filePaths[0].replace(/\\/g, '/')
|
||||
this.$message.success('设定第三方播放器路径为:' + result.filePaths[0])
|
||||
this.d.externalPlayer = playerPath
|
||||
this.updateSettingEvent()
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err)
|
||||
})
|
||||
},
|
||||
resetLocalPlayer () {
|
||||
this.d.externalPlayer = ''
|
||||
setting.update(this.d).then(res => {
|
||||
this.$message.success('修改成功')
|
||||
this.show.view = false
|
||||
this.setting = this.d
|
||||
this.updateSettingEvent()
|
||||
this.$message.success('重置第三方播放器成功')
|
||||
})
|
||||
},
|
||||
siteClick (e) {
|
||||
this.d.site = e
|
||||
setting.update(this.d).then(res => {
|
||||
this.$message.success('修改默认源成功')
|
||||
this.setting = this.d
|
||||
this.show.site = false
|
||||
})
|
||||
updatePlayerPath () {
|
||||
this.$message.success('设定第三方播放器路径为:' + this.d.externalPlayer)
|
||||
this.editPlayerPath = false
|
||||
this.updateSettingEvent()
|
||||
},
|
||||
expSites () {
|
||||
const arr = [...this.sitesList]
|
||||
const str = JSON.stringify(arr)
|
||||
clipboard.writeText(str)
|
||||
this.$message.success('已复制到剪贴板')
|
||||
},
|
||||
impSites () {
|
||||
const str = clipboard.readText()
|
||||
const json = JSON.parse(str)
|
||||
sites.clear().then(res => {
|
||||
this.$message.info('已清空原数据')
|
||||
sites.add(json).then(e => {
|
||||
this.$message.success('已添加成功')
|
||||
this.getSites()
|
||||
this.d.site = json[0].key
|
||||
this.setting = this.d
|
||||
})
|
||||
})
|
||||
editSitesEvent () {
|
||||
this.view = 'EditSites'
|
||||
},
|
||||
changeTheme (e) {
|
||||
this.d.theme = e
|
||||
setting.update(this.d).then(res => {
|
||||
this.$message.success('修改成功')
|
||||
})
|
||||
this.updateSettingEvent()
|
||||
},
|
||||
changeShortcut (e) {
|
||||
this.d.shortcut = e
|
||||
setting.update(this.d).then(res => {
|
||||
this.$message.success('修改成功')
|
||||
this.setting = this.d
|
||||
this.show.shortcut = false
|
||||
})
|
||||
this.updateSettingEvent()
|
||||
this.show.shortcut = false
|
||||
},
|
||||
expShortcut () {
|
||||
const arr = [...this.shortcutList]
|
||||
const str = JSON.stringify(arr)
|
||||
const str = JSON.stringify(arr, null, 2)
|
||||
clipboard.writeText(str)
|
||||
this.$message.success('已复制到剪贴板')
|
||||
},
|
||||
@@ -258,12 +348,41 @@ export default {
|
||||
this.linkOpen('http://zyplayer.fun/doc/shortcut/')
|
||||
return false
|
||||
}
|
||||
},
|
||||
getLatestVersion () {
|
||||
ipcRenderer.send('checkForUpdate')
|
||||
ipcRenderer.on('update-available', (e, info) => {
|
||||
this.latestVersion = info.version
|
||||
})
|
||||
ipcRenderer.on('update-error', () => {
|
||||
this.$message.warning = '更新出错.'
|
||||
})
|
||||
ipcRenderer.on('update-downloaded', () => {
|
||||
this.$message.info = '下载完毕, 退出安装'
|
||||
})
|
||||
},
|
||||
quitAndInstall () {
|
||||
this.$message.success('已开始下载更新,下载完毕后,将自动退出安装。')
|
||||
ipcRenderer.send('quitAndInstall')
|
||||
},
|
||||
createContextMenu () {
|
||||
const { Menu, MenuItem } = remote
|
||||
const menu = new Menu()
|
||||
menu.append(new MenuItem({ label: '快速复制', role: 'copy' }))
|
||||
menu.append(new MenuItem({ label: '快速粘贴', role: 'paste' }))
|
||||
menu.append(new MenuItem({ label: '编辑', role: 'editMenu' }))
|
||||
window.addEventListener('contextmenu', e => {
|
||||
e.preventDefault()
|
||||
menu.popup(remote.getCurrentWindow())
|
||||
})
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.getSetting()
|
||||
this.getSites()
|
||||
this.getSetting()
|
||||
this.getShortcut()
|
||||
this.getLatestVersion()
|
||||
this.createContextMenu()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
@@ -311,6 +430,11 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
.search{
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
}
|
||||
.site{
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
@@ -339,6 +463,7 @@ export default {
|
||||
margin-top: 20px;
|
||||
.theme-box{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
margin-top: 10px;
|
||||
.theme-item{
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
<template>
|
||||
<div class="share" id="share" @click="shareClickEvent">
|
||||
<div class="left">
|
||||
<img :src="pic" alt="">
|
||||
<img :src="pic" alt="" @load="picLoadEvent">
|
||||
</div>
|
||||
<div class="right">
|
||||
<div class="right" id="right">
|
||||
<div class="title">{{ share.info.name }}</div>
|
||||
<qrcode-vue id="qr" :value="link" :size="160" level="L" />
|
||||
<div class="tips">
|
||||
@@ -70,25 +70,31 @@ export default {
|
||||
zy.detail(this.share.key, id).then(res => {
|
||||
if (res) {
|
||||
this.pic = res.pic
|
||||
const text = res.dl.dd
|
||||
for (const i of text) {
|
||||
if (i._flag.indexOf('m3u8') >= 0) {
|
||||
const arr = i._t.split('#')
|
||||
const url = arr[0].split('$')[1]
|
||||
this.link = 'http://zyplayer.fun/player/player.html?url=' + url + '&title=' + this.share.info.name
|
||||
var m3u8List = {}
|
||||
const dd = res.dl.dd
|
||||
const type = Object.prototype.toString.call(dd)
|
||||
if (type === '[object Array]') {
|
||||
for (const i of dd) {
|
||||
if (i._flag.indexOf('m3u8') >= 0) {
|
||||
m3u8List = i._t.split('#')
|
||||
}
|
||||
}
|
||||
} else {
|
||||
m3u8List = dd._t.split('#')
|
||||
}
|
||||
this.loading = false
|
||||
this.$nextTick(() => {
|
||||
const dom = document.getElementById('share')
|
||||
html2canvas(dom, { useCORS: true, allowTaint: true }).then(res => {
|
||||
const png = res.toDataURL('image/png')
|
||||
const p = nativeImage.createFromDataURL(png)
|
||||
clipboard.writeImage(p)
|
||||
this.$message.success('已复制到剪贴板,快去分享吧~ 严禁传播违法资源!!!')
|
||||
})
|
||||
})
|
||||
const url = m3u8List[1]
|
||||
this.link = 'http://zyplayer.fun/player/player.html?url=' + url + '&title=' + this.share.info.name
|
||||
}
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
picLoadEvent () {
|
||||
const dom = document.getElementById('share')
|
||||
html2canvas(dom, { useCORS: true, allowTaint: true }).then(res => {
|
||||
const png = res.toDataURL('image/png')
|
||||
const p = nativeImage.createFromDataURL(png)
|
||||
clipboard.writeImage(p)
|
||||
this.$message.success('已复制到剪贴板,快去分享吧~ 严禁传播违法资源!!!')
|
||||
})
|
||||
}
|
||||
},
|
||||
@@ -108,7 +114,7 @@ export default {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 20px;
|
||||
padding: 0px;
|
||||
z-index: 999;
|
||||
.left, .right{
|
||||
width: 50%;
|
||||
@@ -125,6 +131,7 @@ export default {
|
||||
}
|
||||
}
|
||||
.right{
|
||||
padding: 10px;
|
||||
.title{
|
||||
font-size: 18px;
|
||||
margin-bottom: 10px;
|
||||
|
||||
@@ -1,38 +1,95 @@
|
||||
<template>
|
||||
<div class="star">
|
||||
<div class="body zy-scroll">
|
||||
<div class="zy-table">
|
||||
<div class="tBody">
|
||||
<ul>
|
||||
<li v-for="(i, j) in list" :key="j" @click="detailEvent(i)">
|
||||
<span class="name">{{i.name}}</span>
|
||||
<span class="type">{{i.type}}</span>
|
||||
<span class="time">{{i.year}}</span>
|
||||
<span class="from">{{i.site}}</span>
|
||||
<span class="operate" style="width: 220px">
|
||||
<span class="btn" @click.stop="playEvent(i)">播放</span>
|
||||
<span class="btn" @click.stop="deleteEvent(i)">删除</span>
|
||||
<span class="btn" @click.stop="shareEvent(i)">分享</span>
|
||||
<span class="btn" @click.stop="updateEvent(i)">同步</span>
|
||||
<span class="btn" @click.stop="downloadEvent(i)">下载</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="listpage" id="star">
|
||||
<div class="listpage-content">
|
||||
<div class="listpage-header">
|
||||
<el-button @click.stop="exportFavoritesEvent" icon="el-icon-upload2">导出</el-button>
|
||||
<el-button @click.stop="importFavoritesEvent" icon="el-icon-download">导入</el-button>
|
||||
<el-button @click.stop="clearFavoritesEvent" icon="el-icon-delete-solid">清空</el-button>
|
||||
<el-button @click.stop="updateAllEvent" icon="el-icon-refresh">同步所有收藏</el-button>
|
||||
</div>
|
||||
<div class="listpage-body" id="star-table">
|
||||
<el-table size="mini" fit height="100%" row-key="id"
|
||||
ref="starTable"
|
||||
:data="list"
|
||||
:cell-class-name="checkUpdate"
|
||||
@row-click="detailEvent"
|
||||
@sort-change="handleSortChange">
|
||||
<el-table-column
|
||||
sortable
|
||||
:sort-method="sortByName"
|
||||
prop="name"
|
||||
label="片名">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:sort-by="['type', 'name']"
|
||||
sortable
|
||||
:sort-method="sortByType"
|
||||
prop="type"
|
||||
label="类型"
|
||||
width="100">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
sortable
|
||||
:sort-by="['year', 'name']"
|
||||
prop="year"
|
||||
label="上映"
|
||||
width="100"
|
||||
align="center">
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
:sort-by="['site', 'name']"
|
||||
sortable
|
||||
:sort-method="sortBySite"
|
||||
prop="site"
|
||||
width="120"
|
||||
label="片源">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ getSiteName(scope.row.key) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column v-if="list.some(e => e.note)"
|
||||
prop="note"
|
||||
width="120"
|
||||
label="备注">
|
||||
</el-table-column>
|
||||
<el-table-column v-if="list.some(e => e.index >= 0)"
|
||||
prop="index"
|
||||
width="120"
|
||||
label="观看至">
|
||||
<template slot-scope="scope">
|
||||
<span>{{ getHistoryNote(scope.row.index) }}</span>
|
||||
</template>
|
||||
</el-table-column>
|
||||
<el-table-column
|
||||
label="操作"
|
||||
header-align="right"
|
||||
align="right">
|
||||
<template slot-scope="scope">
|
||||
<el-button @click.stop="playEvent(scope.row)" type="text">播放</el-button>
|
||||
<el-button @click.stop="shareEvent(scope.row)" type="text">分享</el-button>
|
||||
<el-button @click.stop="downloadEvent(scope.row)" type="text">下载</el-button>
|
||||
<el-button @click.stop="deleteEvent(scope.row)" type="text">删除</el-button>
|
||||
</template>
|
||||
</el-table-column>
|
||||
</el-table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { mapMutations } from 'vuex'
|
||||
import { star, history } from '../lib/dexie'
|
||||
import { star, history, sites } from '../lib/dexie'
|
||||
import zy from '../lib/site/tools'
|
||||
import { remote } from 'electron'
|
||||
import fs from 'fs'
|
||||
import Sortable from 'sortablejs'
|
||||
const { clipboard } = require('electron')
|
||||
export default {
|
||||
name: 'star',
|
||||
data () {
|
||||
return {
|
||||
list: []
|
||||
list: [],
|
||||
sites: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -71,26 +128,52 @@ export default {
|
||||
},
|
||||
watch: {
|
||||
view () {
|
||||
this.getStarList()
|
||||
this.getAllsites()
|
||||
this.getFavorites()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_VIEW', 'SET_DETAIL', 'SET_VIDEO', 'SET_SHARE']),
|
||||
handleSortChange (column, prop, order) {
|
||||
this.updateDatabase()
|
||||
},
|
||||
sortByName (a, b) {
|
||||
return a.name.localeCompare(b.name, 'zh')
|
||||
},
|
||||
sortByType (a, b) {
|
||||
return a.type.localeCompare(b.type)
|
||||
},
|
||||
sortBySite (a, b) {
|
||||
const siteA = this.getSiteName(a.key)
|
||||
if (!siteA) {
|
||||
return -1
|
||||
} else {
|
||||
return siteA.localeCompare(this.getSiteName(b.key))
|
||||
}
|
||||
},
|
||||
detailEvent (e) {
|
||||
this.detail = {
|
||||
show: true,
|
||||
key: e.site,
|
||||
info: e
|
||||
key: e.key,
|
||||
info: {
|
||||
id: e.ids,
|
||||
name: e.name
|
||||
}
|
||||
}
|
||||
if (e.hasUpdate) {
|
||||
this.clearHasUpdateFlag(e)
|
||||
}
|
||||
},
|
||||
playEvent (e) {
|
||||
history.find({ site: e.site, ids: e.ids }).then(res => {
|
||||
if (res) {
|
||||
this.video = { key: res.site, info: { id: res.ids, name: res.name, index: res.index } }
|
||||
} else {
|
||||
this.video = { key: e.site, info: { id: e.ids, name: e.name, index: 0 } }
|
||||
}
|
||||
})
|
||||
async playEvent (e) {
|
||||
const db = await history.find({ site: e.key, ids: e.ids })
|
||||
if (db) {
|
||||
this.video = { key: e.key, info: { id: db.ids, name: db.name, index: db.index } }
|
||||
} else {
|
||||
this.video = { key: e.key, info: { id: e.ids, name: e.name, index: 0 } }
|
||||
}
|
||||
if (e.hasUpdate) {
|
||||
this.clearHasUpdateFlag(e)
|
||||
}
|
||||
this.view = 'Play'
|
||||
},
|
||||
deleteEvent (e) {
|
||||
@@ -100,41 +183,71 @@ export default {
|
||||
} else {
|
||||
this.$message.success('删除成功')
|
||||
}
|
||||
this.getStarList()
|
||||
this.getFavorites()
|
||||
})
|
||||
},
|
||||
shareEvent (e) {
|
||||
this.share = {
|
||||
show: true,
|
||||
key: e.site,
|
||||
key: e.key,
|
||||
info: e
|
||||
}
|
||||
},
|
||||
checkUpdate ({ row, rowIndex }) {
|
||||
if (this.list[rowIndex].hasUpdate) {
|
||||
return 'highlight'
|
||||
}
|
||||
},
|
||||
async clearHasUpdateFlag (e) {
|
||||
const db = await star.find({ id: e.id })
|
||||
if (db) {
|
||||
db.hasUpdate = false
|
||||
star.update(e.id, db)
|
||||
this.getFavorites()
|
||||
}
|
||||
},
|
||||
updateEvent (e) {
|
||||
zy.detail(e.site, e.ids).then(res => {
|
||||
if (e.last === res.last) {
|
||||
this.$message.info('同步成功, 未查询到更新。')
|
||||
} else {
|
||||
const doc = {
|
||||
id: e.id,
|
||||
ids: res.id,
|
||||
last: res.last,
|
||||
name: res.name,
|
||||
site: e.site,
|
||||
type: res.type,
|
||||
year: res.year
|
||||
}
|
||||
star.update(e.id, doc).then(res => {
|
||||
this.$message.success('同步成功, 检查到更新.')
|
||||
})
|
||||
zy.detail(e.key, e.ids).then(res => {
|
||||
var doc = {
|
||||
id: e.id,
|
||||
key: e.key,
|
||||
ids: res.id,
|
||||
site: res.site,
|
||||
name: res.name,
|
||||
type: res.type,
|
||||
year: res.year,
|
||||
note: res.note,
|
||||
index: res.index,
|
||||
last: res.last,
|
||||
hasUpdate: res.hasUpdate
|
||||
}
|
||||
star.get(e.id).then(resStar => {
|
||||
doc.hasUpdate = resStar.hasUpdate
|
||||
var msg = ''
|
||||
if (e.last === res.last) {
|
||||
msg = `同步"${e.name}"成功, 未查询到更新。`
|
||||
this.$message.info(msg)
|
||||
} else {
|
||||
doc.hasUpdate = true
|
||||
msg = `同步"${e.name}"成功, 检查到更新。`
|
||||
this.$message.success(msg)
|
||||
}
|
||||
star.update(e.id, doc)
|
||||
this.getFavorites()
|
||||
})
|
||||
}).catch(err => {
|
||||
this.$message.warning('同步失败, 请重试', err)
|
||||
var msg = `同步"${e.name}"失败, 请重试。`
|
||||
this.$message.warning(msg, err)
|
||||
})
|
||||
},
|
||||
updateAllEvent () {
|
||||
this.list.forEach(e => {
|
||||
this.updateEvent(e)
|
||||
})
|
||||
},
|
||||
downloadEvent (e) {
|
||||
zy.download(e.site, e.ids).then(res => {
|
||||
if (res) {
|
||||
zy.download(e.key, e.ids).then(res => {
|
||||
if (res && res.dl && res.dl.dd) {
|
||||
const text = res.dl.dd._t
|
||||
if (text) {
|
||||
const list = text.split('#')
|
||||
@@ -149,41 +262,154 @@ export default {
|
||||
this.$message.warning('没有查询到下载链接.')
|
||||
}
|
||||
} else {
|
||||
const list = [...this.m3u8List]
|
||||
let downloadUrl = ''
|
||||
for (const i of list) {
|
||||
const url = encodeURI(i.split('$')[1])
|
||||
downloadUrl += (url + '\n')
|
||||
}
|
||||
clipboard.writeText(downloadUrl)
|
||||
this.$message.success('『M3U8』格式的链接已复制, 快去下载吧!')
|
||||
var m3u8List = {}
|
||||
zy.detail(e.key, e.ids).then(res => {
|
||||
const dd = res.dl.dd
|
||||
const type = Object.prototype.toString.call(dd)
|
||||
if (type === '[object Array]') {
|
||||
for (const i of dd) {
|
||||
if (i._flag.indexOf('m3u8') >= 0) {
|
||||
m3u8List = i._t.split('#')
|
||||
}
|
||||
}
|
||||
} else {
|
||||
m3u8List = dd._t.split('#')
|
||||
}
|
||||
const list = [...m3u8List]
|
||||
let downloadUrl = ''
|
||||
for (const i of list) {
|
||||
const url = encodeURI(i.split('$')[1])
|
||||
downloadUrl += (url + '\n')
|
||||
}
|
||||
clipboard.writeText(downloadUrl)
|
||||
this.$message.success('『M3U8』格式的链接已复制, 快去下载吧!')
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
getStarList () {
|
||||
getSiteName (key) {
|
||||
var site = this.sites.find(e => e.key === key)
|
||||
if (site) {
|
||||
return site.name
|
||||
}
|
||||
},
|
||||
getHistoryNote (index) {
|
||||
if (index !== null && index !== undefined) {
|
||||
return `第${index + 1}集`
|
||||
} else {
|
||||
return ''
|
||||
}
|
||||
},
|
||||
getFavorites () {
|
||||
star.all().then(res => {
|
||||
this.list = res.reverse()
|
||||
})
|
||||
},
|
||||
getAllsites () {
|
||||
sites.all().then(res => {
|
||||
this.sites = res
|
||||
})
|
||||
},
|
||||
exportFavoritesEvent () {
|
||||
const arr = [...this.list]
|
||||
const str = JSON.stringify(arr, null, 2)
|
||||
const options = {
|
||||
filters: [
|
||||
{ name: 'JSON file', extensions: ['json'] },
|
||||
{ name: 'Normal text file', extensions: ['txt'] },
|
||||
{ name: 'All types', extensions: ['*'] }
|
||||
]
|
||||
}
|
||||
remote.dialog.showSaveDialog(options).then(result => {
|
||||
if (!result.canceled) {
|
||||
fs.writeFileSync(result.filePath, str)
|
||||
this.$message.success('已保存成功')
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err)
|
||||
})
|
||||
},
|
||||
importFavoritesEvent () {
|
||||
const options = {
|
||||
filters: [
|
||||
{ name: 'JSON file', extensions: ['json'] },
|
||||
{ name: 'Normal text file', extensions: ['txt'] },
|
||||
{ name: 'All types', extensions: ['*'] }
|
||||
],
|
||||
properties: ['openFile', 'multiSelections']
|
||||
}
|
||||
remote.dialog.showOpenDialog(options).then(result => {
|
||||
if (!result.canceled) {
|
||||
var starList = this.list
|
||||
result.filePaths.forEach(file => {
|
||||
var str = fs.readFileSync(file)
|
||||
const json = JSON.parse(str)
|
||||
json.forEach(ele => {
|
||||
const starExists = starList.includes(x => x.key === ele.key && x.ids === ele.ids)
|
||||
if (!starExists) {
|
||||
var doc = {
|
||||
key: ele.key,
|
||||
ids: ele.ids,
|
||||
site: ele.site === undefined ? ele.site = this.sites.find(x => x.key === ele.key) : ele.site,
|
||||
name: ele.name,
|
||||
type: ele.type,
|
||||
year: ele.year,
|
||||
note: ele.note,
|
||||
index: ele.index,
|
||||
last: ele.last,
|
||||
hasUpdate: ele.hasUpdate
|
||||
}
|
||||
starList.push(doc)
|
||||
}
|
||||
})
|
||||
})
|
||||
star.clear().then(star.bulkAdd(starList).then(res => {
|
||||
this.getFavorites()
|
||||
this.$message.success('导入收藏成功')
|
||||
}))
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err)
|
||||
})
|
||||
},
|
||||
clearFavoritesEvent () {
|
||||
star.clear().then(e => {
|
||||
this.getFavorites()
|
||||
})
|
||||
},
|
||||
syncTableData () {
|
||||
if (this.$refs.starTable.tableData && this.$refs.starTable.tableData.length === this.list.length) {
|
||||
this.list = this.$refs.starTable.tableData
|
||||
}
|
||||
},
|
||||
updateDatabase () {
|
||||
this.syncTableData()
|
||||
star.clear().then(res => {
|
||||
var id = this.list.length
|
||||
this.list.forEach(ele => {
|
||||
ele.id = id
|
||||
id -= 1
|
||||
})
|
||||
star.bulkAdd(this.list)
|
||||
})
|
||||
},
|
||||
rowDrop () {
|
||||
const tbody = document.getElementById('star-table').querySelector('.el-table__body-wrapper tbody')
|
||||
const _this = this
|
||||
Sortable.create(tbody, {
|
||||
onEnd ({ newIndex, oldIndex }) {
|
||||
const currRow = _this.list.splice(oldIndex, 1)[0]
|
||||
_this.list.splice(newIndex, 0, currRow)
|
||||
_this.updateDatabase()
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
mounted () {
|
||||
this.rowDrop()
|
||||
},
|
||||
created () {
|
||||
this.getStarList()
|
||||
this.getFavorites()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.star{
|
||||
position: relative;
|
||||
height: calc(100% - 40px);
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 5px;
|
||||
.body{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
overflow: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -7,6 +7,9 @@ import Star from './Star'
|
||||
import Setting from './Setting'
|
||||
import Detail from './Detail'
|
||||
import Share from './Share'
|
||||
import History from './History'
|
||||
import EditSites from './EditSites'
|
||||
import IPTV from './IPTV'
|
||||
|
||||
export default {
|
||||
registerComponents () {
|
||||
@@ -18,5 +21,8 @@ export default {
|
||||
Vue.component('Setting', Setting)
|
||||
Vue.component('Detail', Detail)
|
||||
Vue.component('Share', Share)
|
||||
Vue.component('History', History)
|
||||
Vue.component('EditSites', EditSites)
|
||||
Vue.component('IPTV', IPTV)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,22 +1,25 @@
|
||||
import Dexie from 'dexie'
|
||||
import { setting, sites, localKey } from './initData'
|
||||
import { setting, sites, localKey, iptv } from './initData'
|
||||
|
||||
const db = new Dexie('zy')
|
||||
|
||||
db.version(3).stores({
|
||||
db.version(4).stores({
|
||||
search: '++id, keywords',
|
||||
setting: 'id, theme, site, shortcut, view',
|
||||
iptvSearch: '++id, keywords',
|
||||
setting: 'id, theme, site, shortcut, view, externalPlayer, searchAllSites, excludeRootClasses, excludeR18Films, forwardTimeInSec',
|
||||
shortcut: 'name, key, desc',
|
||||
star: '++id, site, ids, name, type, year, index',
|
||||
sites: '++id, key, name, json, xml, down, level',
|
||||
history: '++id, site, ids, name, type, year, index, time',
|
||||
mini: 'id, site, ids, name, index, time'
|
||||
star: '++id, [key+ids], site, name, type, year, note, index, last, hasUpdate',
|
||||
sites: '++id, key, name, api, download, isActive, group',
|
||||
history: '++id, [site+ids], name, type, year, index, time',
|
||||
mini: 'id, site, ids, name, index, time',
|
||||
iptv: '++id, name, url, group'
|
||||
})
|
||||
|
||||
db.on('populate', () => {
|
||||
db.setting.bulkAdd(setting)
|
||||
db.sites.bulkAdd(sites)
|
||||
db.shortcut.bulkAdd(localKey)
|
||||
db.iptv.bulkAdd(iptv)
|
||||
})
|
||||
|
||||
db.open()
|
||||
|
||||
@@ -4,8 +4,11 @@ export default {
|
||||
async add (doc) {
|
||||
return await history.add(doc)
|
||||
},
|
||||
async bulkAdd (doc) {
|
||||
return await history.bulkAdd(doc)
|
||||
},
|
||||
async find (doc) {
|
||||
return await history.get(doc)
|
||||
return await history.where(doc).first()
|
||||
},
|
||||
async update (id, docs) {
|
||||
return await history.update(id, docs)
|
||||
|
||||
@@ -5,6 +5,8 @@ import shortcut from './shortcut'
|
||||
import star from './star'
|
||||
import sites from './sites'
|
||||
import search from './search'
|
||||
import iptvSearch from './iptvSearch'
|
||||
import iptv from './iptv'
|
||||
|
||||
export {
|
||||
history,
|
||||
@@ -13,5 +15,7 @@ export {
|
||||
shortcut,
|
||||
star,
|
||||
sites,
|
||||
search
|
||||
iptv,
|
||||
search,
|
||||
iptvSearch
|
||||
}
|
||||
|
||||
1670
src/lib/dexie/iniData/Iptv.json
Normal file
1670
src/lib/dexie/iniData/Iptv.json
Normal file
File diff suppressed because it is too large
Load Diff
@@ -2,9 +2,13 @@ const setting = [
|
||||
{
|
||||
id: 0,
|
||||
theme: 'light',
|
||||
site: 'zuidazy',
|
||||
shortcut: true,
|
||||
view: 'picture'
|
||||
view: 'picture',
|
||||
externalPlayer: '',
|
||||
searchAllSites: true,
|
||||
excludeRootClasses: true,
|
||||
excludeR18Films: true,
|
||||
forwardTimeInSec: 5
|
||||
}
|
||||
]
|
||||
|
||||
@@ -14,168 +18,225 @@ const sites = [
|
||||
key: 'okzy',
|
||||
name: 'OK 资源网',
|
||||
api: 'http://cj.okzy.tv/inc/api.php',
|
||||
download: 'http://cj.okzy.tv/inc/apidown.php'
|
||||
download: 'http://cj.okzy.tv/inc/apidown.php',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
key: 'zuidazy',
|
||||
name: '最大资源网',
|
||||
api: 'http://www.zdziyuan.com/inc/api.php',
|
||||
download: 'http://www.zdziyuan.com/inc/apidown.php'
|
||||
download: 'http://www.zdziyuan.com/inc/apidown.php',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 3,
|
||||
key: 'doubanzy',
|
||||
name: '豆瓣电影资源',
|
||||
api: 'http://v.1988cj.com/inc/api.php',
|
||||
download: 'http://v.1988cj.com/inc/apidown.php'
|
||||
download: 'http://v.1988cj.com/inc/apidown.php',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 4,
|
||||
key: '135zy',
|
||||
name: '135 资源网',
|
||||
api: 'http://cj.zycjw1.com/inc/api.php',
|
||||
download: 'http://cj.zycjw1.com/inc/apidown.php'
|
||||
download: 'http://cj.zycjw1.com/inc/apidown.php',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 5,
|
||||
key: 'kuyunzy',
|
||||
name: '酷云资源',
|
||||
api: 'http://caiji.kuyun98.com/inc/ldg_api.php',
|
||||
download: 'http://caiji.kuyun98.com/inc/apidown.php'
|
||||
download: 'http://caiji.kuyun98.com/inc/apidown.php',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 6,
|
||||
key: 'mgtvzy',
|
||||
name: '芒果 TV 资源网',
|
||||
api: 'https://api.shijiapi.com/api.php/provide/vod/at/xml/',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 7,
|
||||
key: 'subo988',
|
||||
name: '速播资源站',
|
||||
api: 'https://www.subo988.com/inc/api.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 8,
|
||||
key: '209zy',
|
||||
name: '209 资源',
|
||||
api: 'http://cj.1156zy.com/inc/api.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 9,
|
||||
key: 'zuixinzy',
|
||||
name: '最新资源',
|
||||
api: 'http://api.zuixinapi.com/inc/api.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 10,
|
||||
key: 'kubozy',
|
||||
name: '酷播资源',
|
||||
api: 'http://api.kbzyapi.com/inc/api.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 11,
|
||||
key: 'yongjiuzy',
|
||||
name: '永久资源',
|
||||
api: 'http://cj.yongjiuzyw.com/inc/api.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 12,
|
||||
key: '123ku',
|
||||
name: '123 资源',
|
||||
api: 'http://cj.123ku2.com:12315/inc/api.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 13,
|
||||
key: '88zyw',
|
||||
name: '88 影视资源站',
|
||||
api: 'http://www.88zyw.net/inc/api.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 14,
|
||||
key: 'wolongzy',
|
||||
name: '卧龙资源',
|
||||
api: 'http://cj.wlzy.tv/inc/api_mac.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 15,
|
||||
key: 'mahuazy',
|
||||
name: '麻花资源',
|
||||
api: 'https://www.mhapi123.com/inc/api.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 16,
|
||||
key: 'kkzy',
|
||||
name: '快快资源',
|
||||
api: 'https://api.kkzy.tv/inc/api.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 17,
|
||||
key: '158zy',
|
||||
name: '壹伍捌资源网',
|
||||
api: 'http://cj.158zyz.net:158/inc/api.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 18,
|
||||
key: 'rrzy',
|
||||
name: '人人资源',
|
||||
api: 'https://www.rrzyw.cc/api.php/provide/vod/from/rrm3u8/at/xml/',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 19,
|
||||
key: 'mokazy',
|
||||
name: '魔卡资源网',
|
||||
api: 'https://cj.heiyap.com/api.php/provide/vod/at/xml/',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 20,
|
||||
key: 'kyzy',
|
||||
name: '快影资源站',
|
||||
api: 'https://www.kyzy.tv/api.php/kyyun/vod/at/xml/',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 21,
|
||||
key: 'solezy',
|
||||
name: '搜乐资源网',
|
||||
api: 'https://www.caijizy.vip/api.php/provide/vod/at/xml/',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 22,
|
||||
key: 'bbkdj',
|
||||
name: '步步高顶尖资源网',
|
||||
api: 'http://api.bbkdj.com/api',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 23,
|
||||
key: '1886zy',
|
||||
name: '1886 资源',
|
||||
api: 'http://cj.1886zy.co/inc/api.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 24,
|
||||
key: 'mbo',
|
||||
name: '秒播资源',
|
||||
api: 'http://caiji.mb77.vip/inc/api.php',
|
||||
download: ''
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
},
|
||||
{
|
||||
id: 25,
|
||||
key: '605zy',
|
||||
name: '605资源',
|
||||
api: 'http://www.605zy.net/inc/seacmsapi.php',
|
||||
download: '',
|
||||
isActive: 1,
|
||||
group: '默认'
|
||||
}
|
||||
]
|
||||
|
||||
@@ -280,9 +341,12 @@ const getSite = (key) => {
|
||||
}
|
||||
}
|
||||
|
||||
const iptv = require('./iniData/Iptv.json')
|
||||
|
||||
export {
|
||||
setting,
|
||||
sites,
|
||||
iptv,
|
||||
localKey,
|
||||
getSite
|
||||
}
|
||||
|
||||
25
src/lib/dexie/iptv.js
Normal file
25
src/lib/dexie/iptv.js
Normal file
@@ -0,0 +1,25 @@
|
||||
import db from './dexie'
|
||||
const { iptv } = db
|
||||
export default {
|
||||
async all () {
|
||||
return await iptv.toArray()
|
||||
},
|
||||
async clear () {
|
||||
return await iptv.clear()
|
||||
},
|
||||
async add (doc) {
|
||||
return await iptv.add(doc)
|
||||
},
|
||||
async bulkAdd (doc) {
|
||||
return await iptv.bulkAdd(doc)
|
||||
},
|
||||
async find (doc) {
|
||||
return await iptv.get(doc)
|
||||
},
|
||||
async update (id, docs) {
|
||||
return await iptv.update(id, docs)
|
||||
},
|
||||
async remove (id) {
|
||||
return await iptv.delete(id)
|
||||
}
|
||||
}
|
||||
22
src/lib/dexie/iptvSearch.js
Normal file
22
src/lib/dexie/iptvSearch.js
Normal file
@@ -0,0 +1,22 @@
|
||||
import db from './dexie'
|
||||
const { iptvSearch } = db
|
||||
export default {
|
||||
async add (doc) {
|
||||
return await iptvSearch.add(doc)
|
||||
},
|
||||
async find (doc) {
|
||||
return await iptvSearch.get(doc)
|
||||
},
|
||||
async update (id, docs) {
|
||||
return await iptvSearch.update(id, docs)
|
||||
},
|
||||
async all () {
|
||||
return await iptvSearch.toArray()
|
||||
},
|
||||
async remove (id) {
|
||||
return await iptvSearch.delete(id)
|
||||
},
|
||||
async clear () {
|
||||
return await iptvSearch.clear()
|
||||
}
|
||||
}
|
||||
@@ -7,7 +7,16 @@ export default {
|
||||
async clear () {
|
||||
return await sites.clear()
|
||||
},
|
||||
async add (doc) {
|
||||
async bulkAdd (doc) {
|
||||
return await sites.bulkAdd(doc)
|
||||
},
|
||||
async find (doc) {
|
||||
return await sites.get(doc)
|
||||
},
|
||||
async add (doc) {
|
||||
return await sites.add(doc)
|
||||
},
|
||||
async remove (id) {
|
||||
return await sites.delete(id)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,8 +4,11 @@ export default {
|
||||
async add (doc) {
|
||||
return await star.add(doc)
|
||||
},
|
||||
async bulkAdd (doc) {
|
||||
return await star.bulkAdd(doc)
|
||||
},
|
||||
async find (doc) {
|
||||
return await star.get(doc)
|
||||
return await star.where(doc).first()
|
||||
},
|
||||
async update (id, docs) {
|
||||
return await star.update(id, docs)
|
||||
@@ -15,5 +18,11 @@ export default {
|
||||
},
|
||||
async remove (id) {
|
||||
return await star.delete(id)
|
||||
},
|
||||
async get (id) {
|
||||
return await star.get(id)
|
||||
},
|
||||
async clear () {
|
||||
return await star.clear()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,16 @@
|
||||
import Vue from 'vue'
|
||||
import { Message } from 'element-ui'
|
||||
import { Message, Button, Table, TableColumn, Tag, Input, Dialog, Form, FormItem, Switch, Select, Option } from 'element-ui'
|
||||
import Plugin from 'v-fit-columns'
|
||||
Vue.use(Button)
|
||||
Vue.use(Table)
|
||||
Vue.use(TableColumn)
|
||||
Vue.use(Tag)
|
||||
Vue.use(Input)
|
||||
Vue.use(Dialog)
|
||||
Vue.use(Form)
|
||||
Vue.use(FormItem)
|
||||
Vue.use(Switch)
|
||||
Vue.use(Plugin)
|
||||
Vue.use(Select)
|
||||
Vue.use(Option)
|
||||
Vue.prototype.$message = Message
|
||||
|
||||
317
src/lib/site/onlineVideo.js
Normal file
317
src/lib/site/onlineVideo.js
Normal file
@@ -0,0 +1,317 @@
|
||||
import open from 'open'
|
||||
import axios from 'axios'
|
||||
import cheerio from 'cheerio'
|
||||
|
||||
const onlineVideo = {
|
||||
playVideoOnline (selectedOnlineSite, videoName, videoIndex) {
|
||||
switch (selectedOnlineSite) {
|
||||
case '哔嘀':
|
||||
onlineVideo.playVideoOnBde4(videoName, videoIndex)
|
||||
break
|
||||
case '1080影视':
|
||||
onlineVideo.playVideoOnK1080(videoName, videoIndex)
|
||||
break
|
||||
case '素白白':
|
||||
onlineVideo.playVideoOnSubaibai(videoName, videoIndex)
|
||||
break
|
||||
case '哆咪动漫':
|
||||
onlineVideo.playVideoOndmdm2020(videoName, videoIndex)
|
||||
break
|
||||
case '樱花动漫':
|
||||
onlineVideo.playVideoOnYhdm(videoName, videoIndex)
|
||||
break
|
||||
case '简影':
|
||||
onlineVideo.playVideoOnSyrme(videoName, videoIndex)
|
||||
break
|
||||
case '极品':
|
||||
onlineVideo.playVideoOnJpysvip(videoName, videoIndex)
|
||||
break
|
||||
case '喜欢看':
|
||||
onlineVideo.playVideoOnXhkan(videoName, videoIndex)
|
||||
break
|
||||
default:
|
||||
this.$message.console.error(`不支持该网站:${this.selectedOnlineSite}`)
|
||||
}
|
||||
},
|
||||
playVideoOnBde4 (videoName, videoIndex) {
|
||||
videoName = videoName.replace(/\s/g, '')
|
||||
var url = `https://bde4.com/search/${videoName}`
|
||||
axios.get(url).then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
var e = $('div.search-list')
|
||||
var searchResult = $(e).find('div>div>div>div>a').toArray()
|
||||
// 获取第一个搜索结果的视频链接
|
||||
var detailPageLink = $(searchResult[0]).attr('href')
|
||||
// 获取第一个搜索结果的title
|
||||
var title = $(searchResult[0]).attr('title')
|
||||
if (title === null || title === undefined || !title.replace(/\s/g, '').includes(videoName)) {
|
||||
// 如果第一个搜索结果不符合,打开搜索页面
|
||||
open(url)
|
||||
} else {
|
||||
var detailPageFullLink = 'https://bde4.com/' + detailPageLink
|
||||
// 解析详情页面
|
||||
axios.get(detailPageFullLink).then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
var e = $('div.info1')
|
||||
var videoList = $(e).find('a').toArray()
|
||||
var videoFullLink = detailPageFullLink
|
||||
// 获取index视频链接
|
||||
if (videoIndex < videoList.length) {
|
||||
var indexVideoLink = $(videoList[videoIndex]).attr('href')
|
||||
if (indexVideoLink.includes('.htm')) {
|
||||
videoFullLink = 'https://bde4.com' + indexVideoLink
|
||||
}
|
||||
}
|
||||
open(videoFullLink)
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
playVideoOnK1080 (videoName, videoIndex) {
|
||||
videoName = videoName.replace(/\s/g, '')
|
||||
var url = `https://k1080.net/vodsearch123/-------------.html?wd=${videoName}&submit=`
|
||||
axios.get(url).then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
var e = $('#searchList')
|
||||
var searchResult = $(e).find('li>div>a').toArray()
|
||||
// 获取第一个搜索结果的视频链接
|
||||
var detailPageLink = $(searchResult[0]).attr('href')
|
||||
// 获取第一个搜索结果的title
|
||||
var title = $(searchResult[0]).attr('title')
|
||||
if (title === null || title === undefined || !title.replace(/\s/g, '').includes(videoName)) {
|
||||
// 如果第一个搜索结果不符合,打开搜索页面
|
||||
open(url)
|
||||
} else {
|
||||
// 解析详情页面
|
||||
var detailPageFullLink = 'https://k1080.net' + detailPageLink
|
||||
axios.get(detailPageFullLink).then(res2 => {
|
||||
const $ = cheerio.load(res2.data)
|
||||
// 获取playlist1
|
||||
var e = $('#playlist1')
|
||||
// 获取所有视频链接
|
||||
var videoList = $(e).find('div>ul>li>a').toArray()
|
||||
var videoFullLink = detailPageFullLink
|
||||
// 获取index视频链接
|
||||
if (videoIndex < videoList.length) {
|
||||
var indexVideoLink = $(videoList[videoIndex]).attr('href')
|
||||
if (indexVideoLink.includes('.htm')) {
|
||||
videoFullLink = 'https://k1080.net' + indexVideoLink
|
||||
}
|
||||
}
|
||||
open(videoFullLink)
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
playVideoOnSubaibai (videoName, videoIndex) {
|
||||
videoName = videoName.replace(/\s/g, '')
|
||||
var url = `https://www.subaibai.com/xssearch?q=${videoName}`
|
||||
axios.get(url).then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
var e = $('div.search_list')
|
||||
var searchResult = $(e).find('div>ul>li>h3>a').toArray()
|
||||
// 获取第一个搜索结果的视频链接
|
||||
var detailPageLink = $(searchResult[0]).attr('href')
|
||||
// 获取第一个搜索结果的title
|
||||
var title = $(searchResult[0]).text()
|
||||
if (title === null || title === undefined || !title.replace(/\s/g, '').includes(videoName)) {
|
||||
// 如果第一个搜索结果不符合,打开搜索页面
|
||||
open(url)
|
||||
} else {
|
||||
// 解析详情页面
|
||||
var detailPageFullLink = detailPageLink
|
||||
axios.get(detailPageFullLink).then(res2 => {
|
||||
const $ = cheerio.load(res2.data)
|
||||
// 获取playlist1
|
||||
var e = $('div.paly_list_btn')
|
||||
// 获取所有视频链接
|
||||
var videoList = $(e).find('a').toArray()
|
||||
// 获取index视频链接
|
||||
var videoFullLink = detailPageFullLink
|
||||
if (videoIndex < videoList.length) {
|
||||
var indexVideoLink = $(videoList[videoIndex]).attr('href')
|
||||
if (indexVideoLink.includes('.htm')) {
|
||||
videoFullLink = indexVideoLink
|
||||
}
|
||||
}
|
||||
open(videoFullLink)
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
playVideoOnYhdm (videoName, videoIndex) {
|
||||
videoName = videoName.replace(/\s/g, '')
|
||||
var url = `http://www.yhdm.tv/search/${videoName}`
|
||||
axios.get(url).then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
var e = $('div.lpic')
|
||||
var searchResult = $(e).find('div>ul>li>h2>a').toArray()
|
||||
// 获取第一个搜索结果的视频链接
|
||||
var detailPageLink = $(searchResult[0]).attr('href')
|
||||
// 获取第一个搜索结果的title
|
||||
var title = $(searchResult[0]).attr('title')
|
||||
if (title === null || title === undefined || !title.replace(/\s/g, '').includes(videoName)) {
|
||||
// 如果第一个搜索结果不符合,打开搜索页面
|
||||
open(url)
|
||||
} else {
|
||||
// 解析详情页面
|
||||
var detailPageFullLink = 'http://www.yhdm.tv/' + detailPageLink
|
||||
axios.get(detailPageFullLink).then(res2 => {
|
||||
const $ = cheerio.load(res2.data)
|
||||
// 获取playlist1
|
||||
var e = $('div.movurl')
|
||||
// 获取所有视频链接
|
||||
var videoList = $(e).find('div>ul>li>a').toArray()
|
||||
// 获取index视频链接
|
||||
var videoFullLink = detailPageFullLink
|
||||
if (videoIndex < videoList.length) {
|
||||
var indexVideoLink = $(videoList[videoIndex]).attr('href')
|
||||
if (indexVideoLink.includes('.htm')) {
|
||||
videoFullLink = 'http://www.yhdm.tv/' + indexVideoLink
|
||||
}
|
||||
}
|
||||
open(videoFullLink)
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
playVideoOndmdm2020 (videoName, videoIndex) {
|
||||
videoName = videoName.replace(/\s/g, '')
|
||||
var url = `http://www.dmdm2020.com/dongmansearch.html?wd=${videoName}&submit=`
|
||||
axios.get(url).then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
var e = $('#searchList')
|
||||
var searchResult = $(e).find('ul>li>div>h4>a').toArray()
|
||||
// 获取第一个搜索结果的视频链接
|
||||
var detailPageLink = $(searchResult[0]).attr('href')
|
||||
// 获取第一个搜索结果的title
|
||||
var title = $(searchResult[0]).text()
|
||||
if (title === null || title === undefined || !title.replace(/\s/g, '').includes(videoName)) {
|
||||
// 如果第一个搜索结果不符合,打开搜索页面
|
||||
open(url)
|
||||
} else {
|
||||
// 解析详情页面
|
||||
var detailPageFullLink = 'http://www.dmdm2020.com' + detailPageLink
|
||||
axios.get(detailPageFullLink).then(res2 => {
|
||||
const $ = cheerio.load(res2.data)
|
||||
// 获取playlist1
|
||||
var e = $('#playlist1')
|
||||
// 获取所有视频链接
|
||||
var videoList = $(e).find('div>ul>li>a').toArray()
|
||||
// 获取index视频链接
|
||||
var videoFullLink = detailPageFullLink
|
||||
if (videoIndex < videoList.length) {
|
||||
var indexVideoLink = $(videoList[videoIndex]).attr('href')
|
||||
if (indexVideoLink.includes('.htm')) {
|
||||
videoFullLink = 'http://www.dmdm2020.com' + indexVideoLink
|
||||
}
|
||||
}
|
||||
open(videoFullLink)
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
playVideoOnSyrme (videoName, videoIndex) {
|
||||
videoName = videoName.replace(/\s/g, '')
|
||||
var url = `https://syrme.top/searchs?q=${videoName}`
|
||||
axios.get(url).then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
var e = $('ul.MovieList')
|
||||
var searchResult = $(e).find('ul>li>article>a').toArray()
|
||||
// 获取第一个搜索结果的视频链接
|
||||
var detailPageLink = $(searchResult[0]).attr('href')
|
||||
// 获取第一个搜索结果的title
|
||||
var title = $(searchResult[0]).find('a>h2').text()
|
||||
if (title === null || title === undefined || !title.replace(/\s/g, '').includes(videoName)) {
|
||||
// 如果第一个搜索结果不符合,打开搜索页面
|
||||
open(url)
|
||||
} else {
|
||||
// 解析详情页面
|
||||
var detailPageFullLink = 'https://syrme.top' + detailPageLink
|
||||
axios.get(detailPageFullLink).then(res2 => {
|
||||
const $ = cheerio.load(res2.data)
|
||||
// 获取playlist1
|
||||
var e = $('#categories-2')
|
||||
// 获取所有视频链接
|
||||
var videoList = $(e).find('div>ul>li>a').toArray()
|
||||
// 获取index视频链接
|
||||
var videoFullLink = detailPageFullLink
|
||||
if (videoIndex < videoList.length) {
|
||||
var indexVideoLink = $(videoList[videoIndex]).attr('href')
|
||||
videoFullLink = 'https://syrme.top' + indexVideoLink
|
||||
}
|
||||
open(videoFullLink)
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
playVideoOnJpysvip (videoName, videoIndex) {
|
||||
videoName = videoName.replace(/\s/g, '')
|
||||
var url = `https://www.jpysvip.net/vodsearch/-------------.html?wd=${videoName}&submit=`
|
||||
axios.get(url).then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
var e = $('#searchList')
|
||||
var searchResult = $(e).find('ul>li>div>a').toArray()
|
||||
// 获取第一个搜索结果的视频链接
|
||||
var detailPageLink = $(searchResult[0]).attr('href')
|
||||
// 获取第一个搜索结果的title
|
||||
var title = $(searchResult[0]).attr('title')
|
||||
if (title === null || title === undefined || !title.replace(/\s/g, '').includes(videoName)) {
|
||||
// 如果第一个搜索结果不符合,打开搜索页面
|
||||
open(url)
|
||||
} else {
|
||||
// 解析详情页面
|
||||
var detailPageFullLink = 'https://www.jpysvip.net' + detailPageLink
|
||||
axios.get(detailPageFullLink).then(res2 => {
|
||||
const $ = cheerio.load(res2.data)
|
||||
// 获取playlist1
|
||||
var e = $('#playlist1')
|
||||
// 获取所有视频链接
|
||||
var videoList = $(e).find('div>ul>li>a').toArray()
|
||||
// 获取index视频链接
|
||||
var videoFullLink = detailPageFullLink
|
||||
if (videoIndex < videoList.length) {
|
||||
var indexVideoLink = $(videoList[videoIndex]).attr('href')
|
||||
videoFullLink = 'https://www.jpysvip.net/' + indexVideoLink
|
||||
}
|
||||
open(videoFullLink)
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
playVideoOnXhkan (videoName, videoIndex) {
|
||||
videoName = videoName.replace(/\s/g, '')
|
||||
var url = `https://www.xhkan.com/vodsearch.html?wd=${videoName}&submit=`
|
||||
axios.get(url).then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
var e = $('#searchList')
|
||||
var searchResult = $(e).find('ul>li>div>a').toArray()
|
||||
// 获取第一个搜索结果的视频链接
|
||||
var detailPageLink = $(searchResult[0]).attr('href')
|
||||
// 获取第一个搜索结果的title
|
||||
var title = $(searchResult[0]).attr('title')
|
||||
if (title === null || title === undefined || !title.replace(/\s/g, '').includes(videoName)) {
|
||||
// 如果第一个搜索结果不符合,打开搜索页面
|
||||
open(url)
|
||||
} else {
|
||||
// 解析详情页面
|
||||
var detailPageFullLink = detailPageLink
|
||||
axios.get(detailPageFullLink).then(res2 => {
|
||||
const $ = cheerio.load(res2.data)
|
||||
// 获取playlist1
|
||||
var e = $('#playlist1')
|
||||
// 获取所有视频链接
|
||||
var videoList = $(e).find('div>ul>li>a').toArray()
|
||||
// 获取index视频链接
|
||||
var videoFullLink = detailPageFullLink
|
||||
if (videoIndex < videoList.length) {
|
||||
var indexVideoLink = $(videoList[videoIndex]).attr('href')
|
||||
videoFullLink = indexVideoLink
|
||||
}
|
||||
open(videoFullLink)
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
export default onlineVideo
|
||||
@@ -5,7 +5,7 @@ const Axios = require('axios')
|
||||
const app = express()
|
||||
app.use(cors())
|
||||
app.use(express.json())
|
||||
app.use(express.urlencoded())
|
||||
app.use(express.urlencoded({ extended: true }))
|
||||
|
||||
app.post('/api', async (req, res) => {
|
||||
const result = await Axios.get(req.body.url)
|
||||
@@ -15,4 +15,4 @@ app.post('/api', async (req, res) => {
|
||||
})
|
||||
})
|
||||
|
||||
app.listen(48484)
|
||||
app.listen(44444)
|
||||
|
||||
@@ -2,7 +2,6 @@ import { sites } from '../dexie'
|
||||
import axios from 'axios'
|
||||
import parser from 'fast-xml-parser'
|
||||
const zy = {
|
||||
ports: 48484, // 端口号
|
||||
xmlConfig: { // XML 转 JSON 配置
|
||||
trimValues: true,
|
||||
textNodeName: '_t',
|
||||
@@ -31,9 +30,9 @@ const zy = {
|
||||
class (key) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.getSite(key).then(res => {
|
||||
const site = res
|
||||
axios.post(`http://localhost:${this.ports}/api`, { url: site.api }).then(res => {
|
||||
const data = res.data.info
|
||||
const url = res.api
|
||||
axios.post(url).then(res => {
|
||||
const data = res.data
|
||||
const json = parser.parse(data, this.xmlConfig)
|
||||
const arr = []
|
||||
if (json.rss.class) {
|
||||
@@ -76,8 +75,8 @@ const zy = {
|
||||
} else {
|
||||
url = `${site.api}?ac=videolist&pg=${pg}`
|
||||
}
|
||||
axios.post(`http://localhost:${this.ports}/api`, { url: url }).then(async res => {
|
||||
const data = res.data.info
|
||||
axios.post(url).then(async res => {
|
||||
const data = res.data
|
||||
const json = parser.parse(data, this.xmlConfig)
|
||||
const videoList = json.rss.list.video
|
||||
resolve(videoList)
|
||||
@@ -103,8 +102,8 @@ const zy = {
|
||||
} else {
|
||||
url = `${site.api}?ac=videolist`
|
||||
}
|
||||
axios.post(`http://localhost:${this.ports}/api`, { url: url }).then(async res => {
|
||||
const data = res.data.info
|
||||
axios.post(url).then(async res => {
|
||||
const data = res.data
|
||||
const json = parser.parse(data, this.xmlConfig)
|
||||
const pg = {
|
||||
page: json.rss.list._page,
|
||||
@@ -130,14 +129,19 @@ const zy = {
|
||||
this.getSite(key).then(res => {
|
||||
const site = res
|
||||
wd = encodeURI(wd)
|
||||
axios.post(`http://localhost:${this.ports}/api`, { url: site.api + '?wd=' + wd }).then(res => {
|
||||
const data = res.data.info
|
||||
var url = `${site.api}?wd=${wd}`
|
||||
axios.post(url, { timeout: 3000 }).then(res => {
|
||||
const data = res.data
|
||||
const json = parser.parse(data, this.xmlConfig)
|
||||
const videoList = json.rss.list.video
|
||||
resolve(videoList)
|
||||
if (json && json.rss && json.rss.list) {
|
||||
const videoList = json.rss.list.video
|
||||
resolve(videoList)
|
||||
}
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
}).catch(err => {
|
||||
reject(err)
|
||||
})
|
||||
})
|
||||
},
|
||||
@@ -150,8 +154,9 @@ const zy = {
|
||||
detail (key, id) {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.getSite(key).then(res => {
|
||||
axios.post(`http://localhost:${this.ports}/api`, { url: res.api + '?ac=videolist&ids=' + id }).then(res => {
|
||||
const data = res.data.info
|
||||
const url = `${res.api}?ac=videolist&ids=${id}`
|
||||
axios.post(url).then(res => {
|
||||
const data = res.data
|
||||
const json = parser.parse(data, this.xmlConfig)
|
||||
const videoList = json.rss.list.video
|
||||
resolve(videoList)
|
||||
@@ -173,10 +178,10 @@ const zy = {
|
||||
return new Promise((resolve, reject) => {
|
||||
this.getSite(key).then(res => {
|
||||
const site = res
|
||||
const url = site.download
|
||||
const url = `${site.download}?ac=videolist&ids=${id}&ct=1`
|
||||
if (url) {
|
||||
axios.post(`http://localhost:${this.ports}/api`, { url: url + '?ac=videolist&ids=' + id + '&ct=1' }).then(res => {
|
||||
const data = res.data.info
|
||||
axios.post(url).then(res => {
|
||||
const data = res.data
|
||||
const json = parser.parse(data, this.xmlConfig)
|
||||
const videoList = json.rss.list.video
|
||||
resolve(videoList)
|
||||
@@ -184,10 +189,27 @@ const zy = {
|
||||
reject(err)
|
||||
})
|
||||
} else {
|
||||
resolve(null)
|
||||
resolve([])
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
/**
|
||||
* 检查资源
|
||||
* @param {*} key 资源网 key
|
||||
* @returns boolean
|
||||
*/
|
||||
async check (key, id) {
|
||||
try {
|
||||
const cls = await this.class(key)
|
||||
if (cls) {
|
||||
return true
|
||||
} else {
|
||||
return false
|
||||
}
|
||||
} catch (e) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
48
src/lib/update/update.js
Normal file
48
src/lib/update/update.js
Normal file
@@ -0,0 +1,48 @@
|
||||
import { BrowserWindow, ipcMain } from 'electron'
|
||||
import { autoUpdater } from 'electron-updater'
|
||||
|
||||
export function initUpdater (win = BrowserWindow) {
|
||||
autoUpdater.autoDownload = false
|
||||
autoUpdater.autoInstallOnAppQuit = false
|
||||
|
||||
// 主进程监听检查更新事件
|
||||
ipcMain.on('checkForUpdate', () => {
|
||||
autoUpdater.checkForUpdates()
|
||||
})
|
||||
|
||||
// 主进程监听退出并安装事件
|
||||
ipcMain.on('quitAndInstall', () => {
|
||||
autoUpdater.downloadUpdate()
|
||||
})
|
||||
|
||||
// 开始检测是否有更新
|
||||
autoUpdater.on('checking-for-update', () => {
|
||||
win.webContents.send('checking-for-update')
|
||||
})
|
||||
|
||||
// 检测到有可用的更新
|
||||
autoUpdater.on('update-available', (info) => {
|
||||
win.webContents.send('update-available', info)
|
||||
})
|
||||
|
||||
// 没有检测到有可用的更新
|
||||
autoUpdater.on('update-not-available', () => {
|
||||
win.webContents.send('update-not-available')
|
||||
})
|
||||
|
||||
// 更新出错
|
||||
autoUpdater.on('update-error', err => {
|
||||
win.webContents.send('update-error', err)
|
||||
})
|
||||
|
||||
// 下载更新进度
|
||||
autoUpdater.on('download-progress', (progressObj) => {
|
||||
win.webContents.send('download-progress', progressObj)
|
||||
})
|
||||
|
||||
// 下载完成并退出安装
|
||||
autoUpdater.on('update-downloaded', () => {
|
||||
win.webContents.send('update-downloaded')
|
||||
autoUpdater.quitAndInstall()
|
||||
})
|
||||
}
|
||||
@@ -4,6 +4,7 @@ import store from './store'
|
||||
import 'modern-normalize'
|
||||
import Register from './components/register'
|
||||
import './lib/element/index'
|
||||
|
||||
Register.registerComponents()
|
||||
Vue.config.productionTip = false
|
||||
new Vue({
|
||||
|
||||
@@ -22,8 +22,18 @@
|
||||
<span class="progress" v-show="progress > 0">播放进度: {{progress}}%</span>
|
||||
</div>
|
||||
<div class="right">
|
||||
<span class="min" @click="frameClickEvent('min')"></span>
|
||||
<span class="close" @click="frameClickEvent('close')"></span>
|
||||
<span class="top" @click="frameClickEvent('top')" title="置顶">
|
||||
<svg t="1595919317571" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1188" style="width:10px;height:14px"><path d="M43.072 974.72l380.864-301.952 151.936 161.6c0 0 63.424 17.28 67.328-30.72l-3.904-163.584 225.088-259.648 98.048-5.696c0 0 76.928-15.488 21.184-82.752l-275.072-276.928c0 0-74.944-9.6-69.248 59.584l0 75.008L383.552 367.104 225.856 376.64c0 0-57.728 19.2-36.608 69.248l148.16 146.176L43.072 974.72 43.072 974.72z" p-id="1189" :fill="isAlwaysOnTop ? '#555555' : '#ffffff'"></path></svg>
|
||||
</span>
|
||||
<span class="min" @click="frameClickEvent('min')" title="最小化">
|
||||
<svg t="1595917239849" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1155" style="width:8px;height:14px"><path d="M0 479.936C0 444.64 28.448 416 64.064 416L959.936 416C995.328 416 1024 444.736 1024 479.936L1024 544.064C1024 579.392 995.552 608 959.936 608L64.064 608C28.672 608 0 579.264 0 544.064L0 479.936Z" p-id="1156" fill="#ffffff"></path></svg>
|
||||
</span>
|
||||
<span class="max" @click="frameClickEvent('max')" title="最大化">
|
||||
<svg t="1595917343956" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1540" style="width:8px;height:14px"><path d="M416 416 64.064 416C28.448 416 0 444.64 0 479.936L0 544.064C0 579.264 28.672 608 64.064 608L416 608 416 959.936C416 995.552 444.64 1024 479.936 1024L544.064 1024C579.264 1024 608 995.328 608 959.936L608 608 959.936 608C995.552 608 1024 579.36 1024 544.064L1024 479.936C1024 444.736 995.328 416 959.936 416L608 416 608 64.064C608 28.448 579.36 0 544.064 0L479.936 0C444.736 0 416 28.672 416 64.064L416 416Z" p-id="1541" fill="#ffffff"></path></svg>
|
||||
</span>
|
||||
<span class="close" @click="frameClickEvent('close')" title="关闭">
|
||||
<svg t="1595917372551" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1685" style="width:8px;height:14px"><path d="M511.968 376.224 796.096 92.096C833.536 54.624 894.4 54.624 931.84 92.096 969.312 129.568 969.312 190.4 931.84 227.872L647.744 512 931.84 796.096C969.312 833.568 969.312 894.4 931.84 931.872 894.4 969.344 833.536 969.344 796.096 931.872L511.968 647.744 227.84 931.872C190.4 969.344 129.536 969.344 92.096 931.872 54.624 894.4 54.624 833.568 92.096 796.096L376.224 512 92.096 227.872C54.624 190.4 54.624 129.568 92.096 92.096 129.536 54.624 190.4 54.624 227.84 92.096L511.968 376.224Z" p-id="1686" fill="#ffffff"></path></svg>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bottom">
|
||||
@@ -38,9 +48,11 @@ import mt from 'mousetrap'
|
||||
import 'xgplayer'
|
||||
import Hls from 'xgplayer-hls.js'
|
||||
const { remote, ipcRenderer } = require('electron')
|
||||
const VIDEO_DETAIL_CACHE = {}
|
||||
export default {
|
||||
name: 'mini',
|
||||
data () {
|
||||
const win = remote.getCurrentWindow()
|
||||
return {
|
||||
xg: null,
|
||||
config: {
|
||||
@@ -65,20 +77,27 @@ export default {
|
||||
detail: {},
|
||||
m3u8Arr: [],
|
||||
rate: 1,
|
||||
progress: 0
|
||||
progress: 0,
|
||||
isAlwaysOnTop: win.isAlwaysOnTop()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
frameClickEvent (e) {
|
||||
const win = remote.getCurrentWindow()
|
||||
if (e === 'min') {
|
||||
const win = remote.getCurrentWindow()
|
||||
win.minimize()
|
||||
return false
|
||||
}
|
||||
if (e === 'max') {
|
||||
win.isMaximized() ? win.unmaximize() : win.maximize()
|
||||
}
|
||||
if (e === 'close') {
|
||||
ipcRenderer.send('win')
|
||||
return false
|
||||
}
|
||||
if (e === 'top') {
|
||||
this.isAlwaysOnTop = !this.isAlwaysOnTop
|
||||
win.setAlwaysOnTop(this.isAlwaysOnTop)
|
||||
}
|
||||
},
|
||||
opacityChange (val) {
|
||||
const win = remote.getCurrentWindow()
|
||||
@@ -89,10 +108,40 @@ export default {
|
||||
getUrls () {
|
||||
mini.find().then(res => {
|
||||
this.video = res
|
||||
zy.detail(res.site, res.ids).then(e => {
|
||||
this.name = e.name
|
||||
this.detail = e
|
||||
const dd = e.dl.dd
|
||||
this.fetchM3u8List(res).then(m3u8Arr => {
|
||||
this.m3u8Arr = m3u8Arr
|
||||
this.xg.src = m3u8Arr[res.index]
|
||||
if (res.time !== 0 || res.time !== '') {
|
||||
this.xg.play()
|
||||
this.xg.once('playing', () => {
|
||||
this.xg.currentTime = res.time
|
||||
})
|
||||
} else {
|
||||
this.xg.play()
|
||||
}
|
||||
this.videoPlaying()
|
||||
this.xg.once('ended', () => {
|
||||
if (m3u8Arr.length > 1 && (m3u8Arr.length - 1 > res.index)) {
|
||||
this.video.time = 0
|
||||
this.video.index++
|
||||
this.xg.src = m3u8Arr[this.video.index]
|
||||
this.xg.play()
|
||||
}
|
||||
})
|
||||
})
|
||||
})
|
||||
},
|
||||
fetchM3u8List (info) {
|
||||
return new Promise((resolve) => {
|
||||
const cacheKey = info.site + '@' + info.ids
|
||||
if (VIDEO_DETAIL_CACHE[cacheKey]) {
|
||||
this.name = VIDEO_DETAIL_CACHE[cacheKey].name
|
||||
resolve(VIDEO_DETAIL_CACHE[cacheKey].list)
|
||||
return
|
||||
}
|
||||
zy.detail(info.site, info.ids).then(res => {
|
||||
this.name = res.name
|
||||
const dd = res.dl.dd
|
||||
const type = Object.prototype.toString.call(dd)
|
||||
let m3u8Txt = []
|
||||
if (type === '[object Array]') {
|
||||
@@ -117,70 +166,57 @@ export default {
|
||||
m3u8Arr.push(j[0])
|
||||
}
|
||||
}
|
||||
this.m3u8Arr = m3u8Arr
|
||||
this.xg.src = m3u8Arr[res.index]
|
||||
if (res.time !== 0 || res.time !== '') {
|
||||
this.xg.play()
|
||||
this.xg.once('playing', () => {
|
||||
this.xg.currentTime = res.time
|
||||
})
|
||||
} else {
|
||||
this.xg.play()
|
||||
|
||||
VIDEO_DETAIL_CACHE[cacheKey] = {
|
||||
list: m3u8Arr,
|
||||
name: res.name
|
||||
}
|
||||
this.videoPlaying()
|
||||
this.xg.once('ended', () => {
|
||||
if (m3u8Arr.length > 1 && (m3u8Arr.length - 1 > res.index)) {
|
||||
this.video.time = 0
|
||||
this.video.index++
|
||||
this.xg.src = m3u8Arr[this.video.index]
|
||||
this.xg.play()
|
||||
}
|
||||
})
|
||||
resolve(m3u8Arr)
|
||||
})
|
||||
})
|
||||
},
|
||||
videoPlaying () {
|
||||
history.find({ site: this.video.site, ids: this.video.ids }).then(res => {
|
||||
if (res) {
|
||||
res.index = this.video.index
|
||||
history.update(res.id, res)
|
||||
} else {
|
||||
const doc = {
|
||||
site: this.video.site,
|
||||
ids: this.video.ids,
|
||||
name: this.video.name,
|
||||
index: this.video.index,
|
||||
time: 0
|
||||
}
|
||||
history.add(doc)
|
||||
async videoPlaying () {
|
||||
const db = await history.find({ site: this.video.site, ids: this.video.ids })
|
||||
if (db) {
|
||||
db.index = this.video.index
|
||||
history.update(db.id, db)
|
||||
} else {
|
||||
const doc = {
|
||||
site: this.video.site,
|
||||
ids: this.video.ids,
|
||||
name: this.video.name,
|
||||
index: this.video.index,
|
||||
time: 0
|
||||
}
|
||||
})
|
||||
history.add(doc)
|
||||
}
|
||||
this.timerEvent()
|
||||
},
|
||||
timerEvent () {
|
||||
this.timer = setInterval(() => {
|
||||
this.timer = setInterval(async () => {
|
||||
const endTime = this.xg.duration
|
||||
const currentTime = this.xg.currentTime
|
||||
const progress = (currentTime / endTime) * 100
|
||||
this.progress = progress.toFixed(2)
|
||||
history.find({ site: this.video.site, ids: this.video.ids }).then(res => {
|
||||
if (res) {
|
||||
const v = res
|
||||
v.time = this.xg.currentTime
|
||||
v.index = this.video.index
|
||||
const id = v.id
|
||||
delete v.id
|
||||
history.update(id, v)
|
||||
}
|
||||
})
|
||||
const db = await history.find({ site: this.video.site, ids: this.video.ids })
|
||||
if (db) {
|
||||
const v = db
|
||||
v.time = this.xg.currentTime
|
||||
v.index = this.video.index
|
||||
const id = v.id
|
||||
delete v.id
|
||||
history.update(id, v)
|
||||
}
|
||||
}, 10000)
|
||||
},
|
||||
prevEvent () {
|
||||
async prevEvent () {
|
||||
if (this.video.index === 0) {
|
||||
this.$message.info('已是第一集.')
|
||||
return false
|
||||
}
|
||||
history.find({ site: this.video.site, ids: this.video.ids }).then(res => {
|
||||
const v = res
|
||||
const db = await history.find({ site: this.video.site, ids: this.video.ids })
|
||||
if (db) {
|
||||
const v = db
|
||||
const id = v.id
|
||||
v.index--
|
||||
delete v.id
|
||||
@@ -188,14 +224,16 @@ export default {
|
||||
this.xg.src = this.m3u8Arr[v.index]
|
||||
this.video.index--
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
nextEvent () {
|
||||
async nextEvent () {
|
||||
if (this.video.index >= this.m3u8Arr.length - 1) {
|
||||
this.$message.info('已是最后一集.')
|
||||
return false
|
||||
}
|
||||
history.find({ site: this.video.site, ids: this.video.ids }).then(res => {
|
||||
const v = res
|
||||
const db = await history.find({ site: this.video.site, ids: this.video.ids })
|
||||
if (db) {
|
||||
const v = db
|
||||
v.index++
|
||||
const id = v.id
|
||||
delete v.id
|
||||
@@ -203,7 +241,7 @@ export default {
|
||||
this.xg.src = this.m3u8Arr[v.index]
|
||||
this.video.index++
|
||||
})
|
||||
})
|
||||
}
|
||||
},
|
||||
playbackRateEvent (e) {
|
||||
let rate = this.xg.playbackRate
|
||||
@@ -284,8 +322,10 @@ export default {
|
||||
return false
|
||||
}
|
||||
if (e === 'escape') {
|
||||
this.xg.exitFullscreen()
|
||||
this.xg.exitCssFullscreen()
|
||||
if (this.xg.fullscreen) {
|
||||
this.xg.exitFullscreen()
|
||||
this.xg.exitCssFullscreen()
|
||||
}
|
||||
return false
|
||||
}
|
||||
if (e === 'next') {
|
||||
@@ -351,12 +391,10 @@ export default {
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.getUrls()
|
||||
this.mtEvent()
|
||||
},
|
||||
mounted () {
|
||||
this.xg = new Hls(this.config)
|
||||
this.mtEvent()
|
||||
this.getUrls()
|
||||
},
|
||||
beforeDestroy () {
|
||||
clearInterval(this.timer)
|
||||
@@ -425,18 +463,26 @@ html,body{
|
||||
span{
|
||||
-webkit-app-region: no-drag;
|
||||
display: inline-block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
text-align: center;
|
||||
line-height: 14px;
|
||||
border-radius: 50%;
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
opacity: 0.4;
|
||||
&.min{
|
||||
background-color: #32dc36;
|
||||
}
|
||||
&.max{
|
||||
background-color: #ffbe2a;
|
||||
}
|
||||
&.close{
|
||||
background-color: #ff5f56;
|
||||
}
|
||||
&.top{
|
||||
background-color: #f3bab7;
|
||||
}
|
||||
&:hover{
|
||||
animation: heartbeat 3s ease-in-out infinite both;
|
||||
}
|
||||
|
||||
@@ -25,6 +25,9 @@ export default new Vuex.Store({
|
||||
video: {
|
||||
key: '',
|
||||
info: {}
|
||||
},
|
||||
editSites: {
|
||||
sites: []
|
||||
}
|
||||
},
|
||||
getters: {
|
||||
@@ -42,6 +45,9 @@ export default new Vuex.Store({
|
||||
},
|
||||
getVideo: state => {
|
||||
return state.video
|
||||
},
|
||||
getEditSites: state => {
|
||||
return state.editSites
|
||||
}
|
||||
},
|
||||
mutations: {
|
||||
@@ -59,6 +65,9 @@ export default new Vuex.Store({
|
||||
},
|
||||
SET_VIDEO: (state, payload) => {
|
||||
state.video = payload
|
||||
},
|
||||
SET_EDITSITES: (state, payload) => {
|
||||
state.editSites = payload
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
251
yarn.lock
251
yarn.lock
@@ -1023,6 +1023,11 @@
|
||||
resolved "https://registry.npmjs.org/@types/q/-/q-1.5.4.tgz#15925414e0ad2cd765bfef58842f7e26a7accb24"
|
||||
integrity sha512-1HcDas8SEj4z1Wc696tH56G8OlRaH/sqZOynNNB+HF0WOeXPaxTtbYzJY2oEfiUxjSKjhCKr+MvR7dCHcEelug==
|
||||
|
||||
"@types/semver@^7.3.1":
|
||||
version "7.3.4"
|
||||
resolved "https://registry.npm.taobao.org/@types/semver/download/@types/semver-7.3.4.tgz#43d7168fec6fa0988bb1a513a697b29296721afb"
|
||||
integrity sha1-Q9cWj+xvoJiLsaUTppeykpZyGvs=
|
||||
|
||||
"@types/yargs-parser@*":
|
||||
version "15.0.0"
|
||||
resolved "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-15.0.0.tgz#cb3f9f741869e20cce330ffbeb9271590483882d"
|
||||
@@ -1675,6 +1680,11 @@ array-union@^1.0.1, array-union@^1.0.2:
|
||||
dependencies:
|
||||
array-uniq "^1.0.1"
|
||||
|
||||
array-uniq@1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.2.tgz#5fcc373920775723cfd64d65c64bef53bf9eba6d"
|
||||
integrity sha1-X8w3OSB3VyPP1k1lxkvvU7+eum0=
|
||||
|
||||
array-uniq@^1.0.1:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6"
|
||||
@@ -1804,12 +1814,12 @@ aws4@^1.8.0:
|
||||
resolved "https://registry.npmjs.org/aws4/-/aws4-1.10.0.tgz#a17b3a8ea811060e74d47d306122400ad4497ae2"
|
||||
integrity sha512-3YDiu347mtVtjpyV3u5kVqQLP242c06zwDOgpeRnybmXlYYsLbtTrUBUm8i8srONt+FWobl5aibnU1030PeeuA==
|
||||
|
||||
axios@^0.19.2:
|
||||
version "0.19.2"
|
||||
resolved "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz#3ea36c5d8818d0d5f8a8a97a6d36b86cdc00cb27"
|
||||
integrity sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==
|
||||
axios@^0.20.0:
|
||||
version "0.20.0"
|
||||
resolved "https://registry.npm.taobao.org/axios/download/axios-0.20.0.tgz#057ba30f04884694993a8cd07fa394cff11c50bd"
|
||||
integrity sha1-BXujDwSIRpSZOozQf6OUz/EcUL0=
|
||||
dependencies:
|
||||
follow-redirects "1.5.10"
|
||||
follow-redirects "^1.10.0"
|
||||
|
||||
babel-eslint@^10.1.0:
|
||||
version "10.1.0"
|
||||
@@ -2161,6 +2171,14 @@ builder-util-runtime@8.7.1:
|
||||
debug "^4.2.0"
|
||||
sax "^1.2.4"
|
||||
|
||||
builder-util-runtime@8.7.2:
|
||||
version "8.7.2"
|
||||
resolved "https://registry.npm.taobao.org/builder-util-runtime/download/builder-util-runtime-8.7.2.tgz#d93afc71428a12789b437e13850e1fa7da956d72"
|
||||
integrity sha1-2Tr8cUKKEnibQ34ThQ4fp9qVbXI=
|
||||
dependencies:
|
||||
debug "^4.1.1"
|
||||
sax "^1.2.4"
|
||||
|
||||
builder-util@22.7.0:
|
||||
version "22.7.0"
|
||||
resolved "https://registry.npmjs.org/builder-util/-/builder-util-22.7.0.tgz#0776a66e6d6e408a78bed7f17a7ad22516d9e7f0"
|
||||
@@ -2417,6 +2435,23 @@ check-types@^8.0.3:
|
||||
resolved "https://registry.npmjs.org/check-types/-/check-types-8.0.3.tgz#3356cca19c889544f2d7a95ed49ce508a0ecf552"
|
||||
integrity sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==
|
||||
|
||||
cheerio@^1.0.0-rc.3:
|
||||
version "1.0.0-rc.3"
|
||||
resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.3.tgz#094636d425b2e9c0f4eb91a46c05630c9a1a8bf6"
|
||||
integrity sha512-0td5ijfUPuubwLUu0OBoe98gZj8C/AA+RW3v67GPlGOrvxWjZmBXiBCRU+I8VEiNyJzjth40POfHiz2RB3gImA==
|
||||
dependencies:
|
||||
css-select "~1.2.0"
|
||||
dom-serializer "~0.1.1"
|
||||
entities "~1.1.1"
|
||||
htmlparser2 "^3.9.1"
|
||||
lodash "^4.15.0"
|
||||
parse5 "^3.0.1"
|
||||
|
||||
child_process@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/child_process/-/child_process-1.0.2.tgz#b1f7e7fc73d25e7fd1d455adc94e143830182b5a"
|
||||
integrity sha1-sffn/HPSXn/R1FWtyU4UODAYK1o=
|
||||
|
||||
"chokidar@>=2.0.0 <4.0.0", chokidar@^3.0.2, chokidar@^3.4.0:
|
||||
version "3.4.0"
|
||||
resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.4.0.tgz#b30611423ce376357c765b9b8f904b9fba3c0be8"
|
||||
@@ -3014,9 +3049,9 @@ css-select-base-adapter@^0.1.1:
|
||||
resolved "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7"
|
||||
integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==
|
||||
|
||||
css-select@^1.1.0:
|
||||
css-select@^1.1.0, css-select@~1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
|
||||
resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858"
|
||||
integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=
|
||||
dependencies:
|
||||
boolbase "~1.0.0"
|
||||
@@ -3153,10 +3188,10 @@ d@1, d@^1.0.1:
|
||||
es5-ext "^0.10.50"
|
||||
type "^1.0.1"
|
||||
|
||||
danmu.js@^0.2.17:
|
||||
version "0.2.18"
|
||||
resolved "https://registry.npmjs.org/danmu.js/-/danmu.js-0.2.18.tgz#fd688e7df50367a8a68630d1a189a0132c08dd9c"
|
||||
integrity sha512-ALfB4o0eQoK5pceEQCwyHmmg2wcxOOGqOflxodVtuc9Prq9Fyb2MAiyrfA+q/4WV1E4CnjoCep/8YHKy1X9IQg==
|
||||
danmu.js@0.2.23:
|
||||
version "0.2.23"
|
||||
resolved "https://registry.npm.taobao.org/danmu.js/download/danmu.js-0.2.23.tgz#339b512152ed5a8253829be007c5be5bd3821856"
|
||||
integrity sha1-M5tRIVLtWoJTgpvgB8W+W9OCGFY=
|
||||
dependencies:
|
||||
event-emitter "^0.3.5"
|
||||
|
||||
@@ -3179,13 +3214,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9:
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@=3.1.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261"
|
||||
integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==
|
||||
dependencies:
|
||||
ms "2.0.0"
|
||||
|
||||
debug@^3.1.1, debug@^3.2.5:
|
||||
version "3.2.6"
|
||||
resolved "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b"
|
||||
@@ -3360,10 +3388,10 @@ detect-node@^2.0.4:
|
||||
resolved "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c"
|
||||
integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==
|
||||
|
||||
dexie@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.npmjs.org/dexie/-/dexie-3.0.1.tgz#faafeb94be0d5e18b25d700546a2c05725511cfc"
|
||||
integrity sha512-/s4KzlaerQnCad/uY1ZNdFckTrbdMVhLlziYQzz62Ff9Ick1lHGomvTXNfwh4ApEZATyXRyVk5F6/y8UU84B0w==
|
||||
dexie@^3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.npm.taobao.org/dexie/download/dexie-3.0.2.tgz#4b979904d739e0530b68352005f175a82633a075"
|
||||
integrity sha1-S5eZBNc54FMLaDUgBfF1qCYzoHU=
|
||||
|
||||
diffie-hellman@^5.0.0:
|
||||
version "5.0.3"
|
||||
@@ -3443,12 +3471,20 @@ dom-serializer@0:
|
||||
domelementtype "^2.0.1"
|
||||
entities "^2.0.0"
|
||||
|
||||
dom-serializer@~0.1.1:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0"
|
||||
integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==
|
||||
dependencies:
|
||||
domelementtype "^1.3.0"
|
||||
entities "^1.1.1"
|
||||
|
||||
domain-browser@^1.1.1:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda"
|
||||
integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==
|
||||
|
||||
domelementtype@1, domelementtype@^1.3.1:
|
||||
domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1:
|
||||
version "1.3.1"
|
||||
resolved "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f"
|
||||
integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==
|
||||
@@ -3634,10 +3670,23 @@ electron-to-chromium@^1.3.488:
|
||||
resolved "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.496.tgz#3f43d32930481d82ad3663d79658e7c59a58af0b"
|
||||
integrity sha512-TXY4mwoyowwi4Lsrq9vcTUYBThyc1b2hXaTZI13p8/FRhY2CTaq5lK+DVjhYkKiTLsKt569Xes+0J5JsVXFurQ==
|
||||
|
||||
electron@^9.0.5:
|
||||
version "9.1.0"
|
||||
resolved "https://registry.npmjs.org/electron/-/electron-9.1.0.tgz#ca77600c9e4cd591298c340e013384114d3d8d05"
|
||||
integrity sha512-VRAF8KX1m0py9I9sf0kw1kWfeC87mlscfFcbcRdLBsNJ44/GrJhi3+E8rKbpHUeZNQxsPaVA5Zu5Lxb6dV/scQ==
|
||||
electron-updater@^4.3.5:
|
||||
version "4.3.5"
|
||||
resolved "https://registry.npm.taobao.org/electron-updater/download/electron-updater-4.3.5.tgz?cache=0&sync_timestamp=1600328924432&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron-updater%2Fdownload%2Felectron-updater-4.3.5.tgz#4fb36f593a031c87ea07ee141c9f064d5deffb15"
|
||||
integrity sha1-T7NvWToDHIfqB+4UHJ8GTV3v+xU=
|
||||
dependencies:
|
||||
"@types/semver" "^7.3.1"
|
||||
builder-util-runtime "8.7.2"
|
||||
fs-extra "^9.0.1"
|
||||
js-yaml "^3.14.0"
|
||||
lazy-val "^1.0.4"
|
||||
lodash.isequal "^4.5.0"
|
||||
semver "^7.3.2"
|
||||
|
||||
electron@^10.1.4:
|
||||
version "10.1.4"
|
||||
resolved "https://registry.npm.taobao.org/electron/download/electron-10.1.4.tgz?cache=0&sync_timestamp=1603157068707&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Felectron%2Fdownload%2Felectron-10.1.4.tgz#5462c5fac5b4728691042d0f62133ea2c133e6fd"
|
||||
integrity sha1-VGLF+sW0coaRBC0PYhM+osEz5v0=
|
||||
dependencies:
|
||||
"@electron/get" "^1.0.1"
|
||||
"@types/node" "^12.0.12"
|
||||
@@ -3718,9 +3767,9 @@ enhanced-resolve@^4.1.0:
|
||||
memory-fs "^0.5.0"
|
||||
tapable "^1.0.0"
|
||||
|
||||
entities@^1.1.1:
|
||||
entities@^1.1.1, entities@~1.1.1:
|
||||
version "1.1.2"
|
||||
resolved "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
|
||||
resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56"
|
||||
integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==
|
||||
|
||||
entities@^2.0.0:
|
||||
@@ -4091,6 +4140,11 @@ eventemitter3@^4.0.0:
|
||||
resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.4.tgz#b5463ace635a083d018bdc7c917b4c5f10a85384"
|
||||
integrity sha512-rlaVLnVxtxvoyLsQQFBx53YmXHDxRIzzTLbdfxqi4yocpSjAxXwkU0cScM5JgSKMqEhrZpnvQ2D9gjylR0AimQ==
|
||||
|
||||
eventemitter3@^4.0.7:
|
||||
version "4.0.7"
|
||||
resolved "https://registry.npm.taobao.org/eventemitter3/download/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f"
|
||||
integrity sha1-Lem2j2Uo1WRO9cWVJqG0oHMGFp8=
|
||||
|
||||
events@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.npmjs.org/events/-/events-3.1.0.tgz#84279af1b34cb75aa88bf5ff291f6d0bd9b31a59"
|
||||
@@ -4498,18 +4552,16 @@ flush-write-stream@^1.0.0:
|
||||
inherits "^2.0.3"
|
||||
readable-stream "^2.3.6"
|
||||
|
||||
follow-redirects@1.5.10:
|
||||
version "1.5.10"
|
||||
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz#7b7a9f9aea2fdff36786a94ff643ed07f4ff5e2a"
|
||||
integrity sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==
|
||||
dependencies:
|
||||
debug "=3.1.0"
|
||||
|
||||
follow-redirects@^1.0.0:
|
||||
version "1.12.1"
|
||||
resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.12.1.tgz#de54a6205311b93d60398ebc01cf7015682312b6"
|
||||
integrity sha512-tmRv0AVuR7ZyouUHLeNSiO6pqulF7dYa3s19c6t+wz9LD69/uSzdMxJ2S91nTI9U3rt/IldxpzMOFejp6f0hjg==
|
||||
|
||||
follow-redirects@^1.10.0:
|
||||
version "1.13.0"
|
||||
resolved "https://registry.npm.taobao.org/follow-redirects/download/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db"
|
||||
integrity sha1-tC6Nk6Kn7qXtiGM2dtZZe8jjhNs=
|
||||
|
||||
for-in@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80"
|
||||
@@ -5051,16 +5103,16 @@ html-webpack-plugin@^3.2.0:
|
||||
toposort "^1.0.0"
|
||||
util.promisify "1.0.0"
|
||||
|
||||
html2canvas@^1.0.0-rc.5:
|
||||
version "1.0.0-rc.5"
|
||||
resolved "https://registry.npmjs.org/html2canvas/-/html2canvas-1.0.0-rc.5.tgz#4ee3cac9f6e20a0fa0c2f35a6f99c960ae7ec4c1"
|
||||
integrity sha512-DtNqPxJNXPoTajs+lVQzGS1SULRI4GQaROeU5R41xH8acffHukxRh/NBVcTBsfCkJSkLq91rih5TpbEwUP9yWA==
|
||||
html2canvas@^1.0.0-rc.7:
|
||||
version "1.0.0-rc.7"
|
||||
resolved "https://registry.npm.taobao.org/html2canvas/download/html2canvas-1.0.0-rc.7.tgz#70c159ce0e63954a91169531894d08ad5627ac98"
|
||||
integrity sha1-cMFZzg5jlUqRFpUxiU0IrVYnrJg=
|
||||
dependencies:
|
||||
css-line-break "1.1.1"
|
||||
|
||||
htmlparser2@^3.3.0:
|
||||
htmlparser2@^3.3.0, htmlparser2@^3.9.1:
|
||||
version "3.10.1"
|
||||
resolved "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
|
||||
resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f"
|
||||
integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==
|
||||
dependencies:
|
||||
domelementtype "^1.3.1"
|
||||
@@ -5356,6 +5408,11 @@ ipaddr.js@1.9.1, ipaddr.js@^1.9.0:
|
||||
resolved "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3"
|
||||
integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==
|
||||
|
||||
iptv-playlist-parser@^0.5.0:
|
||||
version "0.5.0"
|
||||
resolved "https://registry.yarnpkg.com/iptv-playlist-parser/-/iptv-playlist-parser-0.5.0.tgz#7286dab99b75510e9f7db73f1f3e9d30aa121c45"
|
||||
integrity sha512-QSZ4smEB73rHj7h/qICP2VDOEIgD9piEJXtvazCaOGxGyA4Ulx2k9Z2DfEFNRsGlHFm9i4xRcR8Z8Nl15lAv5Q==
|
||||
|
||||
is-absolute-url@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6"
|
||||
@@ -6035,6 +6092,11 @@ lodash.defaultsdeep@^4.6.1:
|
||||
resolved "https://registry.npmjs.org/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz#512e9bd721d272d94e3d3a63653fa17516741ca6"
|
||||
integrity sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==
|
||||
|
||||
lodash.isequal@^4.5.0:
|
||||
version "4.5.0"
|
||||
resolved "https://registry.npm.taobao.org/lodash.isequal/download/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0"
|
||||
integrity sha1-QVxEePK8wwEgwizhDtMib30+GOA=
|
||||
|
||||
lodash.kebabcase@^4.1.1:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
|
||||
@@ -6065,6 +6127,11 @@ lodash.uniq@^4.5.0:
|
||||
resolved "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
|
||||
integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=
|
||||
|
||||
lodash@^4.15.0:
|
||||
version "4.17.20"
|
||||
resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52"
|
||||
integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==
|
||||
|
||||
lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.3, lodash@^4.2.0:
|
||||
version "4.17.19"
|
||||
resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.19.tgz#e48ddedbe30b3321783c5b4301fbd353bc1e4a4b"
|
||||
@@ -6119,6 +6186,13 @@ lru-cache@^5.1.1:
|
||||
dependencies:
|
||||
yallist "^3.0.2"
|
||||
|
||||
m3u@0.0.2:
|
||||
version "0.0.2"
|
||||
resolved "https://mirrors.huaweicloud.com/repository/npm/m3u/-/m3u-0.0.2.tgz#cb971743b434efd8c77b3cc3a47fc0411a903df7"
|
||||
integrity sha1-y5cXQ7Q079jHezzDpH/AQRqQPfc=
|
||||
dependencies:
|
||||
oop "0.0.3"
|
||||
|
||||
make-dir@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5"
|
||||
@@ -6393,10 +6467,10 @@ mkdirp@^1.0.3, mkdirp@^1.0.4:
|
||||
resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e"
|
||||
integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==
|
||||
|
||||
modern-normalize@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.npmjs.org/modern-normalize/-/modern-normalize-0.6.0.tgz#21a469988edfc7c9020348e7a3b5b3583a1c9406"
|
||||
integrity sha512-gzvL1uFLV4EErHhaKoqTcrx52/sea6AIcMFWz/GBCuFrDBp485wSgyX5M+MZsj+grfcuqYLQGfHjDRrCvvwZLw==
|
||||
modern-normalize@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.npm.taobao.org/modern-normalize/download/modern-normalize-1.0.0.tgz#539d84a1e141338b01b346f3e27396d0ed17601e"
|
||||
integrity sha1-U52EoeFBM4sBs0bz4nOW0O0XYB4=
|
||||
|
||||
mousetrap@^1.6.5:
|
||||
version "1.6.5"
|
||||
@@ -6772,6 +6846,11 @@ onetime@^5.1.0:
|
||||
dependencies:
|
||||
mimic-fn "^2.1.0"
|
||||
|
||||
oop@0.0.3:
|
||||
version "0.0.3"
|
||||
resolved "https://mirrors.huaweicloud.com/repository/npm/oop/-/oop-0.0.3.tgz#70fa405a5650891a194fdc82ca68dad6dabf4401"
|
||||
integrity sha1-cPpAWlZQiRoZT9yCymja1tq/RAE=
|
||||
|
||||
open@^6.3.0:
|
||||
version "6.4.0"
|
||||
resolved "https://registry.npmjs.org/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9"
|
||||
@@ -7007,6 +7086,13 @@ parse5-htmlparser2-tree-adapter@^5.1.1:
|
||||
dependencies:
|
||||
parse5 "^5.1.1"
|
||||
|
||||
parse5@^3.0.1:
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c"
|
||||
integrity sha512-rgO9Zg5LLLkfJF9E6CCmXlSE4UVceloys8JrFqCcHloC3usd/kJCyPDwH2SOlzix2j3xaP9sUX3e8+kvkuleAA==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
parse5@^5.1.1:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz#f68e4e5ba1852ac2cadc00f4555fff6c2abb6178"
|
||||
@@ -7737,6 +7823,13 @@ randomfill@^1.0.3:
|
||||
randombytes "^2.0.5"
|
||||
safe-buffer "^5.1.0"
|
||||
|
||||
randomstring@^1.1.5:
|
||||
version "1.1.5"
|
||||
resolved "https://registry.yarnpkg.com/randomstring/-/randomstring-1.1.5.tgz#6df0628f75cbd5932930d9fe3ab4e956a18518c3"
|
||||
integrity sha1-bfBij3XL1ZMpMNn+OrTpVqGFGMM=
|
||||
dependencies:
|
||||
array-uniq "1.0.2"
|
||||
|
||||
range-parser@^1.2.1, range-parser@~1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031"
|
||||
@@ -8500,6 +8593,11 @@ sort-keys@^1.0.0:
|
||||
dependencies:
|
||||
is-plain-obj "^1.0.0"
|
||||
|
||||
sortablejs@^1.10.1:
|
||||
version "1.12.0"
|
||||
resolved "https://registry.yarnpkg.com/sortablejs/-/sortablejs-1.12.0.tgz#ee6d7ece3598c2af0feb1559d98595e5ea37cbd6"
|
||||
integrity sha512-bPn57rCjBRlt2sC24RBsu40wZsmLkSo2XeqG8k6DC1zru5eObQUIPPZAQG7W2SJ8FZQYq+BEJmvuw1Zxb3chqg==
|
||||
|
||||
source-list-map@^2.0.0:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.npmjs.org/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
|
||||
@@ -9513,6 +9611,11 @@ uuid@^3.3.2, uuid@^3.4.0:
|
||||
resolved "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee"
|
||||
integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==
|
||||
|
||||
v-fit-columns@^0.2.0:
|
||||
version "0.2.0"
|
||||
resolved "https://registry.npm.taobao.org/v-fit-columns/download/v-fit-columns-0.2.0.tgz#4d75b0eb66fcd701025044f356cc00e8d6fec7a2"
|
||||
integrity sha1-TXWw62b81wECUETzVswA6Nb+x6I=
|
||||
|
||||
v8-compile-cache@^2.0.3:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.1.tgz#54bc3cdd43317bca91e35dcaf305b1a7237de745"
|
||||
@@ -9616,10 +9719,10 @@ vue-style-loader@^4.1.0, vue-style-loader@^4.1.2:
|
||||
hash-sum "^1.0.2"
|
||||
loader-utils "^1.0.2"
|
||||
|
||||
vue-template-compiler@^2.6.11:
|
||||
version "2.6.11"
|
||||
resolved "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080"
|
||||
integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA==
|
||||
vue-template-compiler@^2.6.12:
|
||||
version "2.6.12"
|
||||
resolved "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz?cache=0&sync_timestamp=1602239010008&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue-template-compiler%2Fdownload%2Fvue-template-compiler-2.6.12.tgz#947ed7196744c8a5285ebe1233fe960437fcc57e"
|
||||
integrity sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=
|
||||
dependencies:
|
||||
de-indent "^1.0.2"
|
||||
he "^1.1.0"
|
||||
@@ -9629,20 +9732,27 @@ vue-template-es2015-compiler@^1.9.0:
|
||||
resolved "https://registry.npmjs.org/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz#1ee3bc9a16ecbf5118be334bb15f9c46f82f5825"
|
||||
integrity sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==
|
||||
|
||||
vue-waterfall-plugin@^1.0.7:
|
||||
version "1.0.7"
|
||||
resolved "https://registry.npmjs.org/vue-waterfall-plugin/-/vue-waterfall-plugin-1.0.7.tgz#bd351e8d3015b9ce71320e00a88443929d63465f"
|
||||
integrity sha512-60JlBvrQbIOapGwc9AW9cXV064uzIEV1bjzc1ApNGt+MI4PI0Xs9aDvFgRMsGdynV9UlsLNtplX0bRwJ1syT9A==
|
||||
vue-waterfall-plugin@^1.1.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.npm.taobao.org/vue-waterfall-plugin/download/vue-waterfall-plugin-1.1.0.tgz#a4d87c74b72f1e36de5bbbadf1d645eb549ed592"
|
||||
integrity sha1-pNh8dLcvHjbeW7ut8dZF61Se1ZI=
|
||||
|
||||
vue@^2.6.11:
|
||||
version "2.6.11"
|
||||
resolved "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5"
|
||||
integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==
|
||||
vue@^2.6.12:
|
||||
version "2.6.12"
|
||||
resolved "https://registry.npm.taobao.org/vue/download/vue-2.6.12.tgz?cache=0&sync_timestamp=1602778254831&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fvue%2Fdownload%2Fvue-2.6.12.tgz#f5ebd4fa6bd2869403e29a896aed4904456c9123"
|
||||
integrity sha1-9evU+mvShpQD4pqJau1JBEVskSM=
|
||||
|
||||
vuex@^3.4.0:
|
||||
vuedraggable@^2.24.2:
|
||||
version "2.24.2"
|
||||
resolved "https://registry.npm.taobao.org/vuedraggable/download/vuedraggable-2.24.2.tgz#cd98faec99905238469e9b4d235fba5a59fb7da2"
|
||||
integrity sha1-zZj67JmQUjhGnptNI1+6Wln7faI=
|
||||
dependencies:
|
||||
sortablejs "^1.10.1"
|
||||
|
||||
vuex@^3.5.1:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.npmjs.org/vuex/-/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d"
|
||||
integrity sha512-w7oJzmHQs0FM9LXodfskhw9wgKBiaB+totOdb8sNzbTB2KDCEEwEs29NzBZFh/lmEK1t5tDmM1vtsO7ubG1DFw==
|
||||
resolved "https://registry.npm.taobao.org/vuex/download/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d"
|
||||
integrity sha1-8bjc6mSbwlJUz09DWAgdv12hiz0=
|
||||
|
||||
watchpack-chokidar2@^2.0.0:
|
||||
version "2.0.0"
|
||||
@@ -9916,22 +10026,23 @@ xdg-basedir@^4.0.0:
|
||||
resolved "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz#4bc8d9984403696225ef83a1573cbbcb4e79db13"
|
||||
integrity sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==
|
||||
|
||||
xgplayer-hls.js@^2.2.3:
|
||||
version "2.2.3"
|
||||
resolved "https://registry.npmjs.org/xgplayer-hls.js/-/xgplayer-hls.js-2.2.3.tgz#bf538911145346c447528d609fc95dd267a24d81"
|
||||
integrity sha512-CFsZanBHHRbqTmqYCFFONk76oWwJwbn+8LK/XkwBBrUrqGPQPmrXfjelGjKDDGfZ+w3xReC1nGom3IpN+lLoaQ==
|
||||
xgplayer-hls.js@^2.2.5:
|
||||
version "2.2.5"
|
||||
resolved "https://registry.npm.taobao.org/xgplayer-hls.js/download/xgplayer-hls.js-2.2.5.tgz?cache=0&sync_timestamp=1600935842683&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fxgplayer-hls.js%2Fdownload%2Fxgplayer-hls.js-2.2.5.tgz#8f90980cf2b6b4610b5449a3a55a4e7d87335cc8"
|
||||
integrity sha1-j5CYDPK2tGELVEmjpVpOfYczXMg=
|
||||
dependencies:
|
||||
deepmerge "2.0.1"
|
||||
event-emitter "^0.3.5"
|
||||
eventemitter3 "^4.0.7"
|
||||
|
||||
xgplayer@^2.9.8:
|
||||
version "2.9.8"
|
||||
resolved "https://registry.npmjs.org/xgplayer/-/xgplayer-2.9.8.tgz#ce6646f8ef99594ca9414449f83f816320c4ec83"
|
||||
integrity sha512-MICegbLRMNdOa9kRcsY5BVfwKmwvO+quJST/ejSJngdvDrB4E9dX53zhL3OT6KH4n9aCifl5qCYzTRWD6qH22w==
|
||||
xgplayer@^2.13.0:
|
||||
version "2.13.0"
|
||||
resolved "https://registry.npmjs.org/xgplayer/-/xgplayer-2.13.0.tgz#24df20fd527a87cccc5cee3db70937408eab86ed"
|
||||
integrity sha512-QMjwnpO6o8bd2ZywHtANaOqvey476UAmPS+hXC0im9wiESMKqxPsCmeqhIxFFVao/pUtIyopHADcor9ipai5Rg==
|
||||
dependencies:
|
||||
chalk "^2.3.2"
|
||||
commander "^2.15.1"
|
||||
danmu.js "^0.2.17"
|
||||
danmu.js "0.2.23"
|
||||
deepmerge "^1.5.0"
|
||||
downloadjs "1.4.7"
|
||||
draggabilly "^2.2.0"
|
||||
|
||||
Reference in New Issue
Block a user