实时预览接口
创建或复用预览流
http
POST /v1/source/streams
Content-Type: application/jsonjson
{ "resourceToken": "<resource-token>" }同一资源已有活动流时返回同一会话,不创建第二个 streamToken。
HTTP 201 响应:
json
{
"streamToken": "<stream-token>",
"resourceToken": "<resource-token>",
"expiresIn": 1800,
"streamUrl": "/v1/source/stream/<stream-token>"
}流的有效期不会超过关联资源的剩余 TTL。
订阅预览流
http
GET /v1/source/stream/{streamToken}响应头:
http
Content-Type: multipart/x-mixed-replace; boundary=markify-frame
Cache-Control: no-store, no-cache, must-revalidate
X-Accel-Buffering: no浏览器可以直接把 URL 设为 <img src>。连接建立后立即发送当前帧,后续预览继续在同一 HTTP 响应中输出。
每个流的订阅者数量受 MAX_PREVIEW_SUBSCRIBERS_PER_STREAM 限制,达到上限返回 429 STREAM_SUBSCRIBER_LIMIT。
发布预览
http
POST /v1/source/preview
Content-Type: application/json请求体使用完整 RenderRequest。resources[] 中的每个资源都必须已经创建活动流。
HTTP 200 响应:
json
{
"revision": 7,
"updated": 2
}| 字段 | 类型 | 说明 |
|---|---|---|
revision | integer | API 进程内单调递增的成功批次版本 |
updated | integer | 本次原子更新的流数量 |
预览固定输出 image/webp、质量 80,请求中的 output 不影响预览帧。
关闭预览流
http
DELETE /v1/source/streams/{streamToken}成功返回 204 No Content 并关闭所有订阅连接。过期 token 返回 410 STREAM_EXPIRED,未知 token 返回 404 STREAM_NOT_FOUND。
并发语义
同一源资源的新预览会取消旧批次,旧请求返回 409 PREVIEW_SUPERSEDED。前端应忽略被取代请求,不要将其视为服务故障。