Canvas 视频布局状态
构建时从公开 REST 接口定义的 `canvas` 标签生成:方法、路径、参数、请求体、响应与 curl。
分组概览
本页由公开 REST 接口定义在构建时生成:标签 canvas,共 9 个操作(全量 230 个)。鉴权、信封与分页约定见 REST API 总览.
| 方法 | 路径 | 摘要 |
|---|---|---|
GET | /v1/canvas/canvases | List canvases |
POST | /v1/canvas/canvases | Create a canvas |
GET | /v1/canvas/canvases/{canvasId} | Read a canvas with its views |
DELETE | /v1/canvas/canvases/{canvasId} | Destroy a canvas |
PATCH | /v1/canvas/canvases/{canvasId}/config | Set canvas configs |
GET | /v1/canvas/canvases/{canvasId}/views | List canvas views |
POST | /v1/canvas/canvases/{canvasId}/views | Add a view |
PATCH | /v1/canvas/canvases/{canvasId}/views/{uid} | Update one view |
DELETE | /v1/canvas/canvases/{canvasId}/views/{uid} | Remove a view |
操作详情
GET /v1/canvas/canvases
List canvases
鉴权:项目凭证(customerId:customerSecret 的 Base64)
参数
| 名称 | 位置 | 必填 | 类型 | 说明 |
|---|---|---|---|---|
channelName | query | string | ||
state | query | enum(active | destroyed) |
响应
| 状态码 | 说明 / schema |
|---|---|
200 | OK — object{ canvases } |
400 | Invalid parameter — Error |
调用示例
curl -s -X GET "$NIMEET_API_BASE/v1/canvas/canvases?channelName=weekly-sync&state=running" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"POST /v1/canvas/canvases
Create a canvas
One active canvas per (project, channel, ownerUid); a duplicate answers canvas_conflict with the existing canvasId. Owner null (or omitted) means a channel-wide shared layout.
鉴权:项目凭证(customerId:customerSecret 的 Base64)
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
channelName | string | 是 | pattern ^[A-Za-z0-9_-]{1,128}$ |
ownerUid | integer | null | 1..2147483647 | |
videoRenderMode | enum(hidden | fit | adaptive) | ||
videoMirrorMode | enum(auto | enabled | disabled) | ||
backgroundColor | string |
{
"channelName": "weekly-sync",
"ownerUid": 1,
"videoRenderMode": "hidden"
}响应
| 状态码 | 说明 / schema |
|---|---|
201 | OK — CanvasDetail |
400 | Invalid parameter — Error |
409 | Canvas already exists (canvas_conflict) — Error |
调用示例
curl -s -X POST "$NIMEET_API_BASE/v1/canvas/canvases" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"channelName":"weekly-sync","ownerUid":1,"videoRenderMode":"hidden"}'GET /v1/canvas/canvases/{canvasId}
Read a canvas with its views
鉴权:项目凭证(customerId:customerSecret 的 Base64)
参数
| 名称 | 位置 | 必填 | 类型 | 说明 |
|---|---|---|---|---|
canvasId | path | 是 | string |
响应
| 状态码 | 说明 / schema |
|---|---|
200 | OK — CanvasDetail |
404 | Unknown canvas (canvas_not_found) — Error |
调用示例
curl -s -X GET "$NIMEET_API_BASE/v1/canvas/canvases/canvasId" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"DELETE /v1/canvas/canvases/{canvasId}
Destroy a canvas
Moves the canvas to destroyed. The layout stays readable for forensics, but every write afterwards answers canvas_destroyed.
鉴权:项目凭证(customerId:customerSecret 的 Base64)
参数
| 名称 | 位置 | 必填 | 类型 | 说明 |
|---|---|---|---|---|
canvasId | path | 是 | string |
响应
| 状态码 | 说明 / schema |
|---|---|
200 | OK — CanvasRecord |
404 | Unknown canvas (canvas_not_found) — Error |
409 | Canvas already destroyed (canvas_destroyed) — Error |
调用示例
curl -s -X DELETE "$NIMEET_API_BASE/v1/canvas/canvases/canvasId" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"PATCH /v1/canvas/canvases/{canvasId}/config
Set canvas configs
Agora setConfigs / setVideoRenderMode / setVideoMirrorMode. At least one field is required.
鉴权:项目凭证(customerId:customerSecret 的 Base64)
参数
| 名称 | 位置 | 必填 | 类型 | 说明 |
|---|---|---|---|---|
canvasId | path | 是 | string |
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
videoRenderMode | enum(hidden | fit | adaptive) | ||
videoMirrorMode | enum(auto | enabled | disabled) | ||
backgroundColor | string |
{
"videoRenderMode": "hidden",
"videoMirrorMode": "auto",
"backgroundColor": "string"
}响应
| 状态码 | 说明 / schema |
|---|---|
200 | OK — CanvasDetail |
400 | Invalid parameter — Error |
404 | Unknown canvas (canvas_not_found) — Error |
409 | Canvas is destroyed (canvas_destroyed) — Error |
调用示例
curl -s -X PATCH "$NIMEET_API_BASE/v1/canvas/canvases/canvasId/config" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"videoRenderMode":"hidden","videoMirrorMode":"auto","backgroundColor":"string"}'GET /v1/canvas/canvases/{canvasId}/views
List canvas views
鉴权:项目凭证(customerId:customerSecret 的 Base64)
参数
| 名称 | 位置 | 必填 | 类型 | 说明 |
|---|---|---|---|---|
canvasId | path | 是 | string |
响应
| 状态码 | 说明 / schema |
|---|---|
200 | OK — object{ count, views } |
404 | Unknown canvas (canvas_not_found) — Error |
调用示例
curl -s -X GET "$NIMEET_API_BASE/v1/canvas/canvases/canvasId/views" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"POST /v1/canvas/canvases/{canvasId}/views
Add a view
Agora addView(ViewInfo). Re-adding the same uid replaces the existing view (setupMode=replace), matching the SDK ViewInfo set semantics.
鉴权:项目凭证(customerId:customerSecret 的 Base64)
参数
| 名称 | 位置 | 必填 | 类型 | 说明 |
|---|---|---|---|---|
canvasId | path | 是 | string |
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
uid | integer | 是 | 1..2147483647 |
subviewUid | integer | null | 1..2147483647 | |
videoRenderMode | enum(hidden | fit | adaptive) | ||
videoMirrorMode | enum(auto | enabled | disabled) | ||
sourceType | enum(video | screen | mediaPlayer) | ||
mediaPlayerId | integer | null | 0..9999 | |
position | object{ x, y, width, height, zOrder } | ||
backgroundColor | string |
{
"uid": 1,
"subviewUid": 1,
"videoRenderMode": "hidden"
}响应
| 状态码 | 说明 / schema |
|---|---|
201 | OK — CanvasView |
400 | Invalid parameter — Error |
404 | Unknown canvas (canvas_not_found) — Error |
409 | Canvas is destroyed (canvas_destroyed) — Error |
调用示例
curl -s -X POST "$NIMEET_API_BASE/v1/canvas/canvases/canvasId/views" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"uid":1,"subviewUid":1,"videoRenderMode":"hidden"}'PATCH /v1/canvas/canvases/{canvasId}/views/{uid}
Update one view
Agora setViewConfig (the replace branch of addView:config:).
鉴权:项目凭证(customerId:customerSecret 的 Base64)
参数
| 名称 | 位置 | 必填 | 类型 | 说明 |
|---|---|---|---|---|
canvasId | path | 是 | string | |
uid | path | 是 | integer | 1..2147483647 |
请求体
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
subviewUid | integer | null | 1..2147483647 | |
videoRenderMode | enum(hidden | fit | adaptive) | ||
videoMirrorMode | enum(auto | enabled | disabled) | ||
sourceType | enum(video | screen | mediaPlayer) | ||
mediaPlayerId | integer | null | 0..9999 | |
position | object{ x, y, width, height, zOrder } | ||
backgroundColor | string |
{
"subviewUid": 1,
"videoRenderMode": "hidden",
"videoMirrorMode": "auto"
}响应
| 状态码 | 说明 / schema |
|---|---|
200 | OK — CanvasView |
400 | Invalid parameter — Error |
404 | Unknown canvas or view (canvas_view_not_found) — Error |
409 | Canvas is destroyed (canvas_destroyed) — Error |
调用示例
curl -s -X PATCH "$NIMEET_API_BASE/v1/canvas/canvases/canvasId/views/10001" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC" \
-H "Content-Type: application/json" \
-d '{"subviewUid":1,"videoRenderMode":"hidden","videoMirrorMode":"auto"}'DELETE /v1/canvas/canvases/{canvasId}/views/{uid}
Remove a view
Agora removeView(ViewInfo). Removing an absent view is a 404, not a silent success.
鉴权:项目凭证(customerId:customerSecret 的 Base64)
参数
| 名称 | 位置 | 必填 | 类型 | 说明 |
|---|---|---|---|---|
canvasId | path | 是 | string | |
uid | path | 是 | integer | 1..2147483647 |
响应
| 状态码 | 说明 / schema |
|---|---|
204 | view removed |
404 | Unknown canvas or view (canvas_view_not_found) — Error |
409 | Canvas is destroyed (canvas_destroyed) — Error |
调用示例
curl -s -X DELETE "$NIMEET_API_BASE/v1/canvas/canvases/canvasId/views/10001" \
-H "Authorization: Basic $NIMEET_CUSTOMER_BASIC"本分组用到的 Schema
CanvasConfig — object{ videoRenderMode, videoMirrorMode, backgroundColor, renderModeCode, mirrorModeCode }
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
videoRenderMode | enum(hidden | fit | adaptive) | 是 | |
videoMirrorMode | enum(auto | enabled | disabled) | 是 | |
backgroundColor | string | 是 | |
renderModeCode | integer | 是 | Agora numeric code: hidden=1, fit=2, adaptive=3. |
mirrorModeCode | integer | 是 | Agora numeric code: auto=0, enabled=1, disabled=2. |
CanvasDetail — object
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
canvasId | string | 是 | |
projectId | string | ||
channelName | string | 是 | |
ownerUid | integer | null | ||
state | enum(active | destroyed) | 是 | |
config | object{ videoRenderMode, videoMirrorMode, backgroundColor, renderModeCode, mirrorModeCode } | 是 | |
viewCount | integer | >= 0 | |
views | array<object> | 是 | |
createdAt | string | format date-time | |
updatedAt | string | format date-time | |
destroyedAt | string | null | format date-time |
CanvasPosition — object{ x, y, width, height, zOrder }
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
x | number | 是 | |
y | number | 是 | |
width | number | 是 | |
height | number | 是 | |
zOrder | integer | 是 |
CanvasRecord — object
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
canvasId | string | 是 | |
projectId | string | 是 | |
channelName | string | 是 | |
ownerUid | integer | null | ||
state | enum(active | destroyed) | 是 | |
config | object{ videoRenderMode, videoMirrorMode, backgroundColor, renderModeCode, mirrorModeCode } | 是 | |
viewCount | integer | 是 | >= 0 |
createdAt | string | format date-time | |
updatedAt | string | format date-time | |
destroyedAt | string | null | format date-time |
CanvasView — object
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
uid | integer | 是 | >= 1 |
subviewUid | integer | null | ||
renderMode | enum(hidden | fit | adaptive) | 是 | |
mirrorMode | enum(auto | enabled | disabled) | 是 | |
renderModeCode | integer | ||
mirrorModeCode | integer | ||
sourceType | enum(video | screen | mediaPlayer) | 是 | |
mediaPlayerId | integer | null | ||
position | object{ x, y, width, height, zOrder } | 是 | |
backgroundColor | string | null | ||
setupMode | enum(add | replace) | 是 | |
updatedAt | string | 是 | format date-time |
Error — object{ code, message, reason, sdkCode, details }
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
code | string | 是 | stable machine code, see errors.json |
message | string | 是 | |
reason | string | ||
sdkCode | integer | Agora-aligned client error number | |
details | object |