# 上传模块事件 (/zh-CN/realtime-media/cloud-recording/build/implement-core-features/uploading)

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

当 payload 中的 serviceType 返回 2 时，表示该回调事件与上传模块相关。

本页介绍上传模块相关的回调事件。如果你想查看其他云端录制的相关事件，可以参考[回调事件概览](/zh-CN/realtime-media/cloud-recording/reference/ncs-events)。

上传模块回调包含如下事件：

| `eventType`     |  事件描述                                                     |
| ------------- |  ------------------------------------------------------------ |
| [`30`](#30)     |  上传服务已启动                                               |
| [`31`](#31)     |  所有录制文件已上传至指定的第三方云存储                       |
| [`32`](#32)     |  所有录制文件已经全部上传完成，但至少有一片上传到声网备份云 |
| [`33`](#33)     |  录制文件上传到第三方云存储的进度                             |
| [`45`](#45)     | 云端截图成功                                        |

<a id="30"></a>
## 30 uploader_started [#30-uploader_started]

`eventType` 为 `30` 表示上传服务已启动， `details` 中包含以下字段：

- `msgName`：String 类型，消息名称，即 `uploader_started`。
- `status`：Number 类型，事件状态，0 表示正常，其他值表示异常。

<a id="31"></a>
## 31 uploaded [#31-uploaded]

`eventType` 为 `31` 表示所有录制文件已上传至指定的第三方云存储， `details` 中包含以下字段：

- `msgName`：String 类型，消息名称，即 `uploaded`。
- `status`：Number 类型，事件状态，`0` 表示正常，其他值表示异常。
- `fileList`：JSON Array，由每个录制文件的具体信息组成的数组。
  - `fileName`：String 类型，已经上传到指定三方云存储的录制文件名。
  - `trackType`：String 类型，录制文件的类型。
    - `"audio"`：纯音频文件。
    - `"video"`：纯视频文件。
    - `"audio_and_video"`：音视频文件。
  - `uid`：String 类型，用户 ID，表示录制的是哪个用户的音频流或视频流。合流录制模式下，`uid` 为 `"0"`。
  - `mixedAllUser`：Boolean 类型，是否将所有用户合并录制。
    - `true`：所有用户合并在一个录制文件中。
    - `false`：每个用户分开录制。
  - `isPlayable`：Boolean 类型，是否可以在线播放。
    - `true`：可以在线播放。
    - `false`：无法在线播放。
  - `sliceStartTime`：Number 类型，该文件的录制开始时间，Unix 时间戳，单位为毫秒。

回调示例如下：

<Accordions>
<Accordion title="单流录制">

```json
{
  "msgName": "uploaded",
  "fileList": [
    {
      "fileName": "xxx.m3u8",
      "trackType": "audio",
      "uid": "57297",
      "mixedAllUser": false,
      "isPlayable": true,
      "sliceStartTime": 1619172871089
    },
    {
      "fileName": "xxx.m3u8",
      "trackType": "audio",
      "uid": "10230",
      "mixedAllUser": false,
      "isPlayable": true,
      "sliceStartTime": 1619172871099
    }
  ],
  "status": 0
}
```

</Accordion>

<Accordion title="合流录制且不生成 MP4">

```json
{
  "msgName": "uploaded",
  "fileList": [
    {
      "fileName": "xxx.m3u8",
      "trackType": "audio_and_video",
      "uid": "0",
      "mixedAllUser": true,
      "isPlayable": true,
      "sliceStartTime": 1619170461821
    }
  ],
  "status": 0
}
```

</Accordion>

<Accordion title="合流录制并生成 MP4">

```json
{
  "msgName": "uploaded",
  "fileList": [
    {
      "fileName": "xxx.mp4",
      "trackType": "audio_and_video",
      "uid": "0",
      "mixedAllUser": true,
      "isPlayable": true,
      "sliceStartTime": 1619172632080
    },
    {
      "fileName": "xxx.m3u8",
      "trackType": "audio_and_video",
      "uid": "0",
      "mixedAllUser": true,
      "isPlayable": true,
      "sliceStartTime": 1619172632080
    }
  ],
  "status": 0
}
```

</Accordion>

<Accordion title="页面录制并生成 MP4">

```json
{
  "msgName": "uploaded",
  "status": 0
}
```

</Accordion>
</Accordions>

<a id="32"></a>
## 32 backuped [#32-backuped]

`eventType` 为 `32` 表示所有录制文件已经全部上传完成，但至少有一片上传到声网备份云，声网备份云会自动将这部分文件上传到指定的第三方云存储。 `details` 中包含以下字段：

- `msgName`：String 类型，消息名称，即 `backuped`。
- `status`：Number 类型，事件状态，0 表示正常，其他值表示异常。
- `fileList`：JSON Array，由每个录制文件的具体信息组成的数组。
  - `fileName`：String 类型，已经上传到指定三方云存储的录制文件名。
  - `trackType`：String 类型，录制文件的类型。
    - `"audio"`：纯音频文件。
    - `"video"`：纯视频文件。
    - `"audio_and_video"`：音视频文件。
  - `uid`：String 类型，用户 ID，表示录制的是哪个用户的音频流或视频流。合流录制模式下，`uid` 为 `"0"`。
  - `mixedAllUser`：Boolean 类型，是否将所有用户合并录制。
    - `true`：所有用户合并在一个录制文件中。
    - `false`：每个用户分开录制。
  - `isPlayable`：Boolean 类型，是否可以在线播放。
    - `true`：可以在线播放。
    - `false`：无法在线播放。
  - `sliceStartTime`：Number 类型，该文件的录制开始时间，Unix 时间戳，单位为毫秒。

回调示例如下：

<Accordions>
<Accordion title="单流录制">

```json
{
  "msgName": "backuped",
  "fileList": [
    {
      "fileName": "xxx.m3u8",
      "trackType": "audio",
      "uid": "57297",
      "mixedAllUser": false,
      "isPlayable": true,
      "sliceStartTime": 1619172871089
    },
    {
      "fileName": "xxx.m3u8",
      "trackType": "audio",
      "uid": "10230",
      "mixedAllUser": false,
      "isPlayable": true,
      "sliceStartTime": 1619172871099
    }
  ],
  "status": 0
}
```

</Accordion>

<Accordion title="合流录制且不生成 MP4">

```json
{
  "msgName": "backuped",
  "fileList": [
    {
      "fileName": "xxx.m3u8",
      "trackType": "audio_and_video",
      "uid": "0",
      "mixedAllUser": true,
      "isPlayable": true,
      "sliceStartTime": 1619170461821
    }
  ],
  "status": 0
}
```

</Accordion>

<Accordion title="合流录制并生成 MP4">

```json
{
  "msgName": "backuped",
  "fileList": [
    {
      "fileName": "xxx.mp4",
      "trackType": "audio_and_video",
      "uid": "0",
      "mixedAllUser": true,
      "isPlayable": true,
      "sliceStartTime": 1619172632080
    },
    {
      "fileName": "xxx.m3u8",
      "trackType": "audio_and_video",
      "uid": "0",
      "mixedAllUser": true,
      "isPlayable": true,
      "sliceStartTime": 1619172632080
    }
  ],
  "status": 0
}
```

</Accordion>

<Accordion title="页面录制并生成 MP4">

```json
{
  "msgName": "backuped",
  "status": 0
}

```

</Accordion>
</Accordions>

<a id="33"></a>
## 33 uploading_progress [#33-uploading_progress]

`eventType` 为 `33` 表示当前上传的进度，录制开始后每分钟会通知一次。 `details` 中包含以下字段：

- `msgName`：String 类型，消息名称，即 `uploading_progress`。
- `progress`：Number 类型，0 到 10000 之间的数字，当前已上传文件与已录制的文件的比例乘以 10000。这个数字是不断变动的，录制退出后，到达 10000 表示上传完成。

<a id="45"></a>
## 45 recorder_snapshot_file [#45-recorder_snapshot_file]

`eventType` 为 `45` 表示云端截图成功并上传至第三方云存储，`details` 中包含以下字段：

- `msgName`：String 类型，消息名称，即 `recorder_snapshot_file`。
- `fileName`: String 类型，截图生成的 JPG 文件的文件名。格式为：`"fileName": "<fileNamePrefix>/<file name>"`。其中 `fileNamePrefix` 指截图文件在第三方云存储中的存储位置。
