mirror of
https://github.com/cuiocean/ZY-Player.git
synced 2026-02-14 07:55:27 +08:00
Compare commits
185 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
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 |
196
README.md
196
README.md
@@ -21,160 +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安装)
|
||||
- [yarn新一代包管理器安利](#yarn新一代包管理器安利)
|
||||
- [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 收藏关注一波呀~
|
||||
### ✨特性
|
||||
|
||||
## 重要
|
||||
从 V1.x 版本升级到 V2.x 版本, 需要重置软件, 由于数据库改动较大, 重置后收藏的资源会丢失. 重置功能在设置界面里.
|
||||
- 🍕 全平台支持. 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)
|
||||
|
||||
#### 截图:
|
||||
|
||||
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/)
|
||||
|
||||
#### yarn新一代包管理器安利
|
||||
最近管理员用[yarn](https://yarn.bootcss.com/)替换了npm,本人测试后表示非常好用。。连翻墙都不想要了,强烈推荐, 安装好使用yarn代理npm命令即可, [官网安装向导](https://yarn.bootcss.com/docs/install/)
|
||||
|
||||
#### 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
|
||||
10
package.json
10
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "zy",
|
||||
"version": "2.3.6",
|
||||
"version": "2.5.2",
|
||||
"private": true,
|
||||
"scripts": {
|
||||
"serve": "vue-cli-service serve",
|
||||
@@ -18,6 +18,8 @@
|
||||
"main": "background.js",
|
||||
"dependencies": {
|
||||
"axios": "^0.19.2",
|
||||
"cheerio": "^1.0.0-rc.3",
|
||||
"child_process": "^1.0.2",
|
||||
"core-js": "^3.6.5",
|
||||
"cors": "^2.8.5",
|
||||
"dexie": "^3.0.1",
|
||||
@@ -26,12 +28,16 @@
|
||||
"express": "^4.17.1",
|
||||
"fast-xml-parser": "^3.17.4",
|
||||
"html2canvas": "^1.0.0-rc.5",
|
||||
"iptv-playlist-parser": "^0.5.0",
|
||||
"m3u": "0.0.2",
|
||||
"modern-normalize": "^0.6.0",
|
||||
"mousetrap": "^1.6.5",
|
||||
"qrcode.vue": "^1.7.0",
|
||||
"randomstring": "^1.1.5",
|
||||
"vue": "^2.6.11",
|
||||
"vue-infinite-loading": "^2.4.5",
|
||||
"vue-waterfall-plugin": "^1.0.7",
|
||||
"vuedraggable": "^2.24.1",
|
||||
"vuex": "^3.4.0",
|
||||
"xgplayer": "^2.9.10",
|
||||
"xgplayer-hls.js": "^2.2.3"
|
||||
@@ -44,7 +50,7 @@
|
||||
"@vue/eslint-config-standard": "^5.1.2",
|
||||
"babel-eslint": "^10.1.0",
|
||||
"babel-plugin-component": "^1.1.1",
|
||||
"electron": "^9.0.5",
|
||||
"electron": "^9.3.1",
|
||||
"electron-devtools-installer": "^3.1.0",
|
||||
"eslint": "^6.7.2",
|
||||
"eslint-plugin-import": "^2.20.2",
|
||||
|
||||
59
src/App.vue
59
src/App.vue
@@ -5,6 +5,7 @@
|
||||
<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'" />
|
||||
@@ -15,15 +16,68 @@
|
||||
<transition name="slide">
|
||||
<Share v-if="share.show"/>
|
||||
</transition>
|
||||
<transition name="slide">
|
||||
<EditSites v-if="editSites.show"/>
|
||||
</transition>
|
||||
</div>
|
||||
</template>
|
||||
|
||||
<script>
|
||||
import { setting } from './lib/dexie'
|
||||
const { remote } = require('electron')
|
||||
export default {
|
||||
name: 'App',
|
||||
data () {
|
||||
return {
|
||||
appTheme: 'theme-light'
|
||||
appTheme: 'theme-light',
|
||||
winSizePosition: {
|
||||
x: 0,
|
||||
y: 0,
|
||||
width: 0,
|
||||
height: 0
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
// 窗口创建口,检查是否有窗口大小位置的记录,如果有的话,更新窗口位置及大小
|
||||
setting.find().then(res => {
|
||||
if (res.windowSizePosition) {
|
||||
var win = remote.getCurrentWindow()
|
||||
win.setBounds({
|
||||
x: res.windowSizePosition.x,
|
||||
y: res.windowSizePosition.y,
|
||||
width: res.windowSizePosition.width,
|
||||
height: res.windowSizePosition.height
|
||||
})
|
||||
}
|
||||
})
|
||||
var win = remote.getCurrentWindow()
|
||||
this.winSizePosition = {
|
||||
x: win.getPosition()[0],
|
||||
y: win.getPosition()[1],
|
||||
width: win.getSize()[0],
|
||||
height: win.getSize()[1]
|
||||
}
|
||||
},
|
||||
updated () {
|
||||
// 本来想hook up到beforedestroy, 但不工作
|
||||
// 每当窗口更新时,检查窗口大小及位置,记录到setting数据库中
|
||||
const win = remote.getCurrentWindow()
|
||||
var newWinSizePosition = {
|
||||
x: win.getPosition()[0],
|
||||
y: win.getPosition()[1],
|
||||
width: win.getSize()[0],
|
||||
height: win.getSize()[1]
|
||||
}
|
||||
if (newWinSizePosition.x !== this.winSizePosition.x ||
|
||||
newWinSizePosition.y !== this.winSizePosition.y ||
|
||||
newWinSizePosition.width !== this.winSizePosition.width ||
|
||||
newWinSizePosition.height !== this.winSizePosition.height) {
|
||||
this.winSizePosition = newWinSizePosition
|
||||
setting.find().then(res => {
|
||||
res.windowSizePosition = newWinSizePosition
|
||||
setting.update(res)
|
||||
})
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -38,6 +92,9 @@ export default {
|
||||
},
|
||||
setting () {
|
||||
return this.$store.getters.getSetting
|
||||
},
|
||||
editSites () {
|
||||
return this.$store.getters.getEditSites
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
|
||||
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,7 +78,26 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.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;
|
||||
@@ -88,13 +107,14 @@
|
||||
.tHeader{
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
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;
|
||||
@@ -118,41 +138,42 @@
|
||||
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%;
|
||||
}
|
||||
&.operate{
|
||||
width: 170px;
|
||||
.btn{
|
||||
width: 40px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// scroll
|
||||
.zy-scroll{
|
||||
&::-webkit-scrollbar{
|
||||
@@ -168,7 +189,6 @@
|
||||
position: absolute;
|
||||
}
|
||||
}
|
||||
|
||||
// loading
|
||||
.zy-loading{
|
||||
width: 100%;
|
||||
|
||||
@@ -1,4 +1,6 @@
|
||||
:root{
|
||||
// general
|
||||
--highlight-color: #38dd77;
|
||||
// light
|
||||
--l-c-0: #823aa0;
|
||||
--l-c-1: #823aa011;
|
||||
|
||||
@@ -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,6 +34,17 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.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{
|
||||
@@ -286,7 +299,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.view, .shortcut, .site{
|
||||
.view, .search, .shortcut, .site{
|
||||
.title{
|
||||
color: var(--d-fc-1);
|
||||
}
|
||||
|
||||
@@ -32,6 +32,17 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.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{
|
||||
@@ -286,7 +297,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.view, .shortcut, .site{
|
||||
.view, .search, .shortcut, .site{
|
||||
.title{
|
||||
color: var(--g-fc-1);
|
||||
}
|
||||
|
||||
@@ -32,6 +32,17 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.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{
|
||||
@@ -286,7 +297,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.view, .shortcut, .site{
|
||||
.view, .search, .shortcut, .site{
|
||||
.title{
|
||||
color: var(--l-fc-1);
|
||||
}
|
||||
|
||||
@@ -32,6 +32,16 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.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{
|
||||
@@ -286,7 +296,7 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
.view, .shortcut, .site{
|
||||
.view, .search, .shortcut, .site{
|
||||
.title{
|
||||
color: var(--p-fc-1);
|
||||
}
|
||||
|
||||
@@ -1,8 +1,18 @@
|
||||
<template>
|
||||
<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>
|
||||
<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">电影</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,30 +24,98 @@
|
||||
</g>
|
||||
</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>
|
||||
<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">播放</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>
|
||||
<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">收藏</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
|
||||
: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 === '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>
|
||||
<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">设置</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>
|
||||
<circle
|
||||
cx="12"
|
||||
cy="12"
|
||||
r="1"
|
||||
></circle>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
@@ -54,18 +132,43 @@ export default {
|
||||
set (val) {
|
||||
this.SET_VIEW(val)
|
||||
}
|
||||
},
|
||||
detail: {
|
||||
get () {
|
||||
return this.$store.getters.getDetail
|
||||
},
|
||||
set (val) {
|
||||
this.SET_DETAIL(val)
|
||||
}
|
||||
},
|
||||
editSites: {
|
||||
get () {
|
||||
return this.$store.getters.getEditSites
|
||||
},
|
||||
set (val) {
|
||||
this.SET_EDITSITES(val)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_VIEW']),
|
||||
...mapMutations(['SET_VIEW', 'SET_DETAIL', 'SET_EDITSITES']),
|
||||
changeView (e) {
|
||||
this.view = e
|
||||
// ChangeView 的时候关闭Detail和EditSites页面
|
||||
this.detail = {
|
||||
show: false
|
||||
}
|
||||
if (this.editSites.show === true) {
|
||||
this.editSites = {
|
||||
show: false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.aside{
|
||||
.aside {
|
||||
width: 60px;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
@@ -74,7 +177,7 @@ export default {
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
-webkit-app-region: drag;
|
||||
span{
|
||||
span {
|
||||
width: 60px;
|
||||
height: 60px;
|
||||
cursor: pointer;
|
||||
|
||||
@@ -3,28 +3,72 @@
|
||||
<div class="detail-content">
|
||||
<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">
|
||||
<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"
|
||||
>
|
||||
<title id="closeIconTitle">关闭</title>
|
||||
<path d="M6.34314575 6.34314575L17.6568542 17.6568542M6.34314575 17.6568542L17.6568542 6.34314575"></path>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
<div class="detail-body zy-scroll" v-show="!loading">
|
||||
<div
|
||||
class="detail-body zy-scroll"
|
||||
v-show="!loading"
|
||||
>
|
||||
<div class="info">
|
||||
<div class="info-left">
|
||||
<img :src="info.pic" alt="">
|
||||
<img
|
||||
:src="info.pic"
|
||||
alt=""
|
||||
>
|
||||
</div>
|
||||
<div class="info-right">
|
||||
<div class="name">{{info.name}}</div>
|
||||
<div class="director" v-show="info.director">导演: {{info.director}}</div>
|
||||
<div class="actor" v-show="info.actor">主演: {{info.actor}}</div>
|
||||
<div class="type" v-show="info.type">类型: {{info.type}}</div>
|
||||
<div class="area" v-show="info.area">地区: {{info.area}}</div>
|
||||
<div class="lang" v-show="info.lang">语言: {{info.lang}}</div>
|
||||
<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="director"
|
||||
v-show="info.director"
|
||||
>导演: {{info.director}}</div>
|
||||
<div
|
||||
class="actor"
|
||||
v-show="info.actor"
|
||||
>主演: {{info.actor}}</div>
|
||||
<div
|
||||
class="type"
|
||||
v-show="info.type"
|
||||
>类型: {{info.type}}</div>
|
||||
<div
|
||||
class="area"
|
||||
v-show="info.area"
|
||||
>地区: {{info.area}}</div>
|
||||
<div
|
||||
class="lang"
|
||||
v-show="info.lang"
|
||||
>语言: {{info.lang}}</div>
|
||||
<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,15 +76,47 @@
|
||||
<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>
|
||||
<span
|
||||
v-for="(i, j) in m3u8List"
|
||||
:key="j"
|
||||
@click="playEvent(j)"
|
||||
>{{i | ftName}}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail-mask zy-loading" v-show="loading">
|
||||
<div
|
||||
class="detail-mask zy-loading"
|
||||
v-show="loading"
|
||||
>
|
||||
<div class="loader"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -49,6 +125,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 +134,10 @@ export default {
|
||||
return {
|
||||
loading: true,
|
||||
m3u8List: [],
|
||||
info: {}
|
||||
info: {},
|
||||
playOnline: false,
|
||||
selectedOnlineSite: '哔嘀',
|
||||
onlineSites: ['哔嘀', '素白白', '简影', '1080影视']
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
@@ -119,24 +199,44 @@ export default {
|
||||
}
|
||||
},
|
||||
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 } }
|
||||
} else {
|
||||
this.video = { key: this.detail.key, info: { id: this.detail.info.id, name: this.detail.info.name, index: n } }
|
||||
}
|
||||
})
|
||||
|
||||
this.view = 'Play'
|
||||
this.detail.show = false
|
||||
if (!this.playOnline) {
|
||||
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, site: this.detail.site } }
|
||||
} else {
|
||||
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
|
||||
} else {
|
||||
history.find({ site: this.detail.key, ids: this.detail.info.id }).then(res => {
|
||||
if (res) {
|
||||
res.index = n
|
||||
history.update(res.id, res)
|
||||
} else {
|
||||
const doc = {
|
||||
site: this.detail.key,
|
||||
ids: this.detail.info.id,
|
||||
name: this.detail.info.name,
|
||||
type: this.detail.info.type,
|
||||
year: this.detail.info.year,
|
||||
index: n,
|
||||
time: ''
|
||||
}
|
||||
history.add(doc)
|
||||
}
|
||||
})
|
||||
this.playVideoOnline(this.detail.info.name, n)
|
||||
}
|
||||
},
|
||||
starEvent () {
|
||||
star.find({ site: this.detail.key, ids: this.info.id }).then(res => {
|
||||
star.find({ key: this.detail.key, ids: this.info.id }).then(res => {
|
||||
if (res) {
|
||||
this.$message.info('已存在')
|
||||
this.$message.info('该影片已被收藏')
|
||||
} else {
|
||||
const docs = {
|
||||
site: this.detail.key,
|
||||
key: this.detail.key,
|
||||
ids: this.info.id,
|
||||
name: this.info.name,
|
||||
type: this.info.type,
|
||||
@@ -152,9 +252,36 @@ export default {
|
||||
this.$message.warning('收藏失败')
|
||||
})
|
||||
},
|
||||
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
|
||||
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('#')
|
||||
@@ -187,12 +314,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
|
||||
}
|
||||
})
|
||||
@@ -204,35 +391,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;
|
||||
@@ -243,42 +431,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%;
|
||||
@@ -287,15 +487,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;
|
||||
@@ -307,7 +507,7 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail-mask{
|
||||
.detail-mask {
|
||||
position: absolute;
|
||||
top: 50px;
|
||||
left: 0;
|
||||
@@ -329,28 +529,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
327
src/components/EditSites.vue
Normal file
327
src/components/EditSites.vue
Normal file
@@ -0,0 +1,327 @@
|
||||
<template>
|
||||
<div class="detail">
|
||||
<div class="detail-content">
|
||||
<div class="detail-header">
|
||||
<div class="zy-select">
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="openAddSite"
|
||||
>添加新源</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="exportSites"
|
||||
>导出</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="importSites"
|
||||
>导入</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="resetSites"
|
||||
>重置</div>
|
||||
</div>
|
||||
<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"
|
||||
>
|
||||
<title id="closeIconTitle">关闭</title>
|
||||
<path d="M6.34314575 6.34314575L17.6568542 17.6568542M6.34314575 17.6568542L17.6568542 6.34314575"></path>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
<div class="detail-body zy-scroll">
|
||||
<div class="zy-table">
|
||||
<div class="tBody zy-scroll">
|
||||
<div
|
||||
class="addSites-box zy-scroll"
|
||||
v-show="showAddSite"
|
||||
>
|
||||
<ul>
|
||||
<li>
|
||||
<span class="name">源名称</span>
|
||||
<span class="name">API接口</span>
|
||||
<span class="name">DOWNLOAD接口</span>
|
||||
<span class="operate">
|
||||
<span class="btn"></span>
|
||||
<span class="btn"></span>
|
||||
</span>
|
||||
</li>
|
||||
<li>
|
||||
<span
|
||||
class="name"
|
||||
style="display:inline-block;vertical-align:middle"
|
||||
>
|
||||
<input
|
||||
style="height: 30px"
|
||||
v-model="newSite.name"
|
||||
>
|
||||
</span>
|
||||
<span
|
||||
class="name"
|
||||
style="display:inline-block;vertical-align:middle"
|
||||
>
|
||||
<input
|
||||
style="height: 30px"
|
||||
v-model="newSite.api"
|
||||
>
|
||||
</span>
|
||||
<span
|
||||
class="name"
|
||||
style="display:inline-block;vertical-align:middle"
|
||||
>
|
||||
<input
|
||||
style="height: 30px"
|
||||
v-model="newSite.download"
|
||||
placeholder="可以为空"
|
||||
>
|
||||
</span>
|
||||
<span class="operate">
|
||||
<span
|
||||
class="btn"
|
||||
@click="addNewSite"
|
||||
>添加</span>
|
||||
<span
|
||||
class="btn"
|
||||
@click="closeAddSite"
|
||||
>关闭</span>
|
||||
</span>
|
||||
</li>
|
||||
<li></li>
|
||||
</ul>
|
||||
</div>
|
||||
<ul>
|
||||
<draggable
|
||||
v-model="sites"
|
||||
@change="listUpdatedEvent"
|
||||
>
|
||||
<transition-group>
|
||||
<li
|
||||
v-for="(i, j) in sites"
|
||||
:key="j"
|
||||
>
|
||||
<span class="name">{{i.name}}</span>
|
||||
<span class="operate">
|
||||
<span
|
||||
class="btn"
|
||||
@click.stop="removeEvent(i)"
|
||||
>删除</span>
|
||||
</span>
|
||||
</li>
|
||||
</transition-group>
|
||||
</draggable>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { mapMutations } from 'vuex'
|
||||
import { sites, setting } from '../lib/dexie'
|
||||
import draggable from 'vuedraggable'
|
||||
import { remote } from 'electron'
|
||||
import { sites as defaultSites } from '../lib/dexie/initData'
|
||||
import fs from 'fs'
|
||||
export default {
|
||||
name: 'editSites',
|
||||
data () {
|
||||
return {
|
||||
show: false,
|
||||
sites: [],
|
||||
showAddSite: false,
|
||||
newSite: {
|
||||
name: '',
|
||||
api: '',
|
||||
download: ''
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
draggable
|
||||
},
|
||||
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)
|
||||
}
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_SETTING', 'SET_EDITSITES']),
|
||||
close () {
|
||||
this.editSites.show = false
|
||||
},
|
||||
getSites () {
|
||||
sites.all().then(res => {
|
||||
this.sites = res
|
||||
})
|
||||
},
|
||||
removeEvent (e) {
|
||||
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
|
||||
})
|
||||
})
|
||||
},
|
||||
openAddSite () {
|
||||
this.showAddSite = true
|
||||
},
|
||||
closeAddSite () {
|
||||
this.showAddSite = false
|
||||
},
|
||||
addNewSite () {
|
||||
if (!this.newSite.name || !this.newSite.api) {
|
||||
this.$message.error('名称和API接口不能为空。')
|
||||
return
|
||||
}
|
||||
var randomstring = require('randomstring')
|
||||
var doc = {
|
||||
key: randomstring.generate(6),
|
||||
id: this.sites[this.sites.length - 1].id + 1,
|
||||
name: this.newSite.name,
|
||||
api: this.newSite.api,
|
||||
download: this.newSite.download
|
||||
}
|
||||
sites.add(doc).then(res => {
|
||||
this.newSite = {
|
||||
name: '',
|
||||
api: '',
|
||||
download: ''
|
||||
}
|
||||
this.$message.success('添加新源成功!')
|
||||
this.getSites()
|
||||
})
|
||||
},
|
||||
exportSites () {
|
||||
this.getSites()
|
||||
const arr = [...this.sites]
|
||||
const str = JSON.stringify(arr, null, 4)
|
||||
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']
|
||||
}
|
||||
remote.dialog.showOpenDialog(options).then(result => {
|
||||
if (!result.canceled) {
|
||||
sites.clear()
|
||||
result.filePaths.forEach(file => {
|
||||
var str = fs.readFileSync(file)
|
||||
const json = JSON.parse(str)
|
||||
sites.bulkAdd(json).then(e => {
|
||||
this.getSites()
|
||||
this.d.site = json[0].key
|
||||
setting.update(this.d).then(res => {
|
||||
this.setting = this.d
|
||||
})
|
||||
})
|
||||
this.$message.success('导入成功')
|
||||
}).catch(err => {
|
||||
this.$message.error(err)
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
resetSites () {
|
||||
sites.clear()
|
||||
sites.bulkAdd(defaultSites).then(e => {
|
||||
this.getSites()
|
||||
this.$message.success('重置源成功')
|
||||
})
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.getSites()
|
||||
}
|
||||
}
|
||||
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.detail {
|
||||
position: absolute;
|
||||
left: 80px;
|
||||
right: 20px;
|
||||
bottom: 0;
|
||||
width: calc(100% - 100px);
|
||||
height: calc(100% - 40px);
|
||||
z-index: 888;
|
||||
.detail-content {
|
||||
height: calc(100% - 10px);
|
||||
padding: 0 60px;
|
||||
position: relative;
|
||||
.detail-header {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
.detail-title {
|
||||
font-size: 16px;
|
||||
}
|
||||
.detail-close {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail-body {
|
||||
height: calc(100% - 50px);
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -1,99 +1,245 @@
|
||||
<template>
|
||||
<div class="film">
|
||||
<div class="header">
|
||||
<div class="zy-select" @mouseleave="show.site = false">
|
||||
<div class="vs-placeholder" @click="show.site = true">{{site.name}}</div>
|
||||
<div class="vs-options" v-show="show.site">
|
||||
<ul class="zy-scroll" style="max-height: 600px;">
|
||||
<li :class="site.key === i.key ? 'active' : ''" v-for="i in sites" :key="i.key" @click="siteClick(i)">{{ i.name }}</li>
|
||||
<div
|
||||
class="zy-select"
|
||||
@mouseleave="show.site = false"
|
||||
>
|
||||
<div
|
||||
class="vs-placeholder"
|
||||
@click="show.site = true"
|
||||
>{{site.name}}</div>
|
||||
<div
|
||||
class="vs-options"
|
||||
v-show="show.site"
|
||||
>
|
||||
<ul
|
||||
class="zy-scroll"
|
||||
style="max-height: 600px;"
|
||||
>
|
||||
<li
|
||||
:class="site.key === i.key ? 'active' : ''"
|
||||
v-for="i in sites"
|
||||
:key="i.key"
|
||||
@click="siteClick(i)"
|
||||
>{{ i.name }}</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zy-select" @mouseleave="show.classList = false" v-if="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>
|
||||
<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>
|
||||
</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-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-show="searchList.length >= 1" @click="clearSearch">清空历史记录</li>
|
||||
<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(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="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-show="!show.find">
|
||||
<div class="show-img" v-if="setting.view === 'picture'">
|
||||
<Waterfall ref="waterfall" :list="list" :gutter="20" :width="240"
|
||||
:breakpoints="{ 1200: { rowPerView: 4 } }"
|
||||
animationEffect="fadeInUp"
|
||||
backgroundColor="rgba(0, 0, 0, 0)">
|
||||
<template slot="item" slot-scope="props">
|
||||
<div class="card">
|
||||
<div
|
||||
class="body zy-scroll"
|
||||
infinite-wrapper
|
||||
>
|
||||
<div
|
||||
class="body-box"
|
||||
v-show="!show.find"
|
||||
>
|
||||
<div
|
||||
class="show-img"
|
||||
v-if="setting.view === 'picture'"
|
||||
>
|
||||
<Waterfall
|
||||
ref="waterfall"
|
||||
:list="list"
|
||||
:gutter="20"
|
||||
:width="240"
|
||||
:breakpoints="{ 1200: { rowPerView: 4 } }"
|
||||
animationEffect="fadeInUp"
|
||||
backgroundColor="rgba(0, 0, 0, 0)"
|
||||
>
|
||||
<template
|
||||
slot="item"
|
||||
slot-scope="props"
|
||||
>
|
||||
<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.waterfall.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>
|
||||
</template>
|
||||
</Waterfall>
|
||||
<infinite-loading force-use-infinite-wrapper :identifier="infiniteId" @infinite="infiniteHandler"></infinite-loading>
|
||||
<infinite-loading
|
||||
force-use-infinite-wrapper
|
||||
:identifier="infiniteId"
|
||||
@infinite="infiniteHandler"
|
||||
></infinite-loading>
|
||||
</div>
|
||||
<div class="show-table" v-if="setting.view === 'table'">
|
||||
<div
|
||||
class="show-table"
|
||||
v-if="setting.view === 'table'"
|
||||
>
|
||||
<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="time">{{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="tBody"
|
||||
:identifier="infiniteId"
|
||||
@infinite="infiniteHandler"
|
||||
></infinite-loading>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="body-box" v-show="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="site">{{i.site.name}}</span>
|
||||
<span class="note">{{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>
|
||||
@@ -134,7 +280,9 @@ export default {
|
||||
infiniteId: +new Date(),
|
||||
searchList: [],
|
||||
searchTxt: '',
|
||||
searchContents: []
|
||||
searchContents: [],
|
||||
// 福利片关键词
|
||||
r18KeyWords: ['伦理', '倫理', '福利', '激情', '理论', '写真', '情色', '美女', '街拍', '赤足', '性感', '里番']
|
||||
}
|
||||
},
|
||||
components: {
|
||||
@@ -185,11 +333,8 @@ export default {
|
||||
searchTxt () {
|
||||
this.searchChangeEvent()
|
||||
},
|
||||
'setting.site': {
|
||||
handler (nv) {
|
||||
this.getAllsites(nv)
|
||||
},
|
||||
deep: true
|
||||
'$store.state.editSites.sites': function () {
|
||||
this.getAllsites()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@@ -200,7 +345,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 +370,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 +432,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,30 +444,31 @@ 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 => {
|
||||
playEvent (site, e) {
|
||||
history.find({ site: site.key, ids: e.id }).then(res => {
|
||||
if (res) {
|
||||
this.video = { key: res.site, info: { id: res.ids, name: res.name, index: res.index } }
|
||||
this.video = { key: res.site, info: { id: res.ids, name: res.name, index: res.index, site: site } }
|
||||
} else {
|
||||
this.video = { key: this.site.key, info: { id: e.id, name: e.name, index: 0 } }
|
||||
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 => {
|
||||
starEvent (site, e) {
|
||||
star.find({ key: site.key, ids: e.id }).then(res => {
|
||||
if (res) {
|
||||
this.$message.info('已存在')
|
||||
} else {
|
||||
const docs = {
|
||||
site: this.site.key,
|
||||
key: site.key,
|
||||
ids: e.id,
|
||||
name: e.name,
|
||||
type: e.type,
|
||||
@@ -315,16 +484,16 @@ export default {
|
||||
this.$message.warning('收藏失败')
|
||||
})
|
||||
},
|
||||
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.length > 0) {
|
||||
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('#')
|
||||
@@ -340,7 +509,7 @@ export default {
|
||||
}
|
||||
} else {
|
||||
let m3u8List = []
|
||||
const dd = e.dl.dd
|
||||
const dd = res.dl.dd
|
||||
const type = Object.prototype.toString.call(dd)
|
||||
if (type === '[object Array]') {
|
||||
for (const i of dd) {
|
||||
@@ -378,8 +547,8 @@ export default {
|
||||
this.searchList = res.reverse()
|
||||
})
|
||||
},
|
||||
searchEvent () {
|
||||
const wd = this.searchTxt
|
||||
searchAllSitesEvent (sites, wd) {
|
||||
this.searchTxt = wd
|
||||
this.searchContents = []
|
||||
this.pagecount = 0
|
||||
this.show.search = false
|
||||
@@ -391,17 +560,20 @@ 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)
|
||||
}
|
||||
sites.forEach(site => {
|
||||
zy.search(site.key, wd).then(res => {
|
||||
const type = Object.prototype.toString.call(res)
|
||||
if (type === '[object Array]') {
|
||||
res.forEach(element => {
|
||||
element.site = site
|
||||
this.searchContents.push(element)
|
||||
})
|
||||
}
|
||||
if (type === '[object Object]') {
|
||||
res.site = site
|
||||
this.searchContents.push(res)
|
||||
}
|
||||
})
|
||||
})
|
||||
} else {
|
||||
this.show.find = false
|
||||
@@ -412,28 +584,17 @@ export default {
|
||||
})
|
||||
}
|
||||
},
|
||||
searchClickEvent (e) {
|
||||
this.searchContents = []
|
||||
this.pagecount = 0
|
||||
this.searchTxt = e.keywords
|
||||
this.show.search = false
|
||||
this.show.find = true
|
||||
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)
|
||||
}
|
||||
})
|
||||
searchEvent (wd) {
|
||||
if (this.setting.searchAllSites) {
|
||||
this.searchAllSitesEvent(this.sites, wd)
|
||||
} else {
|
||||
this.searchSingleSiteEvent(this.site, wd)
|
||||
}
|
||||
},
|
||||
searchSingleSiteEvent (site, wd) {
|
||||
var sites = []
|
||||
sites.push(this.site)
|
||||
this.searchAllSitesEvent(sites, wd)
|
||||
},
|
||||
clearSearch () {
|
||||
search.clear().then(res => {
|
||||
@@ -452,39 +613,27 @@ export default {
|
||||
}
|
||||
}
|
||||
},
|
||||
getAllsites (nv) {
|
||||
if (nv) {
|
||||
sites.all().then(res => {
|
||||
this.sites = res
|
||||
for (const i of res) {
|
||||
if (i.key === nv) {
|
||||
this.site = i
|
||||
this.siteClick(this.site)
|
||||
return false
|
||||
}
|
||||
}
|
||||
})
|
||||
} else {
|
||||
sites.all().then(res => {
|
||||
this.sites = res
|
||||
this.site = this.sites[0]
|
||||
this.siteClick(this.site)
|
||||
})
|
||||
}
|
||||
getAllsites () {
|
||||
sites.all().then(res => {
|
||||
this.sites = res
|
||||
this.site = this.sites[0]
|
||||
this.siteClick(this.site)
|
||||
})
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.getAllsites()
|
||||
this.getAllSearch()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.film{
|
||||
.film {
|
||||
height: calc(100% - 40px);
|
||||
width: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
.header{
|
||||
.header {
|
||||
height: 30px;
|
||||
width: 100%;
|
||||
display: flex;
|
||||
@@ -492,13 +641,13 @@ export default {
|
||||
justify-content: space-between;
|
||||
z-index: 10;
|
||||
}
|
||||
.body{
|
||||
.body {
|
||||
margin-top: 20px;
|
||||
flex: 1;
|
||||
width: 100%;
|
||||
border-radius: 0 0 5px 5px;
|
||||
overflow-y: scroll;
|
||||
&::-webkit-scrollbar{
|
||||
&::-webkit-scrollbar {
|
||||
width: 5px;
|
||||
height: 1px;
|
||||
}
|
||||
@@ -510,26 +659,26 @@ export default {
|
||||
border-radius: 10px;
|
||||
position: absolute;
|
||||
}
|
||||
.body-box{
|
||||
.body-box {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
}
|
||||
.show-img{
|
||||
.show-img {
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
padding: 10px;
|
||||
.card{
|
||||
.card {
|
||||
border-radius: 6px;
|
||||
overflow: hidden;
|
||||
.img{
|
||||
.img {
|
||||
position: relative;
|
||||
min-height: 40px;
|
||||
img{
|
||||
img {
|
||||
width: 100%;
|
||||
height: auto;
|
||||
cursor: pointer;
|
||||
}
|
||||
.operate{
|
||||
.operate {
|
||||
display: none;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
@@ -537,10 +686,12 @@ export default {
|
||||
background-color: #111111aa;
|
||||
width: 100%;
|
||||
font-size: 13px;
|
||||
.operate-wrap{
|
||||
.operate-wrap {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
.o-play, .o-star, .o-share{
|
||||
.o-play,
|
||||
.o-star,
|
||||
.o-share {
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
width: 80px;
|
||||
@@ -548,14 +699,14 @@ export default {
|
||||
text-align: center;
|
||||
line-height: 36px;
|
||||
color: #cdcdcd;
|
||||
&:hover{
|
||||
&:hover {
|
||||
background-color: #111;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.name{
|
||||
.name {
|
||||
font-size: 16px;
|
||||
padding: 10px;
|
||||
overflow: hidden;
|
||||
@@ -563,14 +714,14 @@ export default {
|
||||
white-space: nowrap;
|
||||
cursor: pointer;
|
||||
}
|
||||
.info{
|
||||
.info {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
font-size: 12px;
|
||||
padding: 10px;
|
||||
}
|
||||
&:hover{
|
||||
.operate{
|
||||
&:hover {
|
||||
.operate {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,16 +1,88 @@
|
||||
<template>
|
||||
<div class="frame">
|
||||
<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
|
||||
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
|
||||
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
|
||||
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
|
||||
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>
|
||||
@@ -45,7 +117,7 @@ export default {
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.frame{
|
||||
.frame {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
display: flex;
|
||||
@@ -53,7 +125,7 @@ export default {
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
-webkit-app-region: drag;
|
||||
span{
|
||||
span {
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
cursor: pointer;
|
||||
|
||||
@@ -3,19 +3,54 @@
|
||||
<div class="body zy-scroll">
|
||||
<div class="zy-table">
|
||||
<div class="tHeader">
|
||||
<span class="btn" @click="clearAllHistory">清空</span>
|
||||
<span class="btn"></span>
|
||||
<span
|
||||
class="btn"
|
||||
@click="clearAllHistory"
|
||||
>清空</span>
|
||||
</div>
|
||||
<div class="tBody zy-scroll">
|
||||
<ul>
|
||||
<li v-show="this.history.length === 0">无数据</li>
|
||||
<li v-for="(i, j) in history" :key="j" @click="historyItemEvent(i)">
|
||||
<span class="name" @click.stop="playEvent(i)">{{i.name}}</span>
|
||||
<span class="site">{{i.site}}</span>
|
||||
<span class="index">第{{i.index+1}}集</span>
|
||||
<span class="operate" style="width: 220px">
|
||||
<span class="btn" @click.stop="playEvent(i)">播放</span>
|
||||
<span class="btn" @click.stop="downloadEvent(i)">下载</span>
|
||||
<span class="btn" @click.stop="removeHistoryItem(i)">删除</span>
|
||||
<li v-show="this.history.length > 0">
|
||||
<span class="name">名字</span>
|
||||
<span class="site">片源</span>
|
||||
<span class="note">观看至</span>
|
||||
<span class="operate">
|
||||
<span class="btn"></span>
|
||||
<span class="btn"></span>
|
||||
<span class="btn"></span>
|
||||
<span class="btn"></span>
|
||||
</span>
|
||||
</li>
|
||||
<li
|
||||
v-for="(i, j) in history"
|
||||
:key="j"
|
||||
@click="historyItemEvent(i)"
|
||||
>
|
||||
<span
|
||||
class="name"
|
||||
@click.stop="detailEvent(i)"
|
||||
>{{i.name}}</span>
|
||||
<span class="site">{{getSiteName(i.site)}}</span>
|
||||
<span class="note">第{{i.index+1}}集</span>
|
||||
<span class="operate">
|
||||
<span
|
||||
class="btn"
|
||||
@click.stop="playEvent(i)"
|
||||
>播放</span>
|
||||
<span
|
||||
class="btn"
|
||||
@click.stop="shareEvent(i)"
|
||||
>分享</span>
|
||||
<span
|
||||
class="btn"
|
||||
@click.stop="downloadEvent(i)"
|
||||
>下载</span>
|
||||
<span
|
||||
class="btn"
|
||||
@click.stop="removeHistoryItem(i)"
|
||||
>删除</span>
|
||||
</span>
|
||||
</li>
|
||||
</ul>
|
||||
@@ -26,14 +61,15 @@
|
||||
</template>
|
||||
<script>
|
||||
import { mapMutations } from 'vuex'
|
||||
import { history } from '../lib/dexie'
|
||||
import { history, sites } from '../lib/dexie'
|
||||
import zy from '../lib/site/tools'
|
||||
const { clipboard } = require('electron')
|
||||
export default {
|
||||
name: 'history',
|
||||
data () {
|
||||
return {
|
||||
history: history
|
||||
history: history,
|
||||
sites: []
|
||||
}
|
||||
},
|
||||
computed: {
|
||||
@@ -73,6 +109,7 @@ export default {
|
||||
watch: {
|
||||
view () {
|
||||
this.getAllhistory()
|
||||
this.getAllsites()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@@ -97,9 +134,16 @@ export default {
|
||||
})
|
||||
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) {
|
||||
if (res && res.dl && res.dl.dd) {
|
||||
const text = res.dl.dd._t
|
||||
if (text) {
|
||||
const list = text.split('#')
|
||||
@@ -114,14 +158,28 @@ 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.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』格式的链接已复制, 快去下载吧!')
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
@@ -135,6 +193,17 @@ export default {
|
||||
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
|
||||
}
|
||||
},
|
||||
historyItemEvent (e) {
|
||||
this.video = {
|
||||
key: e.site,
|
||||
@@ -162,7 +231,7 @@ export default {
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.history{
|
||||
.history {
|
||||
position: relative;
|
||||
height: calc(100% - 40px);
|
||||
width: 100%;
|
||||
@@ -170,7 +239,7 @@ export default {
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 5px;
|
||||
.body{
|
||||
.body {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
329
src/components/IPTV.vue
Normal file
329
src/components/IPTV.vue
Normal file
@@ -0,0 +1,329 @@
|
||||
<template>
|
||||
<div class="detail">
|
||||
<div class="detail-content">
|
||||
<div class="detail-header">
|
||||
<div class="zy-select">
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="exportSites"
|
||||
>导出</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="importSites"
|
||||
>导入</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="removeAllSites"
|
||||
>清空</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="resetSites"
|
||||
>重置</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail-header">
|
||||
<div>
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="exportSites"
|
||||
>总频道数:{{iptvList.length}}</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(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="searchEvent(i.keywords)"
|
||||
>{{i.keywords}}</li>
|
||||
<li
|
||||
v-show="searchList.length >= 1"
|
||||
@click="clearSearch"
|
||||
>清空历史记录</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail-body zy-scroll">
|
||||
<div class="zy-table">
|
||||
<div class="tBody zy-scroll">
|
||||
<ul>
|
||||
<draggable
|
||||
v-model="iptvList"
|
||||
@change="listUpdatedEvent"
|
||||
>
|
||||
<transition-group>
|
||||
<li
|
||||
v-for="(i, j) in iptvList"
|
||||
:key="j"
|
||||
@click.stop="playEvent(i)"
|
||||
v-show="containsearchTxt(i)"
|
||||
>
|
||||
<span class="name">{{i.name}}</span>
|
||||
<span class="operate">
|
||||
<span
|
||||
class="btn"
|
||||
@click.stop="playEvent(i)"
|
||||
>播放</span>
|
||||
<span
|
||||
class="btn"
|
||||
@click.stop="removeEvent(i)"
|
||||
>删除</span>
|
||||
</span>
|
||||
</li>
|
||||
</transition-group>
|
||||
</draggable>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</template>
|
||||
<script>
|
||||
import { mapMutations } from 'vuex'
|
||||
import { iptv, iptvSearch } from '../lib/dexie'
|
||||
import draggable from 'vuedraggable'
|
||||
import { iptv as defaultSites } from '../lib/dexie/initData'
|
||||
import { remote } from 'electron'
|
||||
import fs from 'fs'
|
||||
export default {
|
||||
name: 'iptv',
|
||||
data () {
|
||||
return {
|
||||
iptvList: [],
|
||||
searchTxt: '',
|
||||
searchList: [],
|
||||
show: {
|
||||
search: false
|
||||
}
|
||||
}
|
||||
},
|
||||
components: {
|
||||
draggable
|
||||
},
|
||||
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)
|
||||
}
|
||||
}
|
||||
},
|
||||
watch: {
|
||||
view () {
|
||||
this.getAllSites()
|
||||
},
|
||||
searchTxt () {
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
...mapMutations(['SET_VIEW', 'SET_DETAIL', 'SET_VIDEO', 'SET_SHARE']),
|
||||
playEvent (e) {
|
||||
this.video = { iptv: { name: e.name, url: e.url } }
|
||||
this.view = 'Play'
|
||||
},
|
||||
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.getAllSites()
|
||||
}).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
|
||||
})
|
||||
})
|
||||
},
|
||||
exportSites () {
|
||||
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, 4)
|
||||
fs.writeFileSync(result.filePath, str)
|
||||
this.$message.success('已保存成功')
|
||||
}
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err)
|
||||
})
|
||||
},
|
||||
importSites () {
|
||||
const options = {
|
||||
filters: [
|
||||
{ name: 'm3u file', extensions: ['m3u', 'm3u8'] }
|
||||
],
|
||||
properties: ['openFile', 'multiSelections']
|
||||
}
|
||||
remote.dialog.showOpenDialog(options).then(result => {
|
||||
if (!result.canceled) {
|
||||
var docs = this.iptvList
|
||||
result.filePaths.forEach(file => {
|
||||
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 = {
|
||||
name: ele.name,
|
||||
url: ele.url
|
||||
}
|
||||
docs.push(doc)
|
||||
}
|
||||
})
|
||||
})
|
||||
// 获取url不重复的列表
|
||||
const uniqueList = [...new Map(docs.map(item => [item.url, item])).values()]
|
||||
iptv.clear().then(res => {
|
||||
iptv.bulkAdd(uniqueList).then(e => {
|
||||
this.getAllSites()
|
||||
this.$message.success('导入成功')
|
||||
})
|
||||
})
|
||||
}
|
||||
})
|
||||
},
|
||||
resetSites () {
|
||||
iptv.clear()
|
||||
iptv.bulkAdd(defaultSites).then(e => {
|
||||
this.getAllSites()
|
||||
})
|
||||
},
|
||||
removeAllSites () {
|
||||
iptv.clear().then(res => {
|
||||
this.getAllSites()
|
||||
})
|
||||
},
|
||||
getAllSites () {
|
||||
iptv.all().then(res => {
|
||||
this.iptvList = res
|
||||
})
|
||||
},
|
||||
getAllSearch () {
|
||||
iptvSearch.all().then(res => {
|
||||
this.searchList = res.reverse()
|
||||
})
|
||||
},
|
||||
clearSearch () {
|
||||
iptvSearch.clear().then(res => {
|
||||
this.getAllSearch()
|
||||
})
|
||||
},
|
||||
searchEvent (wd) {
|
||||
this.searchTxt = wd
|
||||
this.show.search = false
|
||||
if (wd) {
|
||||
iptvSearch.find({ keywords: wd }).then(res => {
|
||||
if (!res) {
|
||||
iptvSearch.add({ keywords: wd })
|
||||
}
|
||||
this.getAllSearch()
|
||||
})
|
||||
}
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.getAllSites()
|
||||
this.getAllSearch()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.detail {
|
||||
position: absolute;
|
||||
left: 80px;
|
||||
right: 20px;
|
||||
bottom: 0;
|
||||
width: calc(100% - 100px);
|
||||
height: calc(100% - 40px);
|
||||
z-index: 888;
|
||||
.detail-content {
|
||||
height: calc(100% - 10px);
|
||||
padding: 0 60px;
|
||||
position: relative;
|
||||
.detail-header {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
.detail-title {
|
||||
font-size: 16px;
|
||||
}
|
||||
.detail-close {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail-body {
|
||||
height: calc(100% - 50px);
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
@@ -3,9 +3,46 @@
|
||||
<div class="box">
|
||||
<div class="title">
|
||||
<span v-if="this.right.list.length > 1">『第 {{(video.info.index + 1)}} 集』</span>{{name}}
|
||||
<span v-if="video.key" class="right" @click="issueEvent" title="复制调试信息">
|
||||
<svg t="1596338860607" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="3127" width="24" height="24">
|
||||
<path d="M503.803829 63.578014c-247.050676 0-447.328072 200.277396-447.328072 447.327048 0 247.054769 200.277396 447.333188 447.328072 447.333188 247.054769 0 447.332165-200.278419 447.332165-447.333188C951.13497 263.85541 750.858598 63.578014 503.803829 63.578014L503.803829 63.578014zM503.803829 894.313336c-211.749682 0-383.408273-171.659615-383.408273-383.408273 0-211.749682 171.659615-383.40725 383.408273-383.40725 211.753775 0 383.412366 171.658591 383.412366 383.40725C887.216195 722.653721 715.557604 894.313336 503.803829 894.313336L503.803829 894.313336zM447.745069 255.897158l127.914298 0L575.659367 383.576095 447.745069 383.576095 447.745069 255.897158 447.745069 255.897158zM447.745069 425.470251l127.914298 0 0 342.058516L447.745069 767.528767 447.745069 425.470251 447.745069 425.470251zM447.745069 425.470251" p-id="3128"></path>
|
||||
<span
|
||||
v-if="video.key"
|
||||
class="right"
|
||||
@click="playWithExternalPalyerEvent"
|
||||
title="使用第三方播放器"
|
||||
>
|
||||
<svg
|
||||
role="img"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
>
|
||||
<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
|
||||
v-if="video.key"
|
||||
class="right"
|
||||
@click="issueEvent"
|
||||
title="复制调试信息"
|
||||
>
|
||||
<svg
|
||||
t="1596338860607"
|
||||
class="icon"
|
||||
viewBox="0 0 1024 1024"
|
||||
version="1.1"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="3127"
|
||||
width="24"
|
||||
height="24"
|
||||
>
|
||||
<path
|
||||
d="M503.803829 63.578014c-247.050676 0-447.328072 200.277396-447.328072 447.327048 0 247.054769 200.277396 447.333188 447.328072 447.333188 247.054769 0 447.332165-200.278419 447.332165-447.333188C951.13497 263.85541 750.858598 63.578014 503.803829 63.578014L503.803829 63.578014zM503.803829 894.313336c-211.749682 0-383.408273-171.659615-383.408273-383.408273 0-211.749682 171.659615-383.40725 383.408273-383.40725 211.753775 0 383.412366 171.658591 383.412366 383.40725C887.216195 722.653721 715.557604 894.313336 503.803829 894.313336L503.803829 894.313336zM447.745069 255.897158l127.914298 0L575.659367 383.576095 447.745069 383.576095 447.745069 255.897158 447.745069 255.897158zM447.745069 425.470251l127.914298 0 0 342.058516L447.745069 767.528767 447.745069 425.470251 447.745069 425.470251zM447.745069 425.470251"
|
||||
p-id="3128"
|
||||
></path>
|
||||
</svg>
|
||||
</span>
|
||||
</div>
|
||||
@@ -13,92 +50,314 @@
|
||||
<div id="xgplayer"></div>
|
||||
</div>
|
||||
<div class="more">
|
||||
<span class="zy-svg" @click="nextEvent" v-show="showNext">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="forwardIconTitle">
|
||||
<span
|
||||
class="zy-svg"
|
||||
@click="nextEvent"
|
||||
v-show="showNext"
|
||||
>
|
||||
<svg
|
||||
role="img"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
aria-labelledby="forwardIconTitle"
|
||||
>
|
||||
<title id="forwardIconTitle">下一集</title>
|
||||
<path d="M10 14.74L3 19V5l7 4.26V5l12 7-12 7v-4.26z"></path>
|
||||
</svg>
|
||||
</span>
|
||||
<span class="zy-svg" @click="listEvent" :class="right.type === 'list' ? 'active' : ''" v-show="right.list.length > 0">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="dashboardIconTitle">
|
||||
<span
|
||||
class="zy-svg"
|
||||
@click="listEvent"
|
||||
:class="right.type === 'list' ? 'active' : ''"
|
||||
v-show="right.list.length > 0"
|
||||
>
|
||||
<svg
|
||||
role="img"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
aria-labelledby="dashboardIconTitle"
|
||||
>
|
||||
<title id="dashboardIconTitle">播放列表</title>
|
||||
<rect width="20" height="20" x="2" y="2"></rect>
|
||||
<rect
|
||||
width="20"
|
||||
height="20"
|
||||
x="2"
|
||||
y="2"
|
||||
></rect>
|
||||
<path d="M11 7L17 7M11 12L17 12M11 17L17 17"></path>
|
||||
<line x1="7" y1="7" x2="7" y2="7"></line>
|
||||
<line x1="7" y1="12" x2="7" y2="12"></line>
|
||||
<line x1="7" y1="17" x2="7" y2="17"></line>
|
||||
<line
|
||||
x1="7"
|
||||
y1="7"
|
||||
x2="7"
|
||||
y2="7"
|
||||
></line>
|
||||
<line
|
||||
x1="7"
|
||||
y1="12"
|
||||
x2="7"
|
||||
y2="12"
|
||||
></line>
|
||||
<line
|
||||
x1="7"
|
||||
y1="17"
|
||||
x2="7"
|
||||
y2="17"
|
||||
></line>
|
||||
</svg>
|
||||
</span>
|
||||
<span class="zy-svg" @click="historyEvent" :class="right.type === 'history' ? 'active' : ''">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="timeIconTitle">
|
||||
<span
|
||||
class="zy-svg"
|
||||
@click="historyEvent"
|
||||
:class="right.type === 'history' ? 'active' : ''"
|
||||
>
|
||||
<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>
|
||||
<circle
|
||||
cx="12"
|
||||
cy="12"
|
||||
r="10"
|
||||
></circle>
|
||||
<polyline points="12 5 12 12 16 16"></polyline>
|
||||
</svg>
|
||||
</span>
|
||||
<span class="zy-svg" @click="starEvent" :class="isStar ? 'active' : ''" v-show="right.list.length > 0">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="favouriteIconTitle">
|
||||
<span
|
||||
class="zy-svg"
|
||||
@click="starEvent"
|
||||
:class="isStar ? 'active' : ''"
|
||||
v-show="right.list.length > 0"
|
||||
>
|
||||
<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">收藏</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="zy-svg" @click="detailEvent" v-show="right.list.length > 0">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="feedIconTitle">
|
||||
<span
|
||||
class="zy-svg"
|
||||
@click="detailEvent"
|
||||
v-show="right.list.length > 0"
|
||||
>
|
||||
<svg
|
||||
role="img"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
aria-labelledby="feedIconTitle"
|
||||
>
|
||||
<title id="feedIconTitle">详情</title>
|
||||
<circle cx="7.5" cy="7.5" r="2.5"></circle>
|
||||
<circle
|
||||
cx="7.5"
|
||||
cy="7.5"
|
||||
r="2.5"
|
||||
></circle>
|
||||
<path d="M22 13H2"></path>
|
||||
<path d="M18 6h-5m5 3h-5"></path>
|
||||
<path d="M5 2h14a3 3 0 0 1 3 3v17H2V5a3 3 0 0 1 3-3z"></path>
|
||||
</svg>
|
||||
</span>
|
||||
<span class="zy-svg" @click="miniEvent" v-show="right.list.length > 0">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="tvIconTitle">
|
||||
<span
|
||||
class="zy-svg"
|
||||
@click="miniEvent"
|
||||
v-show="right.list.length > 0"
|
||||
>
|
||||
<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>
|
||||
<polyline
|
||||
stroke-linejoin="round"
|
||||
points="8 4 12 7.917 16 4"
|
||||
></polyline>
|
||||
</svg>
|
||||
</span>
|
||||
<span class="zy-svg" @click="shareEvent" v-show="right.list.length > 0">
|
||||
<svg width="24" height="24" viewBox="0 0 24 24" fill="none" xmlns="http://www.w3.org/2000/svg" aria-labelledby="qrIconTitle">
|
||||
<span
|
||||
class="zy-svg"
|
||||
@click="shareEvent"
|
||||
v-show="right.list.length > 0"
|
||||
>
|
||||
<svg
|
||||
width="24"
|
||||
height="24"
|
||||
viewBox="0 0 24 24"
|
||||
fill="none"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
aria-labelledby="qrIconTitle"
|
||||
>
|
||||
<title id="qrIconTitle">分享</title>
|
||||
<rect x="10" y="3" width="7" height="7" transform="rotate(90 10 3)"></rect>
|
||||
<rect width="1" height="1" transform="matrix(-1 0 0 1 7 6)"></rect>
|
||||
<rect x="10" y="14" width="7" height="7" transform="rotate(90 10 14)"></rect>
|
||||
<rect x="6" y="17" width="1" height="1"></rect>
|
||||
<rect x="14" y="20" width="1" height="1"></rect>
|
||||
<rect x="17" y="17" width="1" height="1"></rect>
|
||||
<rect x="14" y="14" width="1" height="1"></rect>
|
||||
<rect x="20" y="17" width="1" height="1"></rect>
|
||||
<rect x="20" y="14" width="1" height="1"></rect>
|
||||
<rect x="20" y="20" width="1" height="1"></rect>
|
||||
<rect x="21" y="3" width="7" height="7" transform="rotate(90 21 3)"></rect>
|
||||
<rect x="17" y="6" width="1" height="1"></rect>
|
||||
<rect
|
||||
x="10"
|
||||
y="3"
|
||||
width="7"
|
||||
height="7"
|
||||
transform="rotate(90 10 3)"
|
||||
></rect>
|
||||
<rect
|
||||
width="1"
|
||||
height="1"
|
||||
transform="matrix(-1 0 0 1 7 6)"
|
||||
></rect>
|
||||
<rect
|
||||
x="10"
|
||||
y="14"
|
||||
width="7"
|
||||
height="7"
|
||||
transform="rotate(90 10 14)"
|
||||
></rect>
|
||||
<rect
|
||||
x="6"
|
||||
y="17"
|
||||
width="1"
|
||||
height="1"
|
||||
></rect>
|
||||
<rect
|
||||
x="14"
|
||||
y="20"
|
||||
width="1"
|
||||
height="1"
|
||||
></rect>
|
||||
<rect
|
||||
x="17"
|
||||
y="17"
|
||||
width="1"
|
||||
height="1"
|
||||
></rect>
|
||||
<rect
|
||||
x="14"
|
||||
y="14"
|
||||
width="1"
|
||||
height="1"
|
||||
></rect>
|
||||
<rect
|
||||
x="20"
|
||||
y="17"
|
||||
width="1"
|
||||
height="1"
|
||||
></rect>
|
||||
<rect
|
||||
x="20"
|
||||
y="14"
|
||||
width="1"
|
||||
height="1"
|
||||
></rect>
|
||||
<rect
|
||||
x="20"
|
||||
y="20"
|
||||
width="1"
|
||||
height="1"
|
||||
></rect>
|
||||
<rect
|
||||
x="21"
|
||||
y="3"
|
||||
width="7"
|
||||
height="7"
|
||||
transform="rotate(90 21 3)"
|
||||
></rect>
|
||||
<rect
|
||||
x="17"
|
||||
y="6"
|
||||
width="1"
|
||||
height="1"
|
||||
></rect>
|
||||
</svg>
|
||||
</span>
|
||||
<span class="last-tip" v-if="!video.key && right.history.length > 0" @click="historyItemEvent(right.history[0])">上次播放到【{{right.history[0].site}}】{{right.history[0].name}} 第{{right.history[0].index+1}}集</span>
|
||||
<span
|
||||
class="last-tip"
|
||||
v-if="!video.key && right.history.length > 0"
|
||||
@click="historyItemEvent(right.history[0])"
|
||||
>上次播放到【{{right.history[0].site}}】{{right.history[0].name}} 第{{right.history[0].index+1}}集</span>
|
||||
</div>
|
||||
</div>
|
||||
<transition name="slideX">
|
||||
<div v-if="right.show" class="list">
|
||||
<div
|
||||
v-if="right.show"
|
||||
class="list"
|
||||
>
|
||||
<div class="list-top">
|
||||
<span class="list-top-title">{{ right.type === 'list' ? '播放列表' : '历史记录' }}</span>
|
||||
<span class="list-top-close zy-svg" @click="closeListEvent">
|
||||
<svg role="img" xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" aria-labelledby="closeIconTitle">
|
||||
<span
|
||||
class="list-top-close zy-svg"
|
||||
@click="closeListEvent"
|
||||
>
|
||||
<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>
|
||||
</span>
|
||||
</div>
|
||||
<div class="list-body zy-scroll" :style="{overflowY:scroll? 'auto' : 'hidden',paddingRight: scroll ? '0': '5px' }" @mouseenter="scroll = true" @mouseleave="scroll = false">
|
||||
<ul v-show="right.type === 'list'" class="list-item">
|
||||
<li v-show="right.list.length > 0" @click="exportM3u8">导出</li>
|
||||
<div
|
||||
class="list-body zy-scroll"
|
||||
:style="{overflowY:scroll? 'auto' : 'hidden',paddingRight: scroll ? '0': '5px' }"
|
||||
@mouseenter="scroll = true"
|
||||
@mouseleave="scroll = false"
|
||||
>
|
||||
<ul
|
||||
v-show="right.type === 'list'"
|
||||
class="list-item"
|
||||
>
|
||||
<li
|
||||
v-show="right.list.length > 0"
|
||||
@click="exportM3u8"
|
||||
>导出</li>
|
||||
<li v-show="right.list.length === 0">无数据</li>
|
||||
<li @click="listItemEvent(j)" :class="video.info.index === j ? 'active' : ''" v-for="(i, j) in right.list" :key="j">{{i | ftName(j)}}</li>
|
||||
<li
|
||||
@click="listItemEvent(j)"
|
||||
:class="video.info.index === j ? 'active' : ''"
|
||||
v-for="(i, j) in right.list"
|
||||
:key="j"
|
||||
>{{i | ftName(j)}}</li>
|
||||
</ul>
|
||||
<ul v-show="right.type === 'history'" class="list-history">
|
||||
<li v-show="right.history.length > 0" @click="clearAllHistory">清空</li>
|
||||
<ul
|
||||
v-show="right.type === 'history'"
|
||||
class="list-history"
|
||||
>
|
||||
<li
|
||||
v-show="right.history.length > 0"
|
||||
@click="clearAllHistory"
|
||||
>清空</li>
|
||||
<li v-show="right.history.length === 0">无数据</li>
|
||||
<li @click="historyItemEvent(m)" :class="video.info.id === m.ids ? 'active' : ''" v-for="(m, n) in right.history" :key="n"><span class="title" :title="'【' + m.site + '】' + m.name + ' 第' + (m.index+1) + '集'">【{{m.site}}】{{m.name}} 第{{m.index+1}}集</span><span @click.stop="removeHistoryItem(m)" class="detail-delete">删除</span></li>
|
||||
<li
|
||||
@click="historyItemEvent(m)"
|
||||
:class="video.info.id === m.ids ? 'active' : ''"
|
||||
v-for="(m, n) in right.history"
|
||||
:key="n"
|
||||
><span
|
||||
class="title"
|
||||
:title="'【' + m.site + '】' + m.name + ' 第' + (m.index+1) + '集'"
|
||||
>【{{m.site}}】{{m.name}} 第{{m.index+1}}集</span><span
|
||||
@click.stop="removeHistoryItem(m)"
|
||||
class="detail-delete"
|
||||
>删除</span></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -107,7 +366,7 @@
|
||||
</template>
|
||||
<script>
|
||||
import { mapMutations } from 'vuex'
|
||||
import { star, history, setting, shortcut, mini } from '../lib/dexie'
|
||||
import { star, history, setting, shortcut, mini, iptv } from '../lib/dexie'
|
||||
import zy from '../lib/site/tools'
|
||||
import Player from 'xgplayer'
|
||||
import Hls from 'xgplayer-hls.js'
|
||||
@@ -198,7 +457,8 @@ export default {
|
||||
showNext: false,
|
||||
isStar: false,
|
||||
isTop: false,
|
||||
mini: {}
|
||||
mini: {},
|
||||
iptvList: []
|
||||
}
|
||||
},
|
||||
filters: {
|
||||
@@ -290,18 +550,26 @@ export default {
|
||||
this.xg.pause()
|
||||
}
|
||||
}
|
||||
|
||||
const index = this.video.info.index | 0
|
||||
let time = 0
|
||||
|
||||
history.find({ site: this.video.key, ids: this.video.info.id }).then(res => {
|
||||
if (res) {
|
||||
if (res.index === index) {
|
||||
time = res.time
|
||||
if (this.video.iptv) {
|
||||
// 是直播源,直接播放
|
||||
this.playUrl(this.video.iptv.url)
|
||||
this.getIptvList()
|
||||
} else {
|
||||
const index = this.video.info.index | 0
|
||||
let time = 0
|
||||
history.find({ site: this.video.key, ids: this.video.info.id }).then(res => {
|
||||
if (res) {
|
||||
if (res.index === index) {
|
||||
time = res.time
|
||||
}
|
||||
}
|
||||
}
|
||||
this.playVideo(index, time)
|
||||
})
|
||||
this.playVideo(index, time)
|
||||
})
|
||||
}
|
||||
},
|
||||
playUrl (url) {
|
||||
this.xg.src = url
|
||||
this.xg.play()
|
||||
},
|
||||
playVideo (index = 0, time = 0) {
|
||||
this.fetchM3u8List().then(m3u8Arr => {
|
||||
@@ -378,7 +646,6 @@ export default {
|
||||
history.find({ site: this.video.key, ids: this.video.info.id }).then(res => {
|
||||
if (res) {
|
||||
const doc = {
|
||||
id: res.id,
|
||||
site: res.site,
|
||||
ids: res.ids,
|
||||
name: res.name,
|
||||
@@ -387,7 +654,8 @@ export default {
|
||||
index: this.video.info.index,
|
||||
time: res.time
|
||||
}
|
||||
history.update(res.id, doc)
|
||||
history.remove(res.id)
|
||||
history.add(doc)
|
||||
} else {
|
||||
const doc = {
|
||||
site: this.video.key,
|
||||
@@ -401,6 +669,7 @@ export default {
|
||||
history.add(doc)
|
||||
}
|
||||
})
|
||||
this.updateStar()
|
||||
this.timerEvent()
|
||||
},
|
||||
changeVideo () {
|
||||
@@ -420,19 +689,41 @@ export default {
|
||||
}, 10000)
|
||||
},
|
||||
prevEvent () {
|
||||
if (this.video.info.index >= 1) {
|
||||
this.video.info.index--
|
||||
this.video.info.time = 0
|
||||
if (this.video.iptv) {
|
||||
var index = this.iptvList.findIndex(obj => obj.name === this.video.iptv.name && obj.url === this.video.iptv.url)
|
||||
if (index >= 1) {
|
||||
var channel = this.iptvList[index - 1]
|
||||
this.video.iptv = channel
|
||||
this.playUrl(channel.url)
|
||||
} else {
|
||||
this.$message.warning('这已经是第一个频道了。')
|
||||
}
|
||||
} else {
|
||||
this.$message.warning('这已经是第一集了。')
|
||||
if (this.video.info.index >= 1) {
|
||||
this.video.info.index--
|
||||
this.video.info.time = 0
|
||||
} else {
|
||||
this.$message.warning('这已经是第一集了。')
|
||||
}
|
||||
}
|
||||
},
|
||||
nextEvent () {
|
||||
if (this.video.info.index < (this.right.list.length - 1)) {
|
||||
this.video.info.index++
|
||||
this.video.info.time = 0
|
||||
if (this.video.iptv) {
|
||||
var index = this.iptvList.findIndex(obj => obj.name === this.video.iptv.name && obj.url === this.video.iptv.url)
|
||||
if (index < (this.iptvList.length - 1)) {
|
||||
var channel = this.iptvList[index + 1]
|
||||
this.video.iptv = channel
|
||||
this.playUrl(channel.url)
|
||||
} else {
|
||||
this.$message.warning('这已经是最后一个频道了。')
|
||||
}
|
||||
} else {
|
||||
this.$message.warning('这已经是最后一集了。')
|
||||
if (this.video.info.index < (this.right.list.length - 1)) {
|
||||
this.video.info.index++
|
||||
this.video.info.time = 0
|
||||
} else {
|
||||
this.$message.warning('这已经是最后一集了。')
|
||||
}
|
||||
}
|
||||
},
|
||||
listEvent () {
|
||||
@@ -459,25 +750,34 @@ export default {
|
||||
this.right.history = res.reverse()
|
||||
})
|
||||
},
|
||||
updateStar () {
|
||||
const info = this.video.info
|
||||
star.find({ key: this.video.key, ids: info.id }).then(res => {
|
||||
if (res) {
|
||||
res.index = info.index
|
||||
star.update(res.id, res)
|
||||
}
|
||||
}).catch(() => {
|
||||
this.$message.warning('检查收藏失败')
|
||||
})
|
||||
},
|
||||
starEvent () {
|
||||
const info = this.video.info
|
||||
star.find({ site: this.video.key, ids: info.id }).then(res => {
|
||||
star.find({ key: this.video.key, ids: info.id }).then(res => {
|
||||
const doc = {
|
||||
key: this.video.key,
|
||||
ids: info.id,
|
||||
name: info.name,
|
||||
type: info.type,
|
||||
year: info.year,
|
||||
last: info.last,
|
||||
note: info.note,
|
||||
index: info.index
|
||||
}
|
||||
if (res) {
|
||||
star.remove(res.id).then(e => {
|
||||
this.$message.info('取消收藏')
|
||||
this.isStar = false
|
||||
})
|
||||
star.update(res.id, doc)
|
||||
} else {
|
||||
const docs = {
|
||||
site: this.video.key,
|
||||
ids: info.id,
|
||||
name: info.name,
|
||||
type: info.type,
|
||||
year: info.year,
|
||||
last: info.last,
|
||||
note: info.note
|
||||
}
|
||||
star.add(docs).then(res => {
|
||||
star.add(doc).then(starRes => {
|
||||
this.$message.success('收藏成功')
|
||||
this.isStar = true
|
||||
})
|
||||
@@ -537,8 +837,47 @@ export default {
|
||||
clipboard.writeText(JSON.stringify(info, null, 4))
|
||||
this.$message.success('视频信息复制成功')
|
||||
},
|
||||
playWithExternalPalyerEvent () {
|
||||
this.fetchM3u8List().then(m3u8Arr => {
|
||||
const fs = require('fs')
|
||||
var externalPlayer = this.setting.externalPlayer
|
||||
if (!externalPlayer) {
|
||||
this.$message.error('请设置第三方播放器路径')
|
||||
// 在线播放该视频
|
||||
var link = 'https://www.m3u8play.com/?play=' + m3u8Arr[this.video.info.index]
|
||||
const open = require('open')
|
||||
open(link)
|
||||
} else {
|
||||
var m3uFile = this.generateM3uFile(this.video.info.name, m3u8Arr, this.video.info.index)
|
||||
if (fs.existsSync(externalPlayer)) {
|
||||
var execFile = require('child_process').execFile
|
||||
execFile(externalPlayer, [m3uFile])
|
||||
} else {
|
||||
var exec = require('child_process').exec
|
||||
exec(externalPlayer, [m3uFile])
|
||||
}
|
||||
}
|
||||
})
|
||||
},
|
||||
generateM3uFile (fileName, m3u8Arr, startIndex) {
|
||||
const path = require('path')
|
||||
const os = require('os')
|
||||
const fs = require('fs')
|
||||
var filePath = path.join(os.tmpdir(), fileName + '.m3u')
|
||||
if (fs.existsSync(filePath)) {
|
||||
fs.unlinkSync(filePath)
|
||||
}
|
||||
var str = '#EXTM3U' + os.EOL
|
||||
for (let ind = startIndex; ind < m3u8Arr.length; ind++) {
|
||||
str += `#EXTINF: -1, 第${ind + 1}集` + os.EOL
|
||||
str += m3u8Arr[ind] + os.EOL
|
||||
}
|
||||
str += '#EXT-X-ENDLIST' + os.EOL
|
||||
fs.writeFileSync(filePath, str)
|
||||
return filePath
|
||||
},
|
||||
checkStar () {
|
||||
star.find({ site: this.video.key, ids: this.video.info.id }).then(res => {
|
||||
star.find({ key: this.video.key, ids: this.video.info.id }).then(res => {
|
||||
if (res) {
|
||||
this.isStar = true
|
||||
} else {
|
||||
@@ -596,10 +935,17 @@ export default {
|
||||
})
|
||||
},
|
||||
listItemEvent (n) {
|
||||
this.video.info.time = 0
|
||||
this.video.info.index = n
|
||||
this.right.show = false
|
||||
this.right.type = ''
|
||||
if (this.video.iptv) {
|
||||
var channel = this.iptvList[n]
|
||||
this.video.iptv = channel
|
||||
// 是直播源,直接播放
|
||||
this.playUrl(channel.url)
|
||||
} else {
|
||||
this.video.info.time = 0
|
||||
this.video.info.index = n
|
||||
this.right.show = false
|
||||
this.right.type = ''
|
||||
}
|
||||
},
|
||||
historyItemEvent (e) {
|
||||
this.video = {
|
||||
@@ -658,13 +1004,13 @@ export default {
|
||||
}
|
||||
if (e === 'forward') {
|
||||
if (this.xg && !this.xg.paused) {
|
||||
this.xg.currentTime += 5
|
||||
this.xg.currentTime += parseInt(this.setting.forwardTimeInSec)
|
||||
}
|
||||
return false
|
||||
}
|
||||
if (e === 'back') {
|
||||
if (this.xg && !this.xg.paused) {
|
||||
this.xg.currentTime -= 5
|
||||
this.xg.currentTime -= parseInt(this.setting.forwardTimeInSec)
|
||||
}
|
||||
return false
|
||||
}
|
||||
@@ -798,22 +1144,35 @@ export default {
|
||||
}
|
||||
ul.style.display = 'none'
|
||||
let li = ''
|
||||
if (this.right.list.length === 0) {
|
||||
li = '<li>无数据</li>'
|
||||
} else {
|
||||
for (let index = 0; index < this.right.list.length; index++) {
|
||||
const item = this.right.list[index]
|
||||
const num = item.split('$')
|
||||
let title
|
||||
if (num.length > 1) {
|
||||
title = num[0]
|
||||
if (this.video.iptv) {
|
||||
// 直播频道列表
|
||||
let index = 0
|
||||
this.iptvList.forEach(e => {
|
||||
if (e.name === this.video.iptv.name && e.url === this.video.iptv.url) {
|
||||
li += `<li class="selected" data-index="${index}" title="${e.name}">${e.name}</li>`
|
||||
} else {
|
||||
title = `第${(index + 1)}集`
|
||||
li += `<li data-index="${index}" title="${e.name}">${e.name}</li>`
|
||||
}
|
||||
if (index === this.video.info.index) {
|
||||
li += `<li class="selected" data-index="${index}" title="${title}">${title}</li>`
|
||||
} else {
|
||||
li += `<li data-index="${index}" title="${title}">${title}</li>`
|
||||
index += 1
|
||||
})
|
||||
} else {
|
||||
if (this.right.list.length === 0) {
|
||||
li = '<li>无数据</li>'
|
||||
} else {
|
||||
for (let index = 0; index < this.right.list.length; index++) {
|
||||
const item = this.right.list[index]
|
||||
const num = item.split('$')
|
||||
let title
|
||||
if (num.length > 1) {
|
||||
title = num[0]
|
||||
} else {
|
||||
title = `第${(index + 1)}集`
|
||||
}
|
||||
if (index === this.video.info.index) {
|
||||
li += `<li class="selected" data-index="${index}" title="${title}">${title}</li>`
|
||||
} else {
|
||||
li += `<li data-index="${index}" title="${title}">${title}</li>`
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -847,7 +1206,7 @@ export default {
|
||||
let li = ''
|
||||
if (this.right.history.length === 0) {
|
||||
li = '<li>无数据</li>'
|
||||
} else {
|
||||
} else if (!this.video.iptv) {
|
||||
window.historyItemEvent = this.historyItemEvent.bind(this)
|
||||
for (let index = 0; index < this.right.history.length; index++) {
|
||||
const item = this.right.history[index]
|
||||
@@ -861,6 +1220,11 @@ export default {
|
||||
}
|
||||
ul.innerHTML = li
|
||||
},
|
||||
getIptvList () {
|
||||
iptv.all().then(res => {
|
||||
this.iptvList = res
|
||||
})
|
||||
},
|
||||
bindEvent () {
|
||||
this.xg.on('playNextOne', () => {
|
||||
this.nextEvent()
|
||||
@@ -976,7 +1340,8 @@ export default {
|
||||
.xgplayer-skin-default .xg-btn-playNextOne:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
.xgplayer-skin-default .xgplayer-play, .xgplayer-skin-default .xgplayer-play-img {
|
||||
.xgplayer-skin-default .xgplayer-play,
|
||||
.xgplayer-skin-default .xgplayer-play-img {
|
||||
order: 1 !important;
|
||||
}
|
||||
.xgplayer-skin-default .xg-btn-showList {
|
||||
@@ -1005,63 +1370,70 @@ export default {
|
||||
.xgplayer-skin-default .xg-btn-showHistory:hover {
|
||||
opacity: 0.8;
|
||||
}
|
||||
.xgplayer-skin-default .xg-btn-showList ul, .xgplayer-skin-default .xg-btn-showHistory ul {
|
||||
display: none;
|
||||
list-style: none;
|
||||
min-width: 85px;
|
||||
max-width: 300px;
|
||||
max-height: 60vh;
|
||||
overflow-y: scroll;
|
||||
background: rgba(0,0,0,.54);
|
||||
border-radius: 1px;
|
||||
position: absolute;
|
||||
bottom: 45px;
|
||||
left: 50%;
|
||||
-webkit-transform: translateX(-50%);
|
||||
-ms-transform: translateX(-50%);
|
||||
transform: translateX(-50%);
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
z-index: 26;
|
||||
cursor: pointer;
|
||||
.xgplayer-skin-default .xg-btn-showList ul,
|
||||
.xgplayer-skin-default .xg-btn-showHistory ul {
|
||||
display: none;
|
||||
list-style: none;
|
||||
min-width: 85px;
|
||||
max-width: 300px;
|
||||
max-height: 60vh;
|
||||
overflow-y: scroll;
|
||||
background: rgba(0, 0, 0, 0.54);
|
||||
border-radius: 1px;
|
||||
position: absolute;
|
||||
bottom: 45px;
|
||||
left: 50%;
|
||||
-webkit-transform: translateX(-50%);
|
||||
-ms-transform: translateX(-50%);
|
||||
transform: translateX(-50%);
|
||||
text-align: left;
|
||||
white-space: nowrap;
|
||||
z-index: 26;
|
||||
cursor: pointer;
|
||||
}
|
||||
.xgplayer-skin-default .xg-btn-showList ul li, .xgplayer-skin-default .xg-btn-showHistory ul li {
|
||||
opacity: .7;
|
||||
font-family: PingFangSC-Regular;
|
||||
font-size: 13px;
|
||||
color: hsla(0,0%,100%,.8);
|
||||
position: relative;
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
.xgplayer-skin-default .xg-btn-showList ul li,
|
||||
.xgplayer-skin-default .xg-btn-showHistory ul li {
|
||||
opacity: 0.7;
|
||||
font-family: PingFangSC-Regular;
|
||||
font-size: 13px;
|
||||
color: hsla(0, 0%, 100%, 0.8);
|
||||
position: relative;
|
||||
padding: 5px;
|
||||
text-align: center;
|
||||
}
|
||||
.xgplayer-skin-default .xg-btn-showList ul li:first-child, .xgplayer-skin-default .xg-btn-showHistory ul li:first-child {
|
||||
position: relative;
|
||||
margin-top: 12px;
|
||||
.xgplayer-skin-default .xg-btn-showList ul li:first-child,
|
||||
.xgplayer-skin-default .xg-btn-showHistory ul li:first-child {
|
||||
position: relative;
|
||||
margin-top: 12px;
|
||||
}
|
||||
.xgplayer-skin-default .xg-btn-showList ul li:last-child, .xgplayer-skin-default .xg-btn-showHistory ul li:last-child {
|
||||
margin-bottom: 12px;
|
||||
.xgplayer-skin-default .xg-btn-showList ul li:last-child,
|
||||
.xgplayer-skin-default .xg-btn-showHistory ul li:last-child {
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
.xgplayer-skin-default .xg-btn-showList ul li.selected, .xgplayer-skin-default .xg-btn-showHistory ul li.selected, .xgplayer-skin-default .xg-btn-showList ul li:hover, .xgplayer-skin-default .xg-btn-showHistory ul li:hover {
|
||||
color: #fff;
|
||||
opacity: 1;
|
||||
.xgplayer-skin-default .xg-btn-showList ul li.selected,
|
||||
.xgplayer-skin-default .xg-btn-showHistory ul li.selected,
|
||||
.xgplayer-skin-default .xg-btn-showList ul li:hover,
|
||||
.xgplayer-skin-default .xg-btn-showHistory ul li:hover {
|
||||
color: #fff;
|
||||
opacity: 1;
|
||||
}
|
||||
.xgplayer-skin-default .xgplayer-volume {
|
||||
width: 32px !important;
|
||||
width: 32px !important;
|
||||
}
|
||||
.xgplayer-skin-default .xgplayer-playbackrate {
|
||||
width: 40px !important;
|
||||
width: 40px !important;
|
||||
}
|
||||
.xgplayer-skin-default .xgplayer-playbackrate .name {
|
||||
top: 10px !important;
|
||||
top: 10px !important;
|
||||
}
|
||||
.xgplayer-skin-default .xgplayer-playbackrate ul {
|
||||
bottom: 25px;
|
||||
}
|
||||
.xgplayer-skin-default .xgplayer-playbackrate ul li {
|
||||
font-size: 13px !important;
|
||||
font-size: 13px !important;
|
||||
}
|
||||
.xgplayer-skin-default .xgplayer-screenshot .name span {
|
||||
width: 40px !important;
|
||||
width: 40px !important;
|
||||
}
|
||||
.xgplayer-skin-default .xg-view-videoTitle {
|
||||
display: none;
|
||||
@@ -1071,7 +1443,13 @@ export default {
|
||||
right: 0;
|
||||
height: 40px;
|
||||
padding-left: 10px;
|
||||
background-image: linear-gradient(180deg,rgba(0,0,0,.75),rgba(0,0,0,.75),rgba(0,0,0,.37),transparent);
|
||||
background-image: linear-gradient(
|
||||
180deg,
|
||||
rgba(0, 0, 0, 0.75),
|
||||
rgba(0, 0, 0, 0.75),
|
||||
rgba(0, 0, 0, 0.37),
|
||||
transparent
|
||||
);
|
||||
z-index: 10;
|
||||
}
|
||||
.xgplayer-skin-default .xg-view-videoTitle span {
|
||||
@@ -1081,7 +1459,7 @@ export default {
|
||||
}
|
||||
</style>
|
||||
<style lang="scss" scoped>
|
||||
.play{
|
||||
.play {
|
||||
position: relative;
|
||||
height: calc(100% - 40px);
|
||||
width: 100%;
|
||||
@@ -1089,7 +1467,7 @@ export default {
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 5px;
|
||||
.box{
|
||||
.box {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
@@ -1097,7 +1475,7 @@ export default {
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
flex-direction: column;
|
||||
.title{
|
||||
.title {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
line-height: 40px;
|
||||
@@ -1110,13 +1488,13 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
.player{
|
||||
.player {
|
||||
width: 100%;
|
||||
flex: 1;
|
||||
padding: 0 10px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.more{
|
||||
.more {
|
||||
width: 100%;
|
||||
height: 50px;
|
||||
min-height: 50px;
|
||||
@@ -1124,14 +1502,14 @@ export default {
|
||||
justify-content: flex-start;
|
||||
align-items: center;
|
||||
padding: 0 10px;
|
||||
span{
|
||||
span {
|
||||
display: flex;
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
.list{
|
||||
.list {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
@@ -1142,27 +1520,27 @@ export default {
|
||||
padding: 6px;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
.list-top{
|
||||
.list-top {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
height: 30px;
|
||||
.list-top-title{
|
||||
.list-top-title {
|
||||
font-size: 16px;
|
||||
}
|
||||
.list-top-close{
|
||||
.list-top-close {
|
||||
display: inline-block;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.list-body{
|
||||
.list-body {
|
||||
flex: 1;
|
||||
overflow-y: auto;
|
||||
ul{
|
||||
ul {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
list-style: none;
|
||||
li{
|
||||
li {
|
||||
position: relative;
|
||||
height: 28px;
|
||||
width: 100%;
|
||||
@@ -1170,14 +1548,14 @@ export default {
|
||||
padding-left: 10px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
.title{
|
||||
.title {
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
width: 231px;
|
||||
}
|
||||
.detail-delete{
|
||||
.detail-delete {
|
||||
display: none;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
@@ -1189,10 +1567,12 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
.slideX-enter-active, .slideX-leave-active{
|
||||
transition: all .5s ease-in-out;
|
||||
.slideX-enter-active,
|
||||
.slideX-leave-active {
|
||||
transition: all 0.5s ease-in-out;
|
||||
}
|
||||
.slideX-enter, .slideX-leave-to{
|
||||
.slideX-enter,
|
||||
.slideX-leave-to {
|
||||
transform: translateX(100%);
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
@@ -1,21 +1,44 @@
|
||||
<template>
|
||||
<div class="setting">
|
||||
<div class="setting-box zy-scroll">
|
||||
<div class="logo"><img src="@/assets/image/logo.png" alt=""></div>
|
||||
<div class="logo"><img
|
||||
src="@/assets/image/logo.png"
|
||||
alt=""
|
||||
></div>
|
||||
<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="linkOpen('https://github.com/Hunlongyu/ZY-Player/releases/tag/v' + latestVersion)"
|
||||
v-show="latestVersion !== pkg.version"
|
||||
>最新版本v{{latestVersion}}</a>
|
||||
</div>
|
||||
<div class="view">
|
||||
<div class="title">视图</div>
|
||||
<div class="view-box">
|
||||
<div class="zy-select" @mouseleave="show.view = false">
|
||||
<div class="vs-placeholder" @click="show.view = true">默认视图</div>
|
||||
<div class="vs-options" v-show="show.view">
|
||||
<div
|
||||
class="zy-select"
|
||||
@mouseleave="show.view = false"
|
||||
>
|
||||
<div
|
||||
class="vs-placeholder"
|
||||
@click="show.view = true"
|
||||
>默认视图</div>
|
||||
<div
|
||||
class="vs-options"
|
||||
v-show="show.view"
|
||||
>
|
||||
<ul class="zy-scroll">
|
||||
<li :class="d.view === 'picture' ? 'active' : ''" @click="changeView('picture')">海报</li>
|
||||
<li :class="d.view === 'table' ? 'active' : ''" @click="changeView('table')">列表</li>
|
||||
<li
|
||||
:class="d.view === 'picture' ? 'active' : ''"
|
||||
@click="changeView('picture')"
|
||||
>海报</li>
|
||||
<li
|
||||
:class="d.view === 'table' ? 'active' : ''"
|
||||
@click="changeView('table')"
|
||||
>列表</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
@@ -24,72 +47,176 @@
|
||||
<div class="shortcut">
|
||||
<div class="title">快捷键</div>
|
||||
<div class="shortcut-box">
|
||||
<div class="zy-select" @mouseleave="show.shortcut = false">
|
||||
<div class="vs-placeholder" @click="show.shortcut = true">快捷键</div>
|
||||
<div class="vs-options" v-show="show.shortcut">
|
||||
<div
|
||||
class="zy-select"
|
||||
@mouseleave="show.shortcut = false"
|
||||
>
|
||||
<div
|
||||
class="vs-placeholder"
|
||||
@click="show.shortcut = true"
|
||||
>快捷键</div>
|
||||
<div
|
||||
class="vs-options"
|
||||
v-show="show.shortcut"
|
||||
>
|
||||
<ul class="zy-scroll">
|
||||
<li :class="d.shortcut === true ? 'active' : ''" @click="changeShortcut(true)">开启</li>
|
||||
<li :class="d.shortcut === false ? 'active' : ''" @click="changeShortcut(false)">关闭</li>
|
||||
<li
|
||||
:class="d.shortcut === true ? 'active' : ''"
|
||||
@click="changeShortcut(true)"
|
||||
>开启</li>
|
||||
<li
|
||||
:class="d.shortcut === false ? 'active' : ''"
|
||||
@click="changeShortcut(false)"
|
||||
>关闭</li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div class="vs-placeholder vs-noAfter" @click="expShortcut">导出</div>
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="expShortcut"
|
||||
>导出</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div class="vs-placeholder vs-noAfter" @click="impShortcut">导入</div>
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="impShortcut"
|
||||
>导入</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="site">
|
||||
<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="openDoc('shortcut')">说明文档</div>
|
||||
<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" @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>
|
||||
</div>
|
||||
<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
|
||||
class="zy-input"
|
||||
@click="toggleExcludeRootClasses"
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
v-model="d.excludeRootClasses"
|
||||
@change="updateSettingEvent"
|
||||
> 屏蔽主分类
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div class="vs-placeholder vs-noAfter" @click="openDoc('sites')">说明文档</div>
|
||||
<div
|
||||
class="zy-input"
|
||||
@click="toggleExcludeR18Films"
|
||||
>
|
||||
<input
|
||||
type="checkbox"
|
||||
v-model="d.excludeR18Films"
|
||||
@change="updateSettingEvent"
|
||||
> 屏蔽福利片
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="theme">
|
||||
<div class="title">主题</div>
|
||||
<div class="theme-box">
|
||||
<div @click="changeTheme('light')" class="theme-item light">
|
||||
<div
|
||||
@click="changeTheme('light')"
|
||||
class="theme-item light"
|
||||
>
|
||||
<div class="theme-image">
|
||||
<img src="../assets/image/light.png" alt="">
|
||||
<img
|
||||
src="../assets/image/light.png"
|
||||
alt=""
|
||||
>
|
||||
</div>
|
||||
<div class="theme-name">Light</div>
|
||||
</div>
|
||||
<div @click="changeTheme('dark')" class="theme-item dark">
|
||||
<div
|
||||
@click="changeTheme('dark')"
|
||||
class="theme-item dark"
|
||||
>
|
||||
<div class="theme-image">
|
||||
<img src="../assets/image/dark.png" alt="">
|
||||
<img
|
||||
src="../assets/image/dark.png"
|
||||
alt=""
|
||||
>
|
||||
</div>
|
||||
<div class="theme-name">Dark</div>
|
||||
</div>
|
||||
<div @click="changeTheme('green')" class="theme-item green">
|
||||
<div
|
||||
@click="changeTheme('green')"
|
||||
class="theme-item green"
|
||||
>
|
||||
<div class="theme-image">
|
||||
<img src="../assets/image/green.png" alt="">
|
||||
<img
|
||||
src="../assets/image/green.png"
|
||||
alt=""
|
||||
>
|
||||
</div>
|
||||
<div class="theme-name">Green</div>
|
||||
</div>
|
||||
<div @click="changeTheme('pink')" class="theme-item pink">
|
||||
<div
|
||||
@click="changeTheme('pink')"
|
||||
class="theme-item pink"
|
||||
>
|
||||
<div class="theme-image">
|
||||
<img src="../assets/image/pink.png" alt="">
|
||||
<img
|
||||
src="../assets/image/pink.png"
|
||||
alt=""
|
||||
>
|
||||
</div>
|
||||
<div class="theme-name">Pink</div>
|
||||
</div>
|
||||
@@ -98,12 +225,25 @@
|
||||
<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/alipay.png"
|
||||
>
|
||||
<img
|
||||
class="qrcode-item"
|
||||
src="../assets/image/wepay.jpg"
|
||||
>
|
||||
<img
|
||||
class="qrcode-item"
|
||||
src="../assets/image/wepay_cuiocean.jpg"
|
||||
>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearDB">
|
||||
<span @click="clearDBEvent" class="clearBtn">软件重置</span>
|
||||
<span
|
||||
@click="clearDBEvent"
|
||||
class="clearBtn"
|
||||
>软件重置</span>
|
||||
<span class="clearTips">如果新安装用户, 无法显示资源, 请点击软件重置. 如非必要, 切勿点击. 会清空用户数据, 恢复默认设置. 点击即软件重置, 并关闭软件.</span>
|
||||
</div>
|
||||
<div class="Tips">
|
||||
@@ -115,7 +255,7 @@
|
||||
<script>
|
||||
import { mapMutations } from 'vuex'
|
||||
import pkg from '../../package.json'
|
||||
import { setting, sites, shortcut } from '../lib/dexie'
|
||||
import { setting, sites, shortcut, star } from '../lib/dexie'
|
||||
import { shell, clipboard, remote } from 'electron'
|
||||
import db from '../lib/dexie/dexie'
|
||||
export default {
|
||||
@@ -125,17 +265,29 @@ export default {
|
||||
pkg: pkg,
|
||||
sitesList: [],
|
||||
shortcutList: [],
|
||||
favoritesList: [],
|
||||
show: {
|
||||
site: false,
|
||||
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
|
||||
}
|
||||
}
|
||||
},
|
||||
@@ -147,10 +299,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_EDITSITES']),
|
||||
linkOpen (e) {
|
||||
shell.openExternal(e)
|
||||
},
|
||||
@@ -158,12 +318,15 @@ 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 () {
|
||||
@@ -176,60 +339,84 @@ export default {
|
||||
this.shortcutList = res
|
||||
})
|
||||
},
|
||||
getFavorites () {
|
||||
star.all().then(res => {
|
||||
this.favoritesList = res
|
||||
})
|
||||
},
|
||||
changeView (e) {
|
||||
this.d.view = e
|
||||
setting.update(this.d).then(res => {
|
||||
this.$message.success('修改成功')
|
||||
this.show.view = false
|
||||
this.setting = this.d
|
||||
})
|
||||
},
|
||||
siteClick (e) {
|
||||
this.d.site = e
|
||||
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.setting = this.d
|
||||
this.show.site = false
|
||||
this.updateSettingEvent()
|
||||
this.$message.success('重置第三方播放器成功')
|
||||
})
|
||||
},
|
||||
expSites () {
|
||||
const arr = [...this.sitesList]
|
||||
const str = JSON.stringify(arr)
|
||||
clipboard.writeText(str)
|
||||
this.$message.success('已复制到剪贴板')
|
||||
updatePlayerPath () {
|
||||
this.$message.success('设定第三方播放器路径为:' + this.d.externalPlayer)
|
||||
this.editPlayerPath = false
|
||||
this.updateSettingEvent()
|
||||
},
|
||||
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
|
||||
setting.update(this.d).then(res => {
|
||||
this.setting = this.d
|
||||
})
|
||||
})
|
||||
})
|
||||
editSitesEvent () {
|
||||
this.editSites = {
|
||||
show: true,
|
||||
sites: this.sitesList
|
||||
}
|
||||
},
|
||||
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, 4)
|
||||
clipboard.writeText(str)
|
||||
this.$message.success('已复制到剪贴板')
|
||||
},
|
||||
@@ -260,119 +447,138 @@ export default {
|
||||
this.linkOpen('http://zyplayer.fun/doc/shortcut/')
|
||||
return false
|
||||
}
|
||||
},
|
||||
getLatestVersion () {
|
||||
const cheerio = require('cheerio')
|
||||
const axios = require('axios')
|
||||
var url = 'https://github.com/Hunlongyu/ZY-Player/releases'
|
||||
axios.get(url).then(res => {
|
||||
const $ = cheerio.load(res.data)
|
||||
var e = $('div.release-header')[0]
|
||||
var firstResult = $(e).find('div>div>a')
|
||||
this.latestVersion = firstResult.text()
|
||||
})
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.getSetting()
|
||||
this.getSites()
|
||||
this.getSetting()
|
||||
this.getShortcut()
|
||||
this.getFavorites()
|
||||
this.getLatestVersion()
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.setting{
|
||||
.setting {
|
||||
height: calc(100% - 40px);
|
||||
width: 100%;
|
||||
border-radius: 5px;
|
||||
padding: 20px 0;
|
||||
.setting-box{
|
||||
.setting-box {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
overflow-y: auto;
|
||||
}
|
||||
.logo{
|
||||
.logo {
|
||||
margin-top: 10px;
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
img{
|
||||
img {
|
||||
width: 120px;
|
||||
height: auto;
|
||||
}
|
||||
}
|
||||
.info{
|
||||
.info {
|
||||
width: 100%;
|
||||
margin-top: 20px;
|
||||
text-align: center;
|
||||
a{
|
||||
a {
|
||||
text-decoration: none;
|
||||
margin: 0 10px;
|
||||
font-size: 14px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.view{
|
||||
.view {
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
.view-box{
|
||||
.view-box {
|
||||
margin-top: 10px;
|
||||
.zy-select{
|
||||
.zy-select {
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.site{
|
||||
.search {
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
.site-box{
|
||||
}
|
||||
.site {
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
.site-box {
|
||||
margin-top: 10px;
|
||||
.zy-select{
|
||||
.zy-select {
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.shortcut{
|
||||
.shortcut {
|
||||
width: 100%;
|
||||
padding: 20px;
|
||||
margin-top: 20px;
|
||||
.shortcut-box{
|
||||
.shortcut-box {
|
||||
margin-top: 10px;
|
||||
.zy-select{
|
||||
.zy-select {
|
||||
margin-right: 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.theme{
|
||||
.theme {
|
||||
width: 100%;
|
||||
padding-left: 20px;
|
||||
margin-top: 20px;
|
||||
.theme-box{
|
||||
.theme-box {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-start;
|
||||
margin-top: 10px;
|
||||
.theme-item{
|
||||
.theme-item {
|
||||
width: 200px;
|
||||
height: 180px;
|
||||
margin-right: 20px;
|
||||
cursor: pointer;
|
||||
border-radius: 2px;
|
||||
.theme-image{
|
||||
.theme-image {
|
||||
width: 180px;
|
||||
margin: 10px auto;
|
||||
img{
|
||||
img {
|
||||
width: 100%;
|
||||
}
|
||||
}
|
||||
.theme-name{
|
||||
.theme-name {
|
||||
width: 100%;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.qrcode{
|
||||
.qrcode {
|
||||
width: 100%;
|
||||
padding-left: 20px;
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
.qrcode-box{
|
||||
.qrcode-box {
|
||||
display: flex;
|
||||
justify-content: flex-start;
|
||||
margin-top: 10px;
|
||||
.qrcode-item{
|
||||
.qrcode-item {
|
||||
width: auto;
|
||||
height: 300px;
|
||||
margin-right: 20px;
|
||||
@@ -380,10 +586,10 @@ export default {
|
||||
}
|
||||
}
|
||||
}
|
||||
.clearDB{
|
||||
.clearDB {
|
||||
margin-top: 20px;
|
||||
margin-bottom: 20px;
|
||||
.clearBtn{
|
||||
.clearBtn {
|
||||
margin-left: 20px;
|
||||
color: red;
|
||||
cursor: pointer;
|
||||
@@ -395,13 +601,13 @@ export default {
|
||||
text-align: center;
|
||||
line-height: 32px;
|
||||
}
|
||||
.clearTips{
|
||||
.clearTips {
|
||||
font-size: 12px;
|
||||
color: #ff000088;
|
||||
margin-left: 10px;
|
||||
}
|
||||
}
|
||||
.Tips{
|
||||
.Tips {
|
||||
margin: 20px;
|
||||
font-size: 12px;
|
||||
color: #ff000066;
|
||||
|
||||
@@ -1,18 +1,37 @@
|
||||
<template>
|
||||
<div class="share" id="share" @click="shareClickEvent">
|
||||
<div
|
||||
class="share"
|
||||
id="share"
|
||||
@click="shareClickEvent"
|
||||
>
|
||||
<div class="left">
|
||||
<img :src="pic" alt="" @load="picLoadEvent">
|
||||
<img
|
||||
:src="pic"
|
||||
alt=""
|
||||
@load="picLoadEvent"
|
||||
>
|
||||
</div>
|
||||
<div class="right" id="right">
|
||||
<div
|
||||
class="right"
|
||||
id="right"
|
||||
>
|
||||
<div class="title">{{ share.info.name }}</div>
|
||||
<qrcode-vue id="qr" :value="link" :size="160" level="L" />
|
||||
<qrcode-vue
|
||||
id="qr"
|
||||
:value="link"
|
||||
:size="160"
|
||||
level="L"
|
||||
/>
|
||||
<div class="tips">
|
||||
<p>长按二维码,识别播放。</p>
|
||||
<p><img src="@/assets/image/logo.png"></p>
|
||||
<p class="zy">『ZY Player』技术支持,严禁传播违法资源。</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="share-mask" v-show="loading">
|
||||
<div
|
||||
class="share-mask"
|
||||
v-show="loading"
|
||||
>
|
||||
<div class="loader"></div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -70,16 +89,22 @@ 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
|
||||
const url = m3u8List[1]
|
||||
this.link = 'http://zyplayer.fun/player/player.html?url=' + url + '&title=' + this.share.info.name
|
||||
}
|
||||
this.loading = false
|
||||
})
|
||||
},
|
||||
picLoadEvent () {
|
||||
@@ -98,7 +123,7 @@ export default {
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.share{
|
||||
.share {
|
||||
position: absolute;
|
||||
bottom: 20px;
|
||||
right: 20px;
|
||||
@@ -110,44 +135,45 @@ export default {
|
||||
align-items: center;
|
||||
padding: 0px;
|
||||
z-index: 999;
|
||||
.left, .right{
|
||||
.left,
|
||||
.right {
|
||||
width: 50%;
|
||||
height: 100%;
|
||||
}
|
||||
.left{
|
||||
.left {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
img{
|
||||
img {
|
||||
height: 320px;
|
||||
width: auto;
|
||||
max-width: 240px;
|
||||
}
|
||||
}
|
||||
.right{
|
||||
.right {
|
||||
padding: 10px;
|
||||
.title{
|
||||
.title {
|
||||
font-size: 18px;
|
||||
margin-bottom: 10px;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
#qr{
|
||||
#qr {
|
||||
text-align: center;
|
||||
}
|
||||
.tips{
|
||||
.tips {
|
||||
font-size: 14px;
|
||||
text-align: center;
|
||||
img{
|
||||
img {
|
||||
width: 50px;
|
||||
}
|
||||
.zy{
|
||||
.zy {
|
||||
font-size: 12px;
|
||||
}
|
||||
}
|
||||
}
|
||||
.share-mask{
|
||||
.share-mask {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
@@ -170,28 +196,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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,27 +1,103 @@
|
||||
<template>
|
||||
<div class="star">
|
||||
<div class="body">
|
||||
<div class="zy-table">
|
||||
<div class="tHeader">
|
||||
<span class="btn" @click="updateAllEvent(list)">同步所有收藏</span>
|
||||
<div class="detail">
|
||||
<div class="detail-content">
|
||||
<div class="detail-header">
|
||||
<div class="zy-select">
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="exportFavoritesEvent"
|
||||
>
|
||||
导出
|
||||
</div>
|
||||
</div>
|
||||
<div class="tBody zy-scroll">
|
||||
<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="note">{{i.note}}</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 class="zy-select">
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="importFavoritesEvent"
|
||||
>
|
||||
导入
|
||||
</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="clearFavoritesEvent"
|
||||
>
|
||||
清空
|
||||
</div>
|
||||
</div>
|
||||
<div class="zy-select">
|
||||
<div
|
||||
class="vs-placeholder vs-noAfter"
|
||||
@click="updateAllEvent"
|
||||
>
|
||||
同步所有收藏
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="detail-body zy-scroll">
|
||||
<div class="zy-table">
|
||||
<div class="tBody zy-scroll">
|
||||
<ul>
|
||||
<li v-show="this.list.length > 0">
|
||||
<span class="name">名字</span>
|
||||
<span class="type">类型</span>
|
||||
<span class="time">上映</span>
|
||||
<span class="site">片源</span>
|
||||
<span class="note">备注</span>
|
||||
<span class="note">观看至</span>
|
||||
<span class="operate">
|
||||
<span class="btn"></span>
|
||||
<span class="btn"></span>
|
||||
<span class="btn"></span>
|
||||
<span class="btn"></span>
|
||||
<span class="btn"></span>
|
||||
</span>
|
||||
</li>
|
||||
<draggable
|
||||
v-model="list"
|
||||
@change="listUpdatedEvent"
|
||||
>
|
||||
<transition-group>
|
||||
<li
|
||||
v-for="(i, j) in list"
|
||||
:key="j"
|
||||
@click="detailEvent(i)"
|
||||
:class="[i.hasUpdate ? 'zy-highlighted' : '']"
|
||||
>
|
||||
<span class="name">{{ i.name }}</span>
|
||||
<span class="type">{{ i.type }}</span>
|
||||
<span class="time">{{ i.year }}</span>
|
||||
<span class="site">{{ getSiteName(i.key) }}</span>
|
||||
<span class="note">{{ i.note }}</span>
|
||||
<span class="note">{{ getHistoryNote(i.index) }}</span>
|
||||
<span class="operate">
|
||||
<span
|
||||
class="btn"
|
||||
@click.stop="playEvent(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
|
||||
class="btn"
|
||||
@click.stop="deleteEvent(i)"
|
||||
>删除</span>
|
||||
</span>
|
||||
</li>
|
||||
</transition-group>
|
||||
</draggable>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -29,16 +105,24 @@
|
||||
</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 draggable from 'vuedraggable'
|
||||
import { remote } from 'electron'
|
||||
import fs from 'fs'
|
||||
|
||||
const { clipboard } = require('electron')
|
||||
export default {
|
||||
name: 'star',
|
||||
data () {
|
||||
return {
|
||||
list: []
|
||||
list: [],
|
||||
sites: []
|
||||
}
|
||||
},
|
||||
components: {
|
||||
draggable
|
||||
},
|
||||
computed: {
|
||||
view: {
|
||||
get () {
|
||||
@@ -75,7 +159,8 @@ export default {
|
||||
},
|
||||
watch: {
|
||||
view () {
|
||||
this.getStarList()
|
||||
this.getFavorites()
|
||||
this.getAllsites()
|
||||
}
|
||||
},
|
||||
methods: {
|
||||
@@ -83,21 +168,27 @@ export default {
|
||||
detailEvent (e) {
|
||||
this.detail = {
|
||||
show: true,
|
||||
key: e.site,
|
||||
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 => {
|
||||
history.find({ site: e.key, ids: e.ids }).then(res => {
|
||||
if (res) {
|
||||
this.video = { key: res.site, info: { id: res.ids, name: res.name, index: res.index } }
|
||||
this.video = { key: e.key, 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 } }
|
||||
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) {
|
||||
@@ -107,51 +198,73 @@ export default {
|
||||
} else {
|
||||
this.$message.success('删除成功')
|
||||
}
|
||||
this.getStarList()
|
||||
this.getFavorites()
|
||||
})
|
||||
},
|
||||
shareEvent (e) {
|
||||
this.share = {
|
||||
show: true,
|
||||
key: e.site,
|
||||
key: e.key,
|
||||
info: e
|
||||
}
|
||||
},
|
||||
clearHasUpdateFlag (e) {
|
||||
star.find({ id: e.id }).then(res => {
|
||||
res.hasUpdate = false
|
||||
star.update(e.id, res)
|
||||
this.getFavorites()
|
||||
})
|
||||
},
|
||||
listUpdatedEvent () {
|
||||
star.clear().then(res1 => {
|
||||
// 重新排序
|
||||
var id = this.list.length
|
||||
this.list.forEach(element => {
|
||||
element.id = id
|
||||
star.add(element)
|
||||
id -= 1
|
||||
})
|
||||
})
|
||||
},
|
||||
updateEvent (e) {
|
||||
zy.detail(e.site, e.ids).then(res => {
|
||||
if (e.last === res.last) {
|
||||
var msg = `同步"${e.name}"成功, 未查询到更新。`
|
||||
this.$message.info(msg)
|
||||
} else {
|
||||
const doc = {
|
||||
id: e.id,
|
||||
ids: res.id,
|
||||
last: res.last,
|
||||
name: res.name,
|
||||
site: e.site,
|
||||
type: res.type,
|
||||
year: res.year,
|
||||
note: res.note
|
||||
}
|
||||
star.update(e.id, doc).then(res => {
|
||||
var msg = `同步"${e.name}"成功, 检查到更新。`
|
||||
this.$message.success(msg)
|
||||
})
|
||||
this.getStarList()
|
||||
zy.detail(e.key, e.ids).then(res => {
|
||||
var doc = {
|
||||
key: e.key,
|
||||
id: e.id,
|
||||
ids: res.id,
|
||||
last: res.last,
|
||||
name: res.name,
|
||||
type: res.type,
|
||||
year: res.year,
|
||||
note: res.note
|
||||
}
|
||||
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 => {
|
||||
var msg = `同步"${e.name}"失败, 请重试。`
|
||||
this.$message.warning(msg, err)
|
||||
})
|
||||
},
|
||||
updateAllEvent (list) {
|
||||
list.forEach(e => {
|
||||
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('#')
|
||||
@@ -166,40 +279,162 @@ 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, 4)
|
||||
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) {
|
||||
result.filePaths.forEach(file => {
|
||||
var str = fs.readFileSync(file)
|
||||
const json = JSON.parse(str)
|
||||
star.bulkAdd(json).then(e => {
|
||||
this.getFavorites()
|
||||
})
|
||||
this.upgradeFavorites()
|
||||
})
|
||||
this.$message.success('导入收藏成功')
|
||||
}
|
||||
}).catch(err => {
|
||||
this.$message.error(err)
|
||||
})
|
||||
},
|
||||
upgradeFavorites () {
|
||||
star.all().then(res => {
|
||||
res.forEach(element => {
|
||||
const docs = {
|
||||
key: element.key,
|
||||
ids: element.ids,
|
||||
name: element.name,
|
||||
type: element.type,
|
||||
year: element.year,
|
||||
last: element.last,
|
||||
note: element.note
|
||||
}
|
||||
star.find({ key: element.key, ids: element.ids }).then(res => {
|
||||
if (!res) {
|
||||
star.add(docs)
|
||||
}
|
||||
})
|
||||
})
|
||||
this.getFavorites()
|
||||
})
|
||||
},
|
||||
clearFavoritesEvent () {
|
||||
star.clear().then(e => {
|
||||
this.getFavorites()
|
||||
this.$message.success('清空所有收藏成功')
|
||||
})
|
||||
}
|
||||
},
|
||||
created () {
|
||||
this.getStarList()
|
||||
this.getFavorites()
|
||||
window.Sortable = require('sortablejs').Sortable
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<style lang="scss" scoped>
|
||||
.star{
|
||||
position: relative;
|
||||
.detail {
|
||||
position: absolute;
|
||||
left: 80px;
|
||||
right: 20px;
|
||||
bottom: 0;
|
||||
width: calc(100% - 100px);
|
||||
height: calc(100% - 40px);
|
||||
width: 100%;
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
border-radius: 5px;
|
||||
.body{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
z-index: 888;
|
||||
.detail-content {
|
||||
height: calc(100% - 10px);
|
||||
padding: 0 60px;
|
||||
position: relative;
|
||||
.detail-header {
|
||||
width: 100%;
|
||||
height: 40px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
.detail-title {
|
||||
font-size: 16px;
|
||||
}
|
||||
.detail-close {
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
.detail-body {
|
||||
height: calc(100% - 50px);
|
||||
overflow-y: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
@@ -8,6 +8,8 @@ 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 () {
|
||||
@@ -20,5 +22,7 @@ export default {
|
||||
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({
|
||||
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'
|
||||
mini: 'id, site, ids, name, index, time',
|
||||
iptv: '++id, name, url'
|
||||
})
|
||||
|
||||
db.on('populate', () => {
|
||||
db.setting.bulkAdd(setting)
|
||||
db.sites.bulkAdd(sites)
|
||||
db.shortcut.bulkAdd(localKey)
|
||||
db.iptv.bulkAdd(iptv)
|
||||
})
|
||||
|
||||
db.open()
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
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,6 +4,9 @@ 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)
|
||||
},
|
||||
@@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
219
src/lib/site/onlineVideo.js
Normal file
219
src/lib/site/onlineVideo.js
Normal file
@@ -0,0 +1,219 @@
|
||||
import open from 'open'
|
||||
import axios from 'axios'
|
||||
import cheerio from 'cheerio'
|
||||
|
||||
const onlineVideo = {
|
||||
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)
|
||||
})
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
export default onlineVideo
|
||||
@@ -2,7 +2,6 @@ import { sites } from '../dexie'
|
||||
import axios from 'axios'
|
||||
import parser from 'fast-xml-parser'
|
||||
const zy = {
|
||||
ports: 44444, // 端口号
|
||||
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)
|
||||
|
||||
@@ -23,13 +23,16 @@
|
||||
</div>
|
||||
<div class="right">
|
||||
<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:12px;height:16px"><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>
|
||||
<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:10px;height:16px"><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>
|
||||
<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:10px;height:16px"><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>
|
||||
<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>
|
||||
@@ -80,10 +83,12 @@ export default {
|
||||
},
|
||||
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')
|
||||
@@ -91,7 +96,6 @@ export default {
|
||||
}
|
||||
if (e === 'top') {
|
||||
this.isAlwaysOnTop = !this.isAlwaysOnTop
|
||||
const win = remote.getCurrentWindow()
|
||||
win.setAlwaysOnTop(this.isAlwaysOnTop)
|
||||
}
|
||||
},
|
||||
@@ -125,54 +129,6 @@ export default {
|
||||
}
|
||||
})
|
||||
})
|
||||
// zy.detail(res.site, res.ids).then(e => {
|
||||
// this.name = e.name
|
||||
// this.detail = e
|
||||
// const dd = e.dl.dd
|
||||
// const type = Object.prototype.toString.call(dd)
|
||||
// let m3u8Txt = []
|
||||
// if (type === '[object Array]') {
|
||||
// for (const i of dd) {
|
||||
// if (i._t.indexOf('m3u8') >= 0) {
|
||||
// m3u8Txt = i._t.split('#')
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// m3u8Txt = dd._t.split('#')
|
||||
// }
|
||||
// const m3u8Arr = []
|
||||
// for (const i of m3u8Txt) {
|
||||
// const j = i.split('$')
|
||||
// if (j.length > 1) {
|
||||
// for (let m = 0; m < j.length; m++) {
|
||||
// if (j[m].indexOf('m3u8') >= 0) {
|
||||
// m3u8Arr.push(j[m])
|
||||
// }
|
||||
// }
|
||||
// } else {
|
||||
// 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()
|
||||
// }
|
||||
// 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) {
|
||||
@@ -507,15 +463,18 @@ html,body{
|
||||
span{
|
||||
-webkit-app-region: no-drag;
|
||||
display: inline-block;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
text-align: center;
|
||||
line-height: 16px;
|
||||
line-height: 14px;
|
||||
border-radius: 50%;
|
||||
margin-right: 10px;
|
||||
cursor: pointer;
|
||||
opacity: 0.4;
|
||||
&.min{
|
||||
background-color: #32dc36;
|
||||
}
|
||||
&.max{
|
||||
background-color: #ffbe2a;
|
||||
}
|
||||
&.close{
|
||||
|
||||
@@ -25,6 +25,10 @@ export default new Vuex.Store({
|
||||
video: {
|
||||
key: '',
|
||||
info: {}
|
||||
},
|
||||
editSites: {
|
||||
show: false,
|
||||
sites: []
|
||||
}
|
||||
},
|
||||
getters: {
|
||||
@@ -42,6 +46,9 @@ export default new Vuex.Store({
|
||||
},
|
||||
getVideo: state => {
|
||||
return state.video
|
||||
},
|
||||
getEditSites: state => {
|
||||
return state.editSites
|
||||
}
|
||||
},
|
||||
mutations: {
|
||||
@@ -59,6 +66,9 @@ export default new Vuex.Store({
|
||||
},
|
||||
SET_VIDEO: (state, payload) => {
|
||||
state.video = payload
|
||||
},
|
||||
SET_EDITSITES: (state, payload) => {
|
||||
state.editSites = payload
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
88
yarn.lock
88
yarn.lock
@@ -1675,6 +1675,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"
|
||||
@@ -2417,6 +2422,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 +3036,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"
|
||||
@@ -3443,12 +3465,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 +3664,10 @@ 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@^9.3.1:
|
||||
version "9.3.1"
|
||||
resolved "https://registry.yarnpkg.com/electron/-/electron-9.3.1.tgz#e301932c5c0537d8c9a8850d216d3ba454dbf55c"
|
||||
integrity sha512-DScrhqBT4a54KfdF0EoipALpHmdQTn3m7SSCtbpTcEcG+UDUiXad2cOfW6DHeVH7N+CVDKDG12q2PhVJjXkFAA==
|
||||
dependencies:
|
||||
"@electron/get" "^1.0.1"
|
||||
"@types/node" "^12.0.12"
|
||||
@@ -3718,9 +3748,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:
|
||||
@@ -5058,9 +5088,9 @@ html2canvas@^1.0.0-rc.5:
|
||||
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 +5386,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"
|
||||
@@ -6065,6 +6100,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"
|
||||
@@ -7007,6 +7047,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 +7784,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 +8554,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"
|
||||
@@ -9639,6 +9698,13 @@ vue@^2.6.11:
|
||||
resolved "https://registry.npmjs.org/vue/-/vue-2.6.11.tgz#76594d877d4b12234406e84e35275c6d514125c5"
|
||||
integrity sha512-VfPwgcGABbGAue9+sfrD4PuwFar7gPb1yl1UK1MwXoQPAw0BKSqWfoYCT/ThFrdEVWoI51dBuyCoiNU9bZDZxQ==
|
||||
|
||||
vuedraggable@^2.24.1:
|
||||
version "2.24.1"
|
||||
resolved "https://registry.yarnpkg.com/vuedraggable/-/vuedraggable-2.24.1.tgz#304abd7644dde05c1f199a227bf9e9107f56197a"
|
||||
integrity sha512-G1fxO1oshx+WLdieSGl6jSJdlHOQFga1FpjuUpgXldbpKNzxpjsGn4xYNnRHVrOAqm8aG5FfpdQlh5LHesxCeA==
|
||||
dependencies:
|
||||
sortablejs "^1.10.1"
|
||||
|
||||
vuex@^3.4.0:
|
||||
version "3.5.1"
|
||||
resolved "https://registry.npmjs.org/vuex/-/vuex-3.5.1.tgz#f1b8dcea649bc25254cf4f4358081dbf5da18b3d"
|
||||
|
||||
Reference in New Issue
Block a user