-
Notifications
You must be signed in to change notification settings - Fork 285
develop guide
SeaHOH edited this page Feb 8, 2020
·
8 revisions
-
prepare:
解析单个视频的函数,必须重载,需要返回一个VideoInfo
的实例 -
prepare_list:
解析播放的函数,需要支持播放列表时重载,需要返回一个VideoInfo
实例的列表,列表中每一个元素是一个具体的视频信息。 或者用 yield 返回一个生成VideoInfo
的生成器。 -
list_only:
判断是否只解析播放列表而非单个视频的函数,需要时重载,返回一个boolean
值。
- 结构:
成员 | 含义 | 类型 |
---|---|---|
site | 网站名 | utf-8 String,汉字(字母)
|
title | 视频标题 | utf-8 String,直播视频建议加入作者信息 |
artist | 视频作者 | utf-8 String |
stream_types | 当前视频支持的清晰度列表 | list,最好是 TD, HD, SD 等组成的, 按清晰度排序 |
streams | 视频的具体信息 | dict,其中 key 来自 stream_types |
live | 是否为直播 | boolean |
extra | 附加参数,用于播放器 | dict,保存 HTTP 头字段等参数 |
- streams:
key | container | video_profile | src | size |
---|---|---|---|---|
来自 stream_types | 具体的视频后缀 flv/mp4/m3u8 | 便于理解的 key | 视频真实的链接,是一个列表 | 视频的大小,可以是 0,或float('inf') |
- extra:
key | ua | referer | header | proxy | rangefetch |
---|---|---|---|---|---|
--- | User-Agent | Referer | 其它头字段 | 代理地址,由 cykdl 自动设置 | 分段下载代理参数,用于加速限速视频 |
- rangefetch:
key | first_size | max_size | threads | video_rate | proxy | headers |
---|---|---|---|---|---|---|
--- | 第一分段大小 | 最大分段大小 | 初始下载线程,下载中会随情况自动增减 | 码率 dict,key 对应 streams | 代理地址,由 cykdl 自动设置 | 暂未使用 |
name | usage |
---|---|
compact | 兼容性,需要考虑兼容 OS 差异,python 版本差异 |
downloader | 内置下载器,支持多任务和断点续传 |
rangefetch_server | 内置分段多线程下载代理,仅用于播放器 |
html | urllib.request 的简单封装, 用于下载页面 |
jsengine | 对系统内置、python 绑定以及常见 Javascript 解释器的封装,用于执行 Javascript |
match | re 的简单封装, 用于获取匹配字符串,如 title, vid |
wrap | 外部工具的简单封装, player, ffmpeg |
m3u8_wrap | 外部 library m3u8 的简单封装, 用于解析 m3u8 |
cykdl/__main__.py | 主入口,一个例子,各种乱七八糟的东西 |
-
浏览器的 develop tool
-
SWF decompiler:
jpexs-decompiler (推荐)
- ykdl 是一个可以获取视频真实信息的 python lib.
- ykdl 有内置的视频下载方法
- cykdl 是一个使用 ykdl 的例子
- ykdl 支持的网站列表
作为一个 library,ykdl 被使用的方式只有一个
from ykdl.commom import url_to_module
site, new_url = url_to_module(url)
返回值:
site
: 解析url的模块
new_url
:和 url
相同,或者是 url
重定向之后的网址,或者是 get_extractor(url)
返回的结果
如果解析的是一个列表:
video_list = site.parser_list(new_url)
返回值:
video_list
: 一个 video_info
的列表或者是一个生成 video_info
的生成器
如果解析的是单个视频:
video = site.parser(new_url)
返回值:
video
: 是一个 video_info
类型的变量
根据返回值类型做相应的操作,可以调用内置下载器下载,或者外部下载器,或者是直接调用播放器播放。
https://github.com/zhangn1985/ykdl/blob/master/cykdl/__main__.py