> This page is for Camera to Cloud.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://next.developer.frame.io/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://next.developer.frame.io/_mcp/server.

# 操作指南：实时记录素材

## 前言




实时记录功能允许设备在现场录制媒体文件的同时，在数据被注册到 Frame.io 之前，针对同一项目中任何设备生成的任何 C2C 资产，记录评论、资产状态以及其他数据。





想象一下这样的场景：导演在视频 Village 观看画面时，每当演员表现出色就能按下一个按钮来标记；或者使用智能场记板，能在所有资产上标记拍板点。





## 我需要准备什么？

如果您还未阅读[实施 C2C：设置](./implementing-c2c-setting-up)指南，请先快速浏览一下再继续操作！ 您需要用到在硬件设备或 C2C 应用程序身份验证和授权指南中收到的 `access_token`。

## 时间码要求

为了将实时记录事件与资产对应，我们希望被拍摄的资产以及用于记录的设备都能实现[时间码同步 (jam-syned) 或锁相同步 (gen-locked)](https://www.bhphotovideo.com/explora/video/tips-and-solutions/timecode-versus-sync-how-they-differ-and-why-it-matters)。 录音设备和日志记录设备随后都需要负责将时间码发送到我们的后端，然后我们会在后端进行时间码同步操作，以便将记录事件与正确的帧对齐。

## 设置您的输入配置





实时记录功能基于数据模型中的一个新概念：输入。 一个输入代表您设备上的一个物理按钮，可以将其配置为向 Frame.io 发送数据。 您首先需要确定允许执行此类操作的按钮数量，然后为每个按钮分配一个索引，从 0 开始。 当事件发送到我们的服务器时，这个索引将用来识别哪个按钮被按下了。 输入直接隶属于通道，因此每条按钮按下的消息都需要指向特定的通道端点。 有关通道的更多信息，请参阅 [通道管理指南]。





每个按钮的功能配置由用户通过 Frame.io 的用户界面来处理，这样可以让集成尽可能简单。 除了能够将一个按钮分配为“Frame.io 操作”之外（如果您的按钮/触发器等其他控件是可配置的），您这边不需要提供任何特殊的 UI 支持。





我们将与您合作，为您设备的每个输入确定以下配置：



* 索引：一个从 0 开始索引的整数，用于标识输入项。
* 显示名称：将在 Frame.io 配置界面中向用户显示的输入名称。
* 支持的操作：目前唯一的操作类型是“单次按下”，但将来我们可能会增加其他操作类型，如“长按”或“双击”，以允许每个输入支持多种操作，每个操作都有不同的含义。
* 按钮颜色：如果您的按钮具有关联的颜色，我们可以显示该颜色，以帮助用户在配置设备输入设置时进行识别。
* 默认事件类型：此输入默认生成的事件类型：

- 评论：此输入生成一条评论

- 状态：此输入更新资产的状态



* 默认评论文本：此输入生成的评论所使用的默认文本
* 默认状态：当此输入用于状态时，更新资产时所使用的默认状态。 可选值包括：

- `in_progress` - `needs_review` - `approved`

通过提前提供这些信息，我们将对您实际设备的要求降到最低。





## 发送实时记录事件





实时记录事件可以通过以下调用方式发送





```shell
{
curl -X POST https://api.frame.io/v2/devices/channels/{channel_id}/inputs/{input_index}/trigger \
    --header 'Authorization: Bearer [access_token]' \
    --header 'Content-Type: application/json' \
    --header 'x-client-version: 2.0.0' \
    --data-binary @- <<'__JSON__'
        {
            "action_type": "single_press",
            "offset": 0,
            "start": {
                "smpte_timecode": "01:00:00:00",
                "rate": {
                    "playback": [24_000, 1001],
                    "ntsc": "non_drop"
                }
            },
            "duration": {
                "smpte_timecode": "00:00:00:01",
                "rate": {
                    "playback": [24_000, 1001],
                    "ntsc": "non_drop"
                }
            }
       }
__JSON__
} | python -m json.tool
```

成功时，您将收到一个负载为空的 `204` 响应。 **URL 参数**
* `channel_id`：此输入注册到的通道的 UUID。 此 ID 可以通过[创建通道](link)调用或从 [identity 端点](/camera-to-cloud/how-to-heartbeats-connection-info-and-status#fetching-connection-information)中获取。
* `input_index`：发起调用的输入的索引

**JSON 请求体**
* `action_type`：要执行的操作类型。 目前唯一支持的操作是 `single_press`。
* `offset`：从资产起始点开始计算的时间偏移量，用于记录事件发生的位置。
* `start`：起始时间，由触发输入时的 [SMPTE 时间码](https://workflow.frame.io/guide/timecode) + 帧速率表示。

- `smpte_timecode`：以 SMPTE 字符串表示的时间码。 - `rate`：时间码流的帧速率。 - `playback`：帧速率的播放速度，以数组形式表示为 `[numerator, denominator]` 对。 （可选）此字段也可接受字符串格式的分数，`&quot;numerator/denominator&quot;`。 对于像 23.98 这样的 NTSC 帧速率，应以其完整的有理数值形式发送：[`24000, 1001`]。 - `ntsc`：时间码的 NTSC 标准。 可以是 &quot;`non_drop&quot;` 或 `null`。 如果为 `null`，则 `playback` 必须表示为一个整数值，例如 `[24, 1]`。 如果为 `&quot;non_drop&quot;`，则 `playback` 必须表示为一个有效的 NTSC 帧速率，例如 `[24000, 1001]`。
* `duration`：事件的时长，由触发输入时的 [SMPTE 时间码](https://workflow.frame.io/guide/timecode) + 帧速率表示。 符合与 `start` 相同的对象定义。 对于 `single_press` 事件，时长必须正好为 1 帧（`&quot;01:00:00:00&quot;`）。




## 可靠性要求

实时上传触发事件必须遵循与上传相同的[可靠性准则](/camera-to-cloud/how-to-advanced-uploads#h2-section-uploading-reliably)，并尊重[设备的暂停状态](/camera-to-cloud/how-to-advanced-uploads#h3-section-offset---handling-paused-devices)。

## 下一步





如果您还没有联系我们的团队，我们鼓励您这样做，然后继续阅读下一份指南。 我们期待收到您的回复！