# 同步回放 (/zh-CN/realtime-media/cloud-recording/build/manage-recorded-files/playback)

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

不少教育应用需要将录制的视频与其他数据流文件（白板、课件、课堂聊天记录等）同步回放，从而还原真实通话场景。你可以通过云端录制提供的录制开始时的时间戳，将录制的视频与其他数据流文件同步回放。

## 前提条件 [#前提条件]

使用同步回放功能前，需要满足以下条件：

- 如果使用的单流录制模式，则需要先通过音视频合并转码脚本将音频和视频合并成一个视频文件。转码步骤请参考[转换单流录制文件](/zh-CN/realtime-media/cloud-recording/build/manage-recorded-files/convert-format#转换单流录制文件)。

- 如果你希望通过云端录制回调时间来获取录制开始的时间戳，还需要参考[接收 Webhook 事件](/zh-CN/realtime-media/cloud-recording/build/monitor-events/enable-ncs)开启消息通知服务。

## 实现同步回放 [#实现同步回放]

### 获取时间戳 [#获取时间戳]

你可以通过云端录制回调或解析录制生成的 M3U8 文件来获取录制开始的时间戳。

<Tabs defaultValue="ncs" groupId="get-timestamp" persist>
<TabsList>
  <TabsTrigger value="ncs">通过云端录制回调</TabsTrigger>
  <TabsTrigger value="m3u8">通过解析 M3U8 文件</TabsTrigger>
</TabsList>

<TabsContent value="ncs">

开通消息通知服务后，你可以通过 `recorder_slice_start` 事件中的 `startUtcMs` 字段，获取某路流录制的开始时间（即第一个录制切片的开始时间）。该时间戳为 UTC 时间，精确到毫秒。

</TabsContent>

<TabsContent value="m3u8">

参考如下步骤解析录制生成的 M3U8 文件来获取录制开始时间。

1. 获取 M3U8 文件：你需要在第三方云存储的录制文件存储位置中找到 M3U8 文件。通过文件的命名规则，可以找到本次录制对应的 M3U8 文件。

   - 合流录制模式和页面录制模式下，M3U8 文件名都由录制 ID 和频道名组成，如 `sid_cname.m3u8`。
   - 单流录制模式下，M3U8 文件的命名规则详见[单流录制](/zh-CN/realtime-media/cloud-recording/build/manage-recorded-files/introduce-recorded-files#单流录制模式)。

2. 解析 M3U8 文件，获取时间戳：每个 M3U8 文件的开头都包含该次录制的开始时间，如：

    ```shell
    #EXT-X-AGORA-TRACK-EVENT:EVENT=START,TRACK_TYPE=AUDIO,TIME=1568597779021
    ```

其中 `TRACK_TYPE` 表示该次录制的类型，`TIME` 值即为该路流开始录制的时间。`TIME` 为 Unix 时间戳，单位为 ms。如果用户在录制过程中退出并重新加入，M3U8 文件中会可能会出现多个时间戳。在此种情况下，第一次出现的 TIME 值为本次录制的开始时间。

如果单流录制中同一个 UID 的音频和视频开始时间不一致，则取两个时间中较早的时间作为本次录制开始时间。

</TabsContent>
</Tabs>

### 回放文件 [#回放文件]

**单流模式**

假设有 A、B、C、D 四个用户先后加入同一频道。单流模式下，每个 UID 生成两个 M3U8 文件和多个 TS/WebM 文件。通过音视频合并转码脚本转码后，每个 UID 生成一个 MP4 文件。通过 RESTful API 回调或解析 M3U8 文件可获取每个 UID 对应的音视频流开始录制时的时间戳。通过将这四个 MP4 文件与其他数据流文件按同一时间轴播放，便可实现同步回放。

**合流模式**

假设有 A、B、C、D 四个用户先后加入同一频道。合流模式下，整个频道生成一个 M3U8 文件和多个 TS 文件，包含四个用户的所有音视频数据。若在开始录制时将 `avFileType` 设为 `["hls","mp4"]`，录制服务会在录制结束后将 TS 合并转码为一个或多个 MP4 文件（命名规则：`<sid>_<cname>_<index>.mp4`；单文件时长约 3 小时或大小约 2 GB 时会切分为新文件）。你也可使用转码脚本将 TS 转为 MP4。通过云端录制回调或解析 M3U8 获取本次录制开始的时间戳后，将 TS 或 MP4 与其他数据流文件按同一时间轴播放，即可实现同步回放。

**页面模式**

页面模式下，录制的是指定网页的页面内容与音频（整页画面、白板、课件等），生成一个 M3U8 文件和多个 TS 文件。若在开始录制时将 `avFileType` 设为 `["hls","mp4"]`，录制服务会在录制结束后将 TS 合并转码为 MP4 文件（命名规则：`<sid>_<cname>_<index>.mp4`；单文件时长默认约 3 小时或大小约 2 GB 时会切分为新文件；配置了 `maxVideoDuration` 时以配置值为准）。你也可使用转码脚本将 TS 转为 MP4。通过云端录制回调或解析 M3U8 获取本次录制开始的时间戳后，将 TS 或 MP4 与其他数据流文件按同一时间轴播放，即可实现同步回放。
