-
Notifications
You must be signed in to change notification settings - Fork 286
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