云转码
ABR codec 模板、builderToken(5 分钟 TTL)、转码任务生命周期与更新、输出播放地址。
云转码(接口定义里 rtsc/cloud-transcoder)把频道的原始媒体转成多档自适应码率(ABR)输出,用于「一份直播、多种清晰度」的分发。它与 Media Push 的区别是:Media Push 负责把流送出去,云转码负责把流变成多档。
资源模型(容易搞混的三层)
ABR codec 模板 → 描述「有哪几档」(1080p / 720p / 480p 的编码参数)
builderToken → 一次性写入凭证,5 分钟 TTL,只能用来创建/更新任务
task → 真正跑的转码任务:输入频道 + 输出档位,有生命周期顺序不能颠倒:先有模板,再拿 builderToken,再建 task。
第一步:配置 ABR 模板
# 查询现有模板
curl -s "$NIMEET_API_BASE/v1/projects/$APP_ID/rtls/abr/config/codecs" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"
# 新建/覆盖一个档位(codecId 由你指定,例如 "720p")
curl -s -X POST "$NIMEET_API_BASE/v1/projects/$APP_ID/rtls/abr/config/codecs/720p" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H 'Content-Type: application/json' \
-d '{"enabled":true,"video":{"width":1280,"height":720,"frameRate":30,"bitrate":2000}}'请求体两项都必填:enabled(boolean)与 video(object)。codecId 是路径参数,同一个 id 重复 POST 视为覆盖。
第二步:获取 builderToken(5 分钟、单次使用)
curl -s -X POST "$NIMEET_API_BASE/v1/projects/$APP_ID/rtsc/cloud-transcoder/builderTokens" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H 'Content-Type: application/json' \
-d '{"instanceId":"transcoder-1","services":{"cloudTranscoder":{"channelName":"weekly-sync"}}}'| 字段 | 说明 |
|---|---|
instanceId | 转码实例标识(必填字符串);同一实例的多次操作共享状态 |
services | 服务配置(必填对象),cloudTranscoder 子对象里放频道、输出档位等 |
响应 tokenName | 后续操作的 builderToken 参数,只在此后 5 分钟内有效且只能成功使用一次 |
第三步:创建转码任务
curl -s -X POST "$NIMEET_API_BASE/v1/projects/$APP_ID/rtsc/cloud-transcoder/tasks?builderToken=$BUILDER_TOKEN" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H 'Content-Type: application/json' \
-d '{"instanceId":"transcoder-1","services":{"cloudTranscoder":{"channelName":"weekly-sync","outputs":["720p","480p"]}}}'响应是任务快照:taskId、createTs、status、sequenceId、services、eventHandlers、execution、properties、variables、workflows。 其中 sequenceId 用于后续更新做乐观并发。
生命周期
| 操作 | 端点 | 需要的参数 |
|---|---|---|
| 创建 | POST /v1/projects/{appId}/rtsc/cloud-transcoder/tasks | builderToken(query) |
| 查询 | GET /v1/projects/{appId}/rtsc/cloud-transcoder/tasks/{taskId} | builderToken(query) |
| 更新 | PATCH /v1/projects/{appId}/rtsc/cloud-transcoder/tasks/{taskId}(body: services) | builderToken(query) |
| 销毁 | DELETE /v1/projects/{appId}/rtsc/cloud-transcoder/tasks/{taskId} | builderToken(query) |
注意:查询也要 builderToken——这是声网云转码的设计(任务操作统一走临时凭证),不是我们的额外限制。
与其他媒体服务的关系
| 组合 | 效果 |
|---|---|
| 云转码 + Media Push | 多档输出推到 CDN,观众按网络选档 |
| 云转码 + 云端录制 | 录多档(存储与成本更高;通常只录一档) |
| Media Gateway + 云转码 | OBS 推流进频道后转多档分发 |
配额与错误
| 场景 | 返回 |
|---|---|
| 服务未开通 | 403 service_not_enabled |
| builderToken 过期 / 已用过 / 未知 | 401 invalid_token(消息:builderToken is unknown, already used or has expired) |
services.cloudTranscoder.config.transcoder 缺失 | 400 invalid_parameter(该嵌套结构是必填的) |
| 并发转码任务超限 | 429 streaming_quota_exceeded |
端到端示例
node 文档站 class="tok-flag">-all.mjs --only=2121-cloud-transcoding-lifecycle.mjs:建模板 → 申请 builderToken → 建任务 → 查询 → 销毁(写操作,需要 --all)。