使用 RTMP 网关
声网 RTMP 网关(RTMP Gateway)服务能够把使用标准推流协议的内容推到声网 SD-RTN™,并以主播身份将这些内容发布到对应的频道内。在实时互动场景下,凭借 RTMP 网关,你可以把在线媒体流作为直播视频源输入到声网频道内,构建出更丰富好玩的场景。
在使用 RTMP 网关服务前,你需要在推流软件中配置服务器的域名和推流码。本文以使用 OBS 推流软件输入 RTMP 协议的媒体流为例,介绍如何获取并配置服务器的域名和推流码。
前提条件
开始前请确保如下条件:
- 有一个实现了实时互动功能的项目。
- 参考开通服务获取了该项目的 App ID、App 证书、客户证书和密钥,并开通了 RTMP 网关服务。
- 调用 RTMP 网关 RESTful API 需要通过 HTTP 安全认证。
获取服务器域名
在服务器一栏填写推流域名,格式为 {推流域名}/live
。可以使用声网统一域名,也可以绑定自己的域名。
-
如果使用声网的域名,则需要填入
rtls-ingress-prod-{region}.agoramdn.com/live
,其中的{region}
字段需要根据实际区域填写,支持的区域如下:cn
:中国大陆ap
:除中国大陆以外的亚洲区域na
:北美eu
:欧洲
-
如果使用自己的域名,请联系声网技术支持进行配置,配置成功后方可使用。
获取推流码
推流码的生成方式取决于你使用声网域名还是自己的域名。
- 如果使用声网的域名,则需要调用 RTMP 网关 API 来生成推流码。
- 如果使用自己的域名,则既可以通过调用 API 来生成推流码,也可以在本地生成推流码。
调用 API 生成推流码
你可以通过调用创建推流码 API 创建并获取推流码。
本地生成推流码
本节介绍如何在本地生成推流码。
开始前请确保已联系技术支持成功绑定用户域名。
在生成推流码过程中,你需要用到以下信息:
- 声网项目的 App ID,详见获取 App ID。
- 声网项目对应的 App 证书,详见获取 App 证书。
- 声网频道名称
channelName
。 - 声网频道内主播的
uid
。 - 推流码的有效时长
expiresAfter
(秒)。 - (可选)关联的流配置模版
template
,详见流配置模板 API。
以下的 Node.js 示例代码,演示了如何本地生成推流码:
以下示例代码依赖 msgpack-lite
模块。如果你还没有安装,在项目根目录执行执行 npm install msgpack-lite
后运行 node app.js
即可。
const crypto = require('crypto');
const msgpack = require('msgpack-lite');
// 你的声网项目的 App ID 对应的 App 证书
appcert = ""
// 声网频道名称
channel = "";
// 声网频道内的主播 uid
uid = "";
// 推流码的有效时长(秒)
expiresAfter = 86400;
// 关联的流配置模板,如果不确定有什么用,请保持注释状态
// templateId = "720p";
const expiresAt = Math.floor(Date.now() / 1000) + expiresAfter;
const rtcInfo = {
C: channel,
U: uid,
E: expiresAt,
// 如果不确定要不要用流配置模板,请保持注释状态
// T: templateId,
};
// 使用 msgpack 序列化
const data = msgpack.encode(rtcInfo);
// 随机生成一个初始化向量(IV)
const iv = crypto.randomBytes(16);
// 使用 App 证书作为加密密钥
const key = Buffer.from(appcert, 'hex');
// 创建一个 AES-128 的 CTR 加密器
const encrypter = crypto.createCipheriv('aes-128-ctr', key, iv);
// 对数据进行加密
const encrypted = Buffer.concat([iv, encrypter.update(data), encrypter.final()]);
// base64 转换,并保证 URL 安全
const streamkey = encrypted.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/\=+$/, '');
console.log(`streamkey is ${streamkey}`);
与 Web 端互通推荐配置
在和 Web 端互通的场景中,默认不开启转码的情况下,为保证 Web 端观众有最好的体验,请确保推流软件使用如下编码参数:
- 关键帧间隔(GOP):
2s
- 视频配置(Profile):
baseline
- x264 选项:
threads=4
- 帧率(FPS):1080P 分辨率时,帧率不超过 30;1080P 以下分辨率时,帧率不超过 60(如无必要,配置 30 即可)。
以 OBS 推流软件为例,请按照下图进行配置:
-
在设置 > 输出 > 直播页面,配置视频 Profile、关键帧间隔和 x264 选项。
-
在设置 > 视频页面,配置常用帧率。
下一步
完成配置后,你就可以将 RTMP 或 SRT 协议的流推到声网频道中,这些流会以主播的身份被发布到对应的频道内。
默认情况下,RTMP 网关收到推送过来的流后,不会对其中的视频流做转码处理,而是直接发布到声网频道内。如果你希望网关对流做转码处理,可以使用流配置模版 API 来实现相关功能。