通过 RTMPS 传送 YouTube 直播内容

本文档介绍了如何使用 RTMPS 从编码器流式传输 YouTube 上的实时数据。RTMPS 是通过 SSL 连接建立隧道的常规 RTMP(实时信息协议)视频串流。本文档适用于想要为已支持 RTMP 的编码器添加对 RTMPS 支持的编码器供应商。

RTMPS 是大多数普通用户内容的理想选择,尤其是在延迟时间较短的情况下。如需简要了解 YouTube 直播支持的不同提取协议,请参阅提取协议比较

要求

将 RTMPS 发送到 YouTube 直播需满足一些前提条件:

  • 连接网址的每个部分 (<protocol>://<server>/<path>) 都必须正确无误:
    • 协议必须为 rtmps
    • 服务器必须是有效的 YouTube RTMPS 提取端点。
    • 路径必须是有效的 YouTube 直播 RTMP 应用名称。
  • 必须连接到提取服务器上的端口 443。
  • 多媒体串流必须与 RTMPS 一起发送;也就是说,通过 SSL 连接使用 RTMP。

获取连接网址

如果您的编码器已在使用 YouTube Live API,那么获取 RTMPS 提取网址的流程与 RTMP 的流程类似。发送 LiveStreams 插入 (POST) 请求以创建新的提取流。在响应中,cdn.ingestionInfo.rtmpsIngestionAddress 字段会指定 RTMPS 网址。如果支持双重提取,则备份地址为 cdn.ingestionInfo.rtmpsBackupIngestionAddress

创建连接

使用您的首选套接字库在提取网址指定的服务器上创建与端口 443 的 SSL/TLS 连接。由于传输层安全协议 (TLS) 仅适用于传输层,因此并不要求必须使用服务器主机名来发起连接;不过,如要通过我们的服务器进行身份验证,则需要使用服务器主机名。因此,请务必将 SNI 扩展程序(服务器名称指示)添加到 SSL 握手,并将服务器名称设置为您要连接的服务器主机名。

建立 SSL 连接后,将其用作 RTMP 客户端库的连接。初始化的 SSL 连接具有与标准 TCP 连接相同的 API,因此 RTMP 库应该可以同时使用这两个 API。

问题排查

SSL 错误

如果您在尝试创建 SSL 连接时收到无效证书,则表示您可能正在连接到要求使用 RTMP 的 YouTube 服务器。确保您使用的服务器名称中包含“rtmps”,请注意“s”。

如果网址看起来正确,但您仍然收到 SSL 错误,则您可能连接到了错误的端口。确认您连接到端口 443。

如果网址和端口正确,则表示您的 SSL 库可能无法正确处理证书。查找关于 SSL 失败的低级别诊断消息,并仔细检查您在握手中是否使用了 SNI。

连接超时

如果您可以连接到服务器,但在未收到合理响应的情况下 RTMP 库超时,可能是因为您设置了与要求使用 RTMPS 的 YouTube 服务器的明文 RTMP 连接。确保您创建的是 SSL 连接,而不是普通的 TCP 连接。