nimeet 文档中心
English

Media Gateway(RTMP 网关 / RTLS Ingress)

streamkeys、stream templates、online-streams、mute 与断开、appconfig 全局配置、对账语义。

版本 v1.1.0 · 更新于 2026-10-26 · 修订 1

Media Gateway(接口定义里的 rtls/ingress,产品名「RTMP 网关」)解决的是外部 RTMP 推流进入 RTC 频道:主播用 OBS 等工具推到我们给的地址,频道里的观众像看普通参与者一样看到它。

三个概念要分清:

概念作用生命周期
streamkey推流凭证与目标绑定(推到哪个频道、用哪个 uid、多久过期)一次性/短期,用完可删
stream template推流参数模板(转码、抖动缓冲)长期,可复用
online stream正在推的一路流(会话),可查询、可静音、可断开随推流建立/结束

全局配置

bash
curl -s -X PUT "$NIMEET_API_BASE/cn-shanghai/v1/projects/$APP_ID/rtls/ingress/appconfig" \
  -H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
  -H 'Content-Type: application/json' \
  -d '{"settings":{"defaultStreamTemplate":"standard-720p"}}'

settings.defaultStreamTemplate 指向一个模板 id;没带模板的推流会用它。

创建 streamkey(主播侧推流凭证)

bash
curl -s -X POST "$NIMEET_API_BASE/cn-shanghai/v1/projects/$APP_ID/rtls/ingress/streamkeys" \
  -H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
  -H 'Content-Type: application/json' \
  -d '{"settings":{"channel":"weekly-sync","uid":"30001","expiresAfter":3600,"templateId":"standard-720p"}}'
字段类型说明
channelstring目标频道
uidstring \number在频道里的身份(可用字符串账号名)
expiresAfterinteger有效期秒数
templateIdstring使用的模板 id

响应 data.streamKey 就是推流密钥。OBS 配置:服务器填 rtmp://<你的网关域名>/live,串流密钥填 streamKey。

流模板

bash
# 新建/覆盖模板
curl -s -X PUT "$NIMEET_API_BASE/cn-shanghai/v1/projects/$APP_ID/rtls/ingress/stream-templates/standard-720p" \
  -H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
  -H 'Content-Type: application/json' \
  -d '{"settings":{"transcoding":{"width":1280,"height":720,"frameRate":30,"bitrate":2000},"jitterBuffer":{"sizeMs":500}}}'

# 局部更新
curl -s -X PATCH "$NIMEET_API_BASE/cn-shanghai/v1/projects/$APP_ID/rtls/ingress/stream-templates/standard-720p" \
  -H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
  -H 'Content-Type: application/json' \
  -d '{"settings":{"jitterBuffer":{"sizeMs":300}}}'

transcoding 控制转码参数,jitterBuffer 控制抖动缓冲:直播追低延迟时把 sizeMs 调小(代价是卡顿更敏感)。

在线流管理

操作端点说明
列表GET /{region}/v1/projects/{appId}/rtls/ingress/online-streams(可 channel 过滤)返回正在推的会话
查询单个GET /{region}/v1/projects/{appId}/rtls/ingress/online-streams/{sid}该路流的详情/状态
静音POST /{region}/{version}/projects/{appId}/rtls/ingress/online-streams/mute/{sid}服务端静音(不踢人)
断开DELETE /{region}/v1/projects/{appId}/rtls/ingress/online-streams/{sid}断开推流并结束会话

典型接入时序

  1. 服务端建 streamkey(绑定频道 + uid + 模板),把 streamKey 交给主播;
  2. 主播在 OBS 里推流,网关建立会话,频道里出现该 uid(其他端收到 user-published);
  3. 你可以在 online-streams 里看到 sid,必要时 mute 或 DELETE;
  4. 推流结束后会话消失;streamkey 到期或主动 DELETE 后不能再推。

与 Media Push 的区别

Media Gateway(ingress)Media Push(egress)
方向外部流 → 频道频道 → RTMP 地址
典型场景OBS 推流进会议/直播频道内容推到 CDN
资源streamkey / template / online-streamconverter

两者可以组合:OBS 推流进频道(Gateway)→ 合流后再推到 CDN(Push)。

配额与错误

场景返回
服务未开通403 service_not_enabled
流模板超过 10 个429 streaming_quota_exceeded(at most 10 templates can exist under one app id)
streamkey 过期后推流网关拒绝握手(该 sid 不会出现在 online-streams)
同一个 uid 重复推流由媒体面仲裁:后到的连接会替换先到的,旧 sid 失效;控制面只反映真实会话
模板维度非法400 validation,字段级错误在 details

端到端示例

bash
node 文档站 class="tok-flag">-all.mjs --only=20

20-media-gateway-lifecycle.mjs:appconfig → 建模板 → 建 streamkey → 查 streamkey → 查在线流 → 删 streamkey → 删模板(写操作,需要 --all)。

本页由文档构建流水线生成 · 2026-10-31 01:24:02 UTC · 文档中心 v1.1.0.

内容依据公开 API 定义.

ni-meet 是自建 RTC PaaS,媒体面基于 LiveKit(Apache-2.0),并与声网 API 兼容。