实时字幕供应商信息

通过 HTTP 为 YouTube 直播视频流提供字幕

本文档定义了 YouTube 接收的字幕数据的格式。

POST 内容

YouTube 希望字幕数据以连续的 POST 顺序到达。POST 的网址将指定数据的目标位置(与字幕相关联的直播视频流)。POST 的正文将包含字幕数据的时间和文本。在字幕文本中,换行符可以用 <br> 表示。其格式如下:

 

<UTC Time> [region / cue]
<TEXT>
<UTC Time> [region / cue]
<TEXT>
<UTC Time> [region / cue]
<TEXT>

地点

            <UTC time>                         YYYY-MM-DDTHH:MM.SS.mmm
            [region / cue]                 可选 region:reg1#cue1,格式(待定)
            <TEXT>                                 UTF-8

 

示例:

      2012-12-24T00:00:06.873
      我
      2012-12-24T00:00:06.974
      正在发送
      2012-12-24T00:00:07.030
      几个
      2012-12-24T00:00:07.104
      字幕

网址查询参数的 HTTP POST 详细信息

下表列出了所需的查询参数。

以下参数通常由 YouTube 提供:

已启用字幕和字幕提取网址

 
注意:在向临时服务器发送数据时,并不需要提供 sparams、&expire、&signature 和 &key。
名称 说明/用法 示例 Fragment
id 视频流 ID 必须包含在所有 POST 中。 &id=someStreamID
ns 视频流名称。必须包含在所有 POST 中。 &ns=someStreamName
sparams 必须包含在所有 POST 中。必须如右边所示进行详细说明。 &sparams=id%2Cns%2Cexpire
expire 必须包含在所有 POST 中。 &expire=1349539164
签名 必须包含在所有 POST 中。 &signature=564AB21...C4A9B281F.D1A68B7...062988FBA95
密钥 必须包含在所有 POST 中。必须具有值 yt_qc。 &key=yt_qc

以下参数必须添加到每个 POST 的网址中。

名称 说明/用法 示例 Fragment
seq 必须包含在所有 POST 中。所有字幕数据 POST 的计数器。计数器在新的字幕数据的每两个 POST 之间必须增加 1(重试时不得增加)。 &seq=123

内容类型

所有 POST 的内容类型 (mimetype) 必须为纯文本

内容数据

发送到字幕提取点的所有 HTTP POST 只能在内容正文中包含字幕数据。数据不得采用格式编码。

响应代码

HTTP POST 可能会返回各种响应代码。其含义如下:

响应代码 含义

405

方法未获允许。不是 POST。

400

请求有误。无法解析网址。可能是因为缺少 &seq 查询参数或缺少 &id 或 &ns。

403

未授权。签名无效。注意:YouTube 前端提供的网址将包含所有签名信息。

请求重试

我们建议对所有其他代码(上述 405、400、403 代码以及 408 请求超时、500 内部服务器错误、502 网关无效、503 服务不可用、504 网关超时等代码)执行重试操作。

所有 HTTP POST 请求都应该使用超时来执行。如果请求超时,则应重试该请求。

执行重试请求时,请使用随机二进制指数退避算法:等待 [0...100] 毫秒之间的任一随机时间段,然后重试;如果失败,请等待 [0..200] 毫秒之间的任一随机时间段,然后重试;如果失败,请等待 [0..400] 毫秒之间的任一随机时间段,然后重试,以此类推。直至试到可以合理地转到下一个字幕数据包(待定,可能是 5 秒之后)为止。

如需了解详情,请参阅二进制指数退避算法

作为检测信号的空白 HTTP POST

正文空白的 HTTP POST,或时间戳行后面的空白文本行,可以用来执行检测信号功能。POST 对字幕文本流没有任何影响,但客户端软件可能会验证与 Google 字幕服务器的 HTTP 连接是否正常,而 Google 字幕服务器可以验证其是否由客户端驱动。

HTTP POST 返回时间戳

POST 返回正文中存在时间戳值,该值对应于处理 POST 的时间。它可用于更正驱动服务器的客户端上的本地时钟。由于本地时钟往往很难同步,因此建议使用该值。

返回的时间戳示例:

2012-12-24T00:00:06.873

YouTube 提供的网址

YouTube 首页将提供提取网址。示例网址为:

http://upload.youtube.com/closedcaption?sparams=id%2Cns%2Cexpire&expire=1352689249&key=yt_qc&signature=0D3B147BAFA18DDE62B304AE429834186FC5E5BA.8C9162D7B10B7DED35FBD65D4BC8E5AE3AF98A4D&ns=yt-ems-t&id=HckQ0lctwDyDn3SXfWUwHw1350097249388495&seq=1

对于临时服务器,以下是有效的示例网址:
http://upload.youtube.com/closedcaption?ns=my_name&id=12345&seq=1&staging=1

注意:必须将网址搜索参数 &seq 添加到上面提供的网址中。

POST 示例

POST /closedcaption?sparams=id%2Cns%2Cexpire&
expire=1352689249&key=yt_qc&signature=0D3B147BAFA18DDE62B304AE429834186FC5E5BA.8C9162D7B10B7DED35FBD65D4BC8E5AE3AF98A4D&ns=yt-ems-t&id=HckQ0lctwDyDn3SXfWUwHw1350097249388495&seq=42

Host: localhost:8000
Accept: */*
Content-Type: text/plain
Content-Length: 127970

2012-12-24T00:00:06.873 region:reg1#cue1
此时此刻,我
2012-12-24T00:00:06.974 region:reg1#cue1

2012-12-24T00:00:07.030 region:reg1#cue1

2012-12-24T00:00:07.104 region:reg1#cue1
左边

同步

YouTube 直播控制室会为活动所有者构建一项功能,以便将字幕调整 +/- x 秒。不过,在字幕软件中构建一个控件来调整超前/滞后时间也会很实用。请确保此控件仅适用于 YouTube 输出。

该内容对您有帮助吗?

您有什么改进建议?
搜索
清除搜索内容
关闭搜索框
主菜单
18100129861697204992
true
搜索支持中心
true
true
true
true
true
59
false
false