此页面介绍了 youtube-dl 代码库中各种流媒体平台的提取器。流媒体平台是指主要通过流式传输而非直接下载来提供视频内容的网站。这些提取器可以处理来自 Twitch、VK 等平台的直播流和点播 (VOD) 内容。
有关传统视频平台(如 Vimeo、Dailymotion)的特定提取器,请参阅视频平台提取器。有关广播媒体提取器(BBC、NRK 等),请参阅广播媒体提取器。
youtube-dl 中的流媒体平台提取器遵循与其他提取器相同的通用模式,即继承自 InfoExtractor 基类。然而,它们通常涉及更复杂的身份验证、API 交互和格式提取逻辑,以处理流媒体内容的动态特性。
来源: youtube_dl/extractor/twitch.py35-989 youtube_dl/extractor/vk.py31-689 youtube_dl/extractor/pluralsight.py28-501 youtube_dl/extractor/yandexmusic.py18-482
流媒体平台提取器通常遵循以下模式
来源: youtube_dl/extractor/twitch.py57-126 youtube_dl/extractor/vk.py34-63 youtube_dl/extractor/pluralsight.py164-215 youtube_dl/extractor/udemy.py174-212
Twitch 是 youtube-dl 支持的最复杂的流媒体平台之一,对各种内容类型有不同的提取器。
| 提取器 | 目的 | 内容类型 |
|---|---|---|
| TwitchBaseIE | 具有通用功能的基类 | 不适用 |
| TwitchVodIE | 点播内容 | 已存档的流 |
| TwitchCollectionIE | 视频合集 | 分组 VOD |
| TwitchVideosIE | 频道视频列表 | 视频档案 |
| TwitchVideosClipsIE | 频道剪辑列表 | 短剪辑 |
| TwitchVideosCollectionsIE | 合集列表 | 合集项目 |
| TwitchStreamIE | 直播流 | 直播内容 |
| TwitchClipsIE | 单个剪辑 | 短剪辑 |
来源: youtube_dl/extractor/twitch.py35-989
来源: youtube_dl/extractor/twitch.py329-368 youtube_dl/extractor/twitch.py764-848 youtube_dl/extractor/twitch.py894-988
VK (VKontakte) 是一个俄罗斯社交媒体平台,也提供流媒体功能。
| 提取器 | 目的 | 内容类型 |
|---|---|---|
| VKBaseIE | 具有通用功能的基类 | 不适用 |
| VKIE | 主要的 VK 视频提取器 | 单个视频 |
| VKUserVideosIE | 用户视频列表 | 视频合集 |
| VKWallPostIE | 来自墙帖的视频 | 帖子嵌入式视频 |
来源: youtube_dl/extractor/vk.py31-689
其他几个流媒体平台也有专门的提取器
| 平台 | 主要提取器 | 描述 |
|---|---|---|
| Pluralsight | PluralsightIE | 教育视频平台 |
| Udemy | UdemyIE | 教育课程平台 |
| YandexMusic | YandexMusicTrackIE | 音乐流媒体服务 |
| AtresPlayer | AtresPlayerIE | 西班牙流媒体服务 |
| Xiami | XiamiBaseIE | 中国音乐流媒体服务 |
来源: youtube_dl/extractor/pluralsight.py28-437 youtube_dl/extractor/udemy.py28-419 youtube_dl/extractor/yandexmusic.py18-202 youtube_dl/extractor/atresplayer.py15-118 youtube_dl/extractor/xiami.py9-201
流媒体平台通常使用自适应流格式,如 HLS (HTTP Live Streaming) 或 DASH (Dynamic Adaptive Streaming over HTTP)。提取器需要解析清单文件以识别可用的格式选项。
来源: youtube_dl/extractor/twitch.py128-139 youtube_dl/extractor/twitch.py335-350 youtube_dl/extractor/twitch.py814-817
许多流媒体平台需要身份验证才能访问内容或获得更高质量的流。提取器需要处理登录流程、会话 cookie 和 API 令牌。
身份验证通常涉及
下面的示例显示了 Twitch 的身份验证方法
来源: youtube_dl/extractor/twitch.py60-126
现代流媒体平台通常使用 GraphQL API,这需要特定的查询结构和操作名称。例如,Twitch 广泛使用 GraphQL 作为其 API。
来源: youtube_dl/extractor/twitch.py141-162 youtube_dl/extractor/twitch.py164-184
Twitch 使用 REST 和 GraphQL API 的组合。关键实现细节包括:
_OPERATION_HASHES 中_prefer_source 方法确保选择最高质量来源: youtube_dl/extractor/twitch.py45-55 youtube_dl/extractor/twitch.py164-184
VK 使用更传统的 REST API 方法
来源: youtube_dl/extractor/vk.py65-75 youtube_dl/extractor/vk.py391-416 youtube_dl/extractor/vk.py448-472
许多流媒体平台都实施了地理限制。提取器会在响应中检测这些限制并引发相应的错误。
来源: youtube_dl/extractor/vk.py379-380 youtube_dl/extractor/xiami.py14-16
某些内容仅限已登录用户访问
来源: youtube_dl/extractor/twitch.py71-72
流媒体平台可能会实施 CAPTCHA 挑战以防止自动化访问
来源: youtube_dl/extractor/yandexmusic.py27-39 youtube_dl/extractor/udemy.py139-146
大多数流媒体平台提取器都包含针对不同内容类型的测试用例,有助于确保功能的持续性
来源: youtube_dl/extractor/twitch.py198-236
由于流媒体内容的动态性、身份验证要求以及不断变化的 API,流媒体平台提取器是 youtube-dl 中最复杂的组件之一。它们遵循通用模式,同时实现平台特定的逻辑来处理每个服务的独特方面。
模块化架构允许在平台更改其 API 或流媒体技术时轻松添加新的流媒体平台和更新现有提取器。