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