菜单

ThePlatform 和多站点提取器

相关源文件

此页面介绍了用于处理 ThePlatform 内容分发系统和 MTV 服务基础设施内容的提取器。MTV 服务基础设施为许多热门媒体网站提供支持。这些多站点提取器构成了基础,使 youtube-dl 能够以最小的代码重复来支持数十个不同的网站。

有关通用提取器架构的信息,请参阅 提取器系统

ThePlatform 和 MTV 服务概述

ThePlatform 是康卡斯特旗下的视频内容管理系统(CMS),为许多主要网络网站提供支持。MTV 服务是维亚康/维亚康CBS(现为派拉蒙)旗下的公司使用的另一个内容分发基础设施。这两个系统具有相似的特点,即它们

  1. 为多个网站提供后端基础设施
  2. 跨不同网站使用通用 API 和数据格式
  3. 需要专门的处理才能提取媒体内容

来源:youtube_dl/extractor/theplatform.py youtube_dl/extractor/mtv.py youtube_dl/extractor/nbc.py

ThePlatform 提取器系统

ThePlatform 提取器处理由康卡斯特的 ThePlatform CMS 提供支持的网站。这些提取器组织在一个类层次结构中,以最大程度地提高代码重用性。

ThePlatform 类层次结构

来源:youtube_dl/extractor/theplatform.py34-124 youtube_dl/extractor/theplatform.py127-319 youtube_dl/extractor/theplatform.py322-404 youtube_dl/extractor/nbc.py289-433

ThePlatform 提取器的关键组件

  1. ThePlatformBaseIE:提供 ThePlatform 提取器通用功能的基类。

    • _extract_theplatform_smil():从 SMIL XML 数据中提取视频格式
    • _download_theplatform_metadata():从 ThePlatform API 下载元数据
    • _parse_theplatform_metadata():解析元数据,包括字幕和章节
    • _extract_theplatform_metadata():结合下载和解析元数据
  2. ThePlatformIE:ThePlatform 内容的主要提取器。

    • 处理直接的 ThePlatform 链接
    • 支持受保护内容的签名 URL 处理
    • 可以从网站提取嵌入式 URL
  3. ThePlatformFeedIE:处理 ThePlatform 馈送 URL。

    • 使用基于馈送的 API 端点
    • 解析馈送条目以提取视频信息

ThePlatform 内容的提取过程

ThePlatform 内容的提取过程遵循以下通用步骤

  1. 从 URL 或网页中提取 URI/GUID
  2. 构建适当的 API URL 以获取元数据
  3. 下载并解析 SMIL XML 数据以获取媒体格式
  4. 提取视频格式、字幕和元数据
  5. 返回结构化信息

例如,在提取 NBC 内容时

来源:youtube_dl/extractor/theplatform.py235-319 youtube_dl/extractor/nbc.py376-433

MTV 服务提取器系统

MTV 服务为 MTV、Comedy Central 和 Nickelodeon 等许多维亚康/派拉蒙网络网站提供支持。MTVServicesInfoExtractor 是针对这些网站的提取器的基类。

MTV 服务类层次结构

来源:youtube_dl/extractor/mtv.py33-302 youtube_dl/extractor/mtv.py305-339 youtube_dl/extractor/mtv.py342-366 youtube_dl/extractor/comedycentral.py6-27 youtube_dl/extractor/nick.py10-79 youtube_dl/extractor/southpark.py7-39

MTV 服务的关键组件

  1. MTVServicesInfoExtractor:MTV 网络提取器的基类。

    • _id_from_uri():从内容 URI 中提取 ID
    • _extract_video_formats():从 MTV 服务 API 响应中提取视频格式
    • _get_video_info():获取全面的视频信息
    • _extract_triforce_mgid():从网页中提取 MGID(媒体组 ID)
    • _get_videos_info():获取多个视频的信息
  2. 特定站点提取器:为不同站点自定义行为。

    • 覆盖 _VALID_URL 以匹配特定站点的 URL 模式
    • 覆盖 _FEED_URL 以指向站点的馈送端点
    • 覆盖 _get_feed_query() 以自定义 API 参数

MTV 服务提取器使用几个关键概念

概念描述
MGID媒体组 ID - MTV 服务中内容的唯一标识符
URI资源标识符,格式为 mgid:namespace:type:site.com:id
馈送 URL提供内容元数据的 API 端点
Mediagen提供实际媒体 URL 的服务

来源:youtube_dl/extractor/mtv.py37-204 youtube_dl/extractor/comedycentral.py8-11

MTV 服务内容的提取过程

来源:youtube_dl/extractor/mtv.py212-233 youtube_dl/extractor/comedycentral.py9-27

支持的网站

基于 ThePlatform 的网站

The Platform 提取器支持各种网站,包括:

  • NBC(NBCIE
  • NBC 新闻(NBCNewsIE
  • NBC 体育(NBCSportsIE
  • NBC 奥运(NBCOlympicsIE
  • CNBC 和其他康卡斯特旗下的网站

基于 MTV 服务的网站

MTV 服务提取器支持广泛的维亚康/派拉蒙旗下网站

网站提取器备注
MTVMTVIE原始的 MTV 网站
Comedy CentralComedyCentralIE喜剧频道
NickelodeonNickIE儿童频道
South ParkSouthParkIE该剧集的专用网站
Nick JrNickJrIE学龄前节目
VH1VH1IE音乐和娱乐
TV LandTVLandIE经典电视节目
CMTCMTIE乡村音乐电视
Paramount NetworkParamountNetworkIE原 Spike TV

来源: youtube_dl/extractor/nbc.py21-157 youtube_dl/extractor/comedycentral.py6-27 youtube_dl/extractor/nick.py10-249 youtube_dl/extractor/southpark.py7-127 youtube_dl/extractor/vh1.py7-42 youtube_dl/extractor/tvland.py7-37 youtube_dl/extractor/cmt.py6-54 youtube_dl/extractor/spike.py24-48

扩展和定制模式

多站点提取器遵循扩展新站点功能的常见模式

针对基于 ThePlatform 的站点

  1. 创建一个继承自 ThePlatformIE 的新提取器类
  2. 定义特定于站点的 _VALID_URL 模式
  3. 实现 _real_extract() 来处理特定于站点的提取逻辑
  4. 将实际媒体提取转发给 ThePlatform

针对基于 MTV Services 的站点

  1. 创建一个继承自 MTVServicesInfoExtractor 的新提取器类
  2. 定义特定于站点的 _VALID_URL 模式
  3. _FEED_URL 设置为站点的 feed 端点
  4. 如果站点需要自定义参数,则覆盖 _get_feed_query()
  5. 可选地覆盖 _real_extract() 以进行特定站点的处理

Comedy Central 站点的示例

来源: youtube_dl/extractor/comedycentral.py6-27 youtube_dl/extractor/nick.py10-79

常见挑战与解决方案

1. 地理限制

许多 ThePlatform 和 MTV Services 站点都实现了地理限制。提取器通过以下方式处理此问题:

  • 支持地理绕过选项
  • 检测响应中的地理限制错误
  • 为受限内容提供特定的错误消息

2. 身份验证

某些内容需要身份验证。这通过以下方式处理:

  • Adobe Pass 集成,用于电视提供商身份验证
  • 处理用于会话管理的 cookie
  • 在有可用凭据时支持登录凭据

3. 格式选择

站点通常提供多种格式和质量。提取器:

  • 从 SMIL 和其他响应中解析可用格式
  • 处理直接 URL 和自适应流格式(HLS、DASH)
  • 按质量对格式进行排序以进行自动选择

4. 多个媒体项

剧集通常包含多个片段。提取器通过以下方式处理此问题:

  • 检测播放列表与单个视频
  • 为多部分内容创建播放列表条目
  • 维护剧集和系列元数据

来源: youtube_dl/extractor/theplatform.py41-75 youtube_dl/extractor/mtv.py71-111

结论

ThePlatform 和 MTV Services 提取器展示了 youtube-dl 架构在高效处理多个相似站点方面的强大功能。通过识别通用的后端系统并为它们创建基础提取器,代码库保持了可维护性,同时以最少的重复代码支持了数十个流行的媒体网站。

多站点方法允许快速添加使用相同后端系统的新站点,并提供对地理限制、身份验证和格式选择等常见挑战的一致处理。