# IRecorderVideoFrameObserver 类 (/zh-CN/api-reference/local-server-recording/cpp/irecordervideoframeobserver)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

用于处理录制器的视频帧回调。

<a id="onyuvframecaptured"></a>
## onYuvFrameCaptured [#onyuvframecaptured]

```cpp
virtual void onYuvFrameCaptured(const char* channelId, user_id_t userId, const agora::media::base::VideoFrame *frame) = 0;
```

捕获到 YUV 视频帧时触发的回调。

调用 [`enableRecorderVideoFrameCapture`](/zh-CN/api-reference/local-server-recording/cpp/iagoramediartcrecorder.cpp#enablerecordervideoframecapture) 启用视频帧采集，并将 [`VideoFrameCaptureType`](/zh-CN/api-reference/local-server-recording/cpp/enum#videoframecapturetype) 设置为 `VIDEO_FORMAT_YUV_FRAME_TYPE` 后，每次捕获到 YUV 视频帧时，都会触发该回调。

#### 参数 [#参数]

| 参数 | 数据类型 | 描述 |
| --- | --- | --- |
| `channelId` | `const char*` | 频道 ID。 |
| `userId` | `user_id_t` | 远端用户 ID。 |
| `frame` | `const agora::media::base::VideoFrame *` | 捕获的视频帧，详见 [`VideoFrame`](/zh-CN/api-reference/local-server-recording/cpp/struct#videoframe)。 |

<a id="onencodedframereceived"></a>
## onEncodedFrameReceived [#onencodedframereceived]

```cpp
virtual void onEncodedFrameReceived(const char* channelId, user_id_t userId, const uint8_t* imageBuffer, size_t length, agora::rtc::EncodedVideoFrameInfo videoEncodedFrameInfo) = 0;
```

编码后的视频帧采集回调。

当你在录制过程中调用 [`enableRecorderVideoFrameCapture`](/zh-CN/api-reference/local-server-recording/cpp/iagoramediartcrecorder.cpp#enablerecordervideoframecapture) 启用视频采集，并将 [`VideoFrameCaptureType`](/zh-CN/api-reference/local-server-recording/cpp/enum#videoframecapturetype) 设置为 `VIDEO_FORMAT_ENCODED_FRAME_TYPE` 或 `VIDEO_FORMAT_JGP_FORMAT_TYPE` 时，会触发该回调：

- 当设置为编码帧类型时，每次采集到视频帧都会触发该回调。
- 当设置为 JPG 格式类型时，该回调会按照你在 `RecorderVideoFrameCaptureConfig::jpgCaptureInternalInSec` 中设置的时间间隔触发。

你可以通过 `EncodedVideoFrameInfo::codecType` 获取帧的编码格式。

#### 参数 [#参数-1]

| 参数 | 数据类型 | 描述 |
| --- | --- | --- |
| `channelId` | `const char*` | 频道 ID。 |
| `userId` | `user_id_t` | 远端用户 ID。 |
| `imageBuffer` | `const uint8_t*` | 视频图像缓冲区指针。 |
| `length` | `size_t` | 视频图像数据的长度。 |
| `videoEncodedFrameInfo` | `agora::rtc::EncodedVideoFrameInfo` | 编码后的视频帧信息。详见 [`EncodedVideoFrameInfo`](/zh-CN/api-reference/local-server-recording/cpp/struct#encodedvideoframeinfo)。 |

<a id="onjpgfilesaved"></a>
## onJPGFileSaved [#onjpgfilesaved]

```cpp
virtual void onJPGFileSaved(const char* channelId, user_id_t userId, const char* filename) = 0;
```

捕获的 JPG 文件保存成功时触发的回调。

调用 [`enableRecorderVideoFrameCapture`](/zh-CN/api-reference/local-server-recording/cpp/iagoramediartcrecorder.cpp#enablerecordervideoframecapture) 启用视频帧采集，并将 [`VideoFrameCaptureType`](/zh-CN/api-reference/local-server-recording/cpp/enum#videoframecapturetype) 设置为 `VIDEO_FORMAT_JPG_FILE_TYPE` 后，SDK 会按照在 `RecorderVideoFrameCapturedConfig::jpgCaptureIntervalInSec` 中设置的时间间隔触发该回调。

#### 参数 [#参数-2]

| 参数 | 数据类型 | 描述 |
| --- | --- | --- |
| `channelId` | `const char*` | 频道 ID。 |
| `userId` | `user_id_t` | 远端用户 ID。 |
| `filename` | `const char*` | 保存的 JPG 文件名，格式为 `$jpgFileStorePath/channelId_userId_YYYYMMDDHHMMSS_MS.jpg`。 |
