通过 RTMPS 提交 YouTube 直播内容

本文档介绍了如何使用 RTMPS 从编码器在 YouTube 上直播数据。RTMPS 是通过 SSL 连接建立隧道的常规 RTMP(实时消息传递协议)视频流。本文档面向希望向已支持 RTMP 的编码器添加 RTMPS 支持的编码器供应商。

RTMPS 非常适合大多数普通用户内容,尤其是在需要低延迟的情况下。如需大致了解 YouTube 直播支持的不同接收协议,请参阅 接收协议比较 。

要求

向 YouTube 直播发送 RTMPS 需满足以下几个前提条件:

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

获取连接网址

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

创建连接

使用您首选的套接字库,在接收网址指定的服务器上创建与端口 443 的 SSL/TLS 连接。由于 TLS 仅适用于传输层,因此启动连接时并不严格要求服务器主机名;不过,与我们的服务器进行身份验证时需要使用服务器主机名。因此,请务必将 SNI 扩展程序(服务器名称指示)添加到 SSL 握手中,并将服务器名称设置为您要连接的服务器主机名。

建立 SSL 连接后,将其用作 RTMP 客户端库的连接。初始化的 SSL 连接具有与标准 TCP 连接相同的 API,因此 RTMP 库应能够以相同的方式处理这两种连接。

问题排查

SSL 错误

如果您尝试创建 SSL 连接,但收到无效证书,则可能是连接到需要 RTMP 的 YouTube 服务器。请确保您使用的服务器名称包含“rtmps”(注意“s”)。

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

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

连接超时

如果您可以连接到服务器,但您的 RTMP 库超时且未收到有意义的响应,则可能是您已为需要 RTMPS 的 YouTube 服务器设置了明文 RTMP 连接。请确保您创建的是 SSL 连接,而不是纯 TCP 连接。