通过 HTTP 为 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 提供:
名称 | 说明/用法 | 示例 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 示例
|
同步
YouTube 直播控制室会为活动所有者构建一项功能,以便将字幕调整 +/- x 秒。不过,在字幕软件中构建一个控件来调整超前/滞后时间也会很实用。请确保此控件仅适用于 YouTube 输出。