通用提取器是 youtube-dl 中一种备用机制,用于从没有专用平台提取器的网站提取媒体。当没有其他提取器匹配 URL 时,通用提取器会尝试各种技术来识别和提取页面中的视频内容。它特别适用于处理直接媒体链接、来自流行平台的嵌入式播放器以及标准的媒体交付格式。
有关通用提取器继承的 InfoExtractor 基类的信息,请参阅 InfoExtractor 基类。有关特定平台提取器信息,请参阅 特定平台提取器。
通用提取器在 youtube-dl 的提取器选择过程中充当一个“捕获所有”的解决方案。它拥有尽可能通用的 URL 模式(r'.*'),确保它仅在没有其他更具体的提取器匹配 URL 时运行。
来源: youtube_dl/extractor/generic.py137-143 youtube_dl/extractor/extractors.py449
通用提取器有一个非常简单的识别模式(r'.*'),但包含复杂的检测逻辑。它在继承自基本 InfoExtractor 类的 GenericIE 类中实现。
来源: youtube_dl/extractor/generic.py137-143 youtube_dl/extractor/common.py9
通用提取器采用多种技术来检测和提取媒体内容
通过检查以下内容来判断 URL 是否直接指向媒体文件:
对于直接媒体链接,提取器将:
来源: youtube_dl/extractor/generic.py286-427
通用提取器可以检测并提取各种嵌入式播放器,并在可能时委托给相应的提取器
| 嵌入式平台 | 检测方法 |
|---|---|
| Brightcove | 在页面中搜索 Brightcove 对象、参数或 URL |
| YouTube | 检测嵌入的 YouTube iframe 或对象 |
| Vimeo | 识别 Vimeo 播放器并提取视频 ID |
| Dailymotion | 定位 Dailymotion 嵌入代码 |
| 查找 Facebook 视频嵌入 | |
| 还有许多其他语言 | 各种特定平台的检测模式 |
检测到嵌入式播放器时,通用提取器将:
来源: youtube_dl/extractor/generic.py243-284 youtube_dl/extractor/generic.py405-500
提取器可以处理各种标准化的媒体格式
| 格式类型 | 描述 | 文件模式 |
|---|---|---|
| HLS | HTTP 直播 | .m3u8 文件 |
| DASH | HTTP 上的动态自适应流 | .mpd 文件 |
| SMIL | 同步多媒体集成语言 | .smil 文件 |
| XSPF | XML 可共享播放列表格式 | .xspf 文件 |
这些格式中的每一种都会被解析以提取可用的媒体流和元数据。
来源: youtube_dl/extractor/generic.py350-395 youtube_dl/extractor/generic.py266-335
通用提取器可以从 RSS Feed 中提取媒体附件
来源: youtube_dl/extractor/generic.py199-255
当 URL 重定向到受支持的平台时
来源: youtube_dl/extractor/generic.py397-427
通用提取器经常识别应由更专业的提取器处理的内容。在这种情况下,它会将提取委托给适当的专业提取器。
来源: youtube_dl/extractor/generic.py400-650 youtube_dl/extractor/brightcove.py150-284
Brightcove 嵌入视频得到了特别关注,因为它们在许多网站上都很常见。通用提取器对旧版和新版 Brightcove 播放器都有先进的检测功能。
检测到后,提取器会构建一个可以被 BrightcoveLegacyIE 或 BrightcoveNewIE 处理的 URL。
来源: youtube_dl/extractor/generic.py400-580 youtube_dl/extractor/brightcove.py150-284 youtube_dl/extractor/brightcove.py340-400
通用提取器处理未应用专用提取器的各种场景
通用提取器有几个局限性
通用提取器包含涵盖各种场景的广泛测试用例
| 测试类型 | 描述 |
|---|---|
| 直接链接 | 用于直接视频文件 URL 的测试 |
| 嵌入式视频 | 用于各种嵌入式播放器类型的测试 |
| 媒体格式 | 用于 HLS、DASH、SMIL 等的测试 |
| RSS Feed | 用于从 RSS Feed 中提取的测试 |
| 重定向 | 用于 URL 重定向的测试 |
来源: youtube_dl/extractor/generic.py141-1137
通用提取器是 youtube-dl 中一项必不可少的备用机制,它能够从各种没有专用提取器的网站提取媒体。它使用复杂的检测技术来识别和提取媒体内容,这使得 youtube-dl 比仅依赖特定平台提取器更加通用。