本文档介绍了如何使用 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 连接。