广播的生命周期

简介

本文档将引导您了解使用 YouTube Live Streaming API 和 YouTube Content ID API 创建和管理的 YouTube 直播的整个生命周期。

资源和资源类型

如入门指南中所述,资源是指具有唯一标识符的单个数据实体。如需在 YouTube 上创建和管理直播活动,您需要使用 YouTube Data API 或 YouTube Content ID API 中定义的多种不同类型的资源。YouTube Live Streaming API 标题下列出的资源在技术上是在其他 API 中定义的,但由于它们仅用于直播,因此单独列出。

YouTube Live Streaming API 资源

YouTube Data API 资源

YouTube Content ID API 资源

创建和管理直播

以下步骤介绍了如何在 YouTube 上创建和管理直播活动。 这些步骤分为以下阶段:

  1. 设置直播
  2. 对内容提出版权主张
  3. 测试
  4. 广播
  5. 结束直播
  6. 创建参考

第 1 阶段:设置广播

第 1.1 步:创建广播

调用 liveBroadcasts.insert 方法,将您的广播添加到 YouTube 的直播活动日程中。您要插入的 liveBroadcast 资源必须为下列属性定义值。

设置直播时,请遵循以下准则:

  • 如果您希望为广播设置测试阶段,以便您在其他观看者无法看到广播的情况下查看视频广播,则必须将 contentDetails.monitorStream.enableMonitorStream 属性设置为 true,并将 contentDetails.enableAutoStart 属性设置为 false。这两个属性的默认值如下。

  • 如果您想根据录制的直播创建参考文件,则必须将直播的 contentDetails.recordFromStart 属性设置为 true。如果您希望在直播结束后立即播放录制的视频,还必须将 contentDetails.enableDvr 属性设置为 true。(这两个属性的默认值均为 true。)

  • 如果您想限制可观看直播的地区,可以设置 contentDetails.availabilityConfig 属性。通过此属性,您可以屏蔽特定地区,或仅在指定地区列表中提供。您还可以指定区域可用性的时间窗口。

  • 您可以选择使用 snippet.categoryId 属性为广播指定视频类别。如果未指定,则类别默认为 Entertainment。

  • 只要直播状态仍为 created 或 ready,您就可以更新任何 contentDetails 属性。

  • 只要直播的状态为 created、ready 或 testing,您就可以更新直播的预定开始时间和预定结束时间。

  • 直播的标题、说明、类别、隐私状态以及属于直播 video 资源的其他元数据字段可以随时更新。

    注意:如果您只想让特定 YouTube 用户观看您的视频,请根据需要将 status.privacyStatus 属性值设置为 unlisted 或 private。

处理 API 响应

调用 liveBroadcasts.insert 方法时,API 响应包含您创建的 liveBroadcast 资源。您的代码应从该资源中提取并存储 id。您需要使用该值来标识未来的 API 请求中的广播。(您也可以使用相同的 ID 标识与 liveBroadcast 资源对应的 video 资源。)

第 1.2 步:创建直播

liveStream 资源可让您将视频传输到 YouTube,并描述您正在传输的内容。每次直播都必须恰好与一个视频流相关联。

调用 liveStreams.insert 方法,为您的活动创建视频流。创建直播时,您必须为下列属性设置值:

除了直播的标题之外,这些值在直播创建后便无法更新。如果您需要更改这些设置,则实际上需要通过重复此步骤来创建不同的直播。本文档后面的第 3.5 步中会更详细地讨论此过程。

您还可以选择为以下属性设置值:

  • snippet.description - 与直播标题一样,直播说明也可以在直播创建后进行更新。YouTube 用户看不到标题和说明。
  • [contentDetails.isReusable](

    /youtube/data/live/reference/rest/v3/liveStreams#contentDetails.isReusable)

    指明直播是否可重复使用,即是否可绑定到多个直播活动。此属性的值可有效确定频道在 liveBroadcast 和 liveStream 资源之间是一对多关系还是一对一关系:

    • 如果您使用该属性的默认值 true,则可以为频道的所有广播使用相同的 liveStream 资源。这意味着,您无需为每个广播重复执行此步骤 (1.2)。而是可以为后续直播重复使用该直播 ID。
    • 如果您将属性值设置为 false,则需要为每次广播创建新的直播流。

发出 API 请求后,API 响应会包含您创建的 liveStream 资源。您的代码应从该资源中提取并存储 id。您需要使用该值来标识未来的 API 请求中的流。

第 1.3 步:将直播活动与其直播流绑定

创建 liveBroadcast 和 liveStream 资源后,您现在需要使用 liveBroadcasts.bind 方法将两者关联起来。此操作会将您要传输到 YouTube 的视频比特与该视频的活动直播相关联。

在调用 liveBroadcasts.bind 方法时,将 id 参数设置为在第 1.1 步中获取的直播 ID,并将 streamId 参数设置为在第 1.2 步中获取的直播流 ID。

第 2 阶段:对内容提出版权主张

如果您想在直播期间展示广告,需要在活动开始前声明直播视频。 请按照以下步骤设置直播、视频和广告。 请注意,直播所有者的频道必须符合展示广告的条件。

请注意,此阶段讨论的所有 API 调用都是在 YouTube Content ID API 中定义的。

第 2.1 步:创建资产

asset 资源表示一项知识产权。在这种情况下,资源就是您的广播。调用 assets.insert 方法以创建资产。

API 响应将包含您创建的 asset 资源。您的代码应从该资源中提取并存储 id,因为您需要该值来识别未来 API 请求中的资源。

第 2.2 步:定义您对资产的所有权

资产的所有权数据可标识资产的所有者以及他们拥有该资产的地区。YouTube 会使用这些数据来确定所有者可以在哪些地区为收到版权主张的视频设置政策。

例如,如果您有权在美国直播某活动,而另一位广播公司拥有在加拿大直播同一活动的权利,那么您可以各自为直播视频和与直播视频匹配的用户上传视频定义不同的政策。您的匹配政策将应用于美国境内匹配的用户上传视频,而另一位所有者的政策将应用于加拿大境内匹配的视频。

如需定义资产的所有权地区,请调用 ownership.update 方法。在该请求中,将 assetId 参数设置为您在第 2.1 步中存储的 id。

第 2.3 步:设置资产的匹配政策

资产的匹配政策说明了当用户上传的视频与资产关联的参考文件匹配时,YouTube 应采取什么措施。在这种情况下,匹配政策将指明 YouTube 应如何处理与您的直播内容相匹配的上传视频。

注意:如果您打算从直播视频中创建参考文件,并使用该参考文件来识别用户上传的与您的直播视频匹配的视频,则应设置匹配政策。否则,您可以跳过此步骤。

如需设置匹配政策,您首先需要确定要应用的政策。您可以通过调用 policies.list 方法来检索现有政策列表,也可以通过调用 policies.insert 方法来定义新政策。无论哪种情况,您都需要捕获要应用的政策的 id。

确定政策后,调用 assetMatchPolicy.update 方法。在该请求中,将 assetId 参数设置为您在第 2.1 步中存储的 id。

第 2.4 步:对视频主张版权

在此步骤中,您将创建一项版权主张,将您要直播的视频与您在第 2.1 步中创建的资产相关联。版权主张会设置一项仅适用于直播视频的政策。(与您的直播视频匹配的用户上传视频受上一步中设置的匹配政策约束。)

如需创建声明,请调用 claims.insert 方法。在您插入的 claim 资源中,您需要为以下属性设置值:

  • assetId - 您在第 2.1 步中获得了此值。
  • videoId - 这是您在第 1.1 步中获得的直播 ID。
  • policy - 这是一个 policy 资源。您可以通过将该资源的 id 属性设置为现有政策的 ID 来应用现有政策。上一步介绍了如何检索现有政策的 ID。
  • contentType - 将此值设置为 audiovisual。

处理 API 响应

插入版权主张后,API 响应将包含您创建的 claim 资源。您的代码应从该资源中提取并存储 id。稍后,您将使用该值从已处理的视频中创建参考文件。

第 2.5 步:更新直播的广告设置

如果您想在观看者开始观看您的直播时投放前贴片广告,或在直播间歇期间投放广告,则需要为视频设置广告选项。

  • 如果您为直播启用了前贴片广告,那么所有观看者在开始观看直播时都会看到广告,即使他们是在直播中途开始观看的。
  • 如果您为直播启用了中贴片广告,则可以在直播期间插入广告提示点。

如需启用广告,请调用 videoAdvertisingOptions.update 方法。在请求中,将 videoId 参数设置为您在第 1.1 步中获取的直播 id。使用 videoAdvertisingOption 资源的 adFormats[] 属性来标识要启用的广告格式(preroll、midroll 或 postroll)。

第 3 阶段:投石问路

在此阶段,您将嵌入一个播放器,用于显示广播的监视器视频流,以便测试观看体验。监控直播是一种私享直播,可让您预览 YouTube 观看者看到的直播视频。

请注意,只有在启用视频广播的监视器串流后,您才能测试视频广播。默认情况下,直播的监控视频流处于启用状态。您可以在创建或更新直播时,将 contentDetails.monitorStream.enableMonitorStream 属性设置为 false,以停用直播的监控视频流。

第 3.1 步:嵌入监控直播播放器

使用 liveBroadcasts.list 方法检索直播,并提取 contentDetails.streamDetails.monitorStreamEmbedHtml 属性的值。该值包含您需要嵌入的 HTML 代码,用于嵌入显示监控视频流的 YouTube 播放器。

第 3.2 步:开始录制视频

开始传输视频流。

第 3.3 步:确认视频流处于有效状态

调用 liveStreams.list 方法,以检索与您的直播关联的 liveStream 资源。确认 status.streamStatus 属性的值为 active,这表示 YouTube 服务器正在正确接收来自编码器的数据。

第 3.4 步:将广播的状态转换为“测试”

调用 liveBroadcasts.transition 方法以更新广播的状态。将 id 参数值设置为在第 1.1 步中获得的广播 ID,并将 broadcastStatus 参数值设置为 testing。

调用 liveBroadcasts.transition 方法后,可能需要几秒钟甚至一分钟才能完成该转换。在此期间,您应轮询 API 以检查直播的状态。在过渡完成之前,直播的状态将为 testStarting。转换完成后,状态将为 testing。

第 3.5 步:完成测试

如果测试顺利,您可以进入第 4 阶段。 不过,在某些情况下,您可能需要进行进一步测试。例如,如果测试显示视频流配置不正确,您需要先解决该问题,然后再继续直播。

如果视频流配置不正确,则需要解除绑定(并删除)现有视频流,然后创建新视频流。例如,如果直播指定了错误的视频格式,则可能未正确配置。

  1. 如需取消绑定视频流,请调用步骤 1.3 中的 liveBroadcasts.bind 方法。在 API 请求中,将 id 参数设置为在第 1.1 步中获取的 id。请勿在请求中添加 streamId 参数。

  2. 如需删除视频流,请调用 liveStreams.delete 方法。在请求中,将 id 参数设置为在第 1.2 步中获得的 id。

  3. 重复执行步骤 1.2,创建新的、配置正确的 liveStream 资源。然后重复执行第 1.3 步,将新直播流绑定到您的广播,并重复执行第 3.1 步到第 3.3 步,测试新直播流。

第 3.6 步:启用 autoStart 和 autoStop 属性

成功完成测试阶段后,您可以选择在实际直播开始之前将直播的 contentDetails.enableAutoStart 和 contentDetails.enableAutoStop 属性设置为 true。在测试阶段之前,这些属性不能设置为 true,因为测试实际上会导致直播开始。

第 4 阶段:广播

在此阶段,您的直播视频可供观众观看。

第 4.1 步:开始录制视频

开始在视频流中传输视频。

第 4.2 步:确认视频流处于活跃状态

调用 liveStreams.list 方法,以检索与广播相关联的 liveStream 资源。确认 status.streamStatus 属性的值为 active,这表示 YouTube 服务器正在正确接收来自编码器的数据。

第 4.3 步:将直播状态转换为“直播”

重要提示:此步骤会使您的视频对观众可见。

调用 liveBroadcasts.transition 方法以更新直播的状态。将 id 参数值设置为在第 1.1 步中获得的直播 ID,并将 broadcastStatus 参数值设置为 live。

如果您将 liveBroadcast 资源的 contentDetails.enableAutoStart 属性设置为 true,则无需调用 liveBroadcasts.transition 方法。

发出此 API 调用后,或者如果您已将 contentDetails.enableAutoStart 属性设置为 true,则在开始流式传输后,您通常需要等待 5 到 10 秒才能完成该过渡。过渡过程最长可能需要一分钟。在此期间,您应轮询 API 以检查广播的状态。在过渡完成之前,广播的状态将为 liveStarting。切换完成后,状态将变为 live,观看者可以从监控直播中的该时间点开始观看您的直播。

请注意此命令的以下影响:

  • 如果您已为直播启用监控视频流(请参阅第 3.1 步),则可以在嵌入式播放器中看到监控视频流。
  • 如果您为直播的 contentDetails.streamDetails.broadcastStreamDelayMs 属性设置了值,则其他观看者看到的直播视频流将延迟该时长。

第 4.4 步:在直播中插入广告插播时间点

调用 liveBroadcasts.cuepoint 方法以插入一个 cuepoint。cuepoint 可能会触发广告插播时间点。在请求正文中提供的 cuepoint 资源中,将 durationSecs 属性设置为您要显示的广告插播时间点的所需时长(以秒为单位)。(默认值为 30。)

此时,YouTube 会尝试在视频播放器中向所有在插入广告提示点时正在观看直播的观看者播放广告。广告是否播放取决于多种因素,例如广告供应情况和观看者的广告观看记录。看到广告插播时间点的观看者会在广告插播时间点结束后返回您的直播,而未看到广告的观看者会在插播期间继续观看直播。

入门指南提供了有关直播广告插播时间点期间观看体验的更多信息。

第 5 阶段:结束直播

第 5.1 步:停止流式传输

YouTube 直播系统测试到此结束。

第 5.2 步:将广播的状态转换为“完成”

当您准备好停止直播时,请调用 API 的 liveBroadcasts.transition 方法来更新直播的状态。将 id 参数值设置为在第 1.1 步中获得的直播 ID,并将 broadcastStatus 参数值设置为 complete。

如果您已将直播的 contentDetails.recordFromStart 和 contentDetails.enableDvr 属性设置为 true,那么在直播活动结束后,您的观众可以立即观看直播活动回放。

第 6 阶段:创建参考文件

直播录制完成后,您可以根据录制的视频创建参考文件。此操作会指示 YouTube 查找与直播内容匹配的用户上传视频,并根据您在第 2.3 步中设置的匹配政策进行处理。

重要提示:如需创建引用,您必须将广播的 contentDetails.recordFromStart 属性设置为 true。

第 6.1 步:轮询 Data API 以获取视频的状态

YouTube 必须先完成对直播或上传视频的处理,然后您才能根据该视频创建参考文件。如需确定视频是否已处理完毕,请轮询 YouTube Data API 的 videos.list 方法,将 part 参数设置为 status,并将 id 参数设置为您在第 1.1 步中存储的直播 ID。

API 对轮询请求的响应将包含 video 资源。当相应资源的 status.uploadStatus 属性的值为 processed 时,请继续执行第 6.2 步。

第 6.2 步:根据处理后的视频创建参考文件

如需创建参考,请调用 Content ID API 的 references.insert 方法,并将 claimId 参数设置为您在第 2.4 步中存储的版权主张 ID。

直播 Content ID 提交

部分 YouTube 合作伙伴可以在其直播过渡到 testing 状态之前创建参考文件,但并非所有合作伙伴都可以使用此功能。在该流程中,YouTube 会在直播活动进行期间根据直播视频流生成并持续更新参考文件。此外,YouTube 会在直播仍在进行时查找匹配的用户上传视频。请注意,在直播开始前创建参考文件会自动为直播开启录制功能,并且在创建参考文件后无法关闭录制功能。

如需为直播启用 Content ID 实时传送功能,请在第 2.4 步中对视频主张版权后,尝试执行第 6.2 步中所述的操作。 如果您的合作伙伴账号在直播开始之前未获批准创建直播参考,则 API 会返回 fingerprintingNotAllowed 错误。在这种情况下,您需要等到广播完成后(如上文步骤 6.1 和 6.2 中所述),才能创建参考。