通过 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 Live 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 连接,但收到无效证书,则可能是因为您连接的 YouTube 服务器需要 RTMP。确保您使用的服务器名称中包含“rtmps”(请注意“s”)。

如果网址正确,但您仍收到 SSL 错误消息,则可能是连接的端口有误。确认您正在连接到端口 443。

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

连接超时

如果您可以连接到服务器,但 RTMP 库在没有获得合理响应的情况下超时,则可能是因为您设置了与需要 RTMPS 的 YouTube 服务器的明文 RTMP 连接。确保您创建的是 SSL 连接,而不是纯 TCP 连接。