功能描述

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

前提条件

单流录制模式下,云端录制会将每路流的音频和视频分开录制。在同步回放前,你需要先通过音视频合并转码脚本将音频和视频合并成一个视频文件。转码步骤详见音视频文件合并。在设置转码参数时,必须将 -m 参数设置为 1,并且不设置 -s 参数。在该设置条件下,用户如果中途退出,退出的时间会以退出前最后一帧的画面呈现在录制文件里。

获取时间戳

你可以通过云端录制 RESTful API 回调来获取录制开始时的时间戳。 通过 recorder_slice_start 事件中的 startUtcMs 字段,便可获取某路流录制的开始时间(即第一个录制切片的开始时间)。该时间戳为 UTC 时间,精确到毫秒。

你需要提交工单联系技术支持开通回调服务。详情见开通回调服务

你也可以通过解析 M3U8 文件来获取录制开始时间。

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

    • 合流录制模式下,M3U8 文件名由录制 ID 和频道名组成,如 sid_cname.m3u8
    • 单流录制模式下,M3U8 文件的命名规则详见单流录制
  2. 解析 M3U8 文件,获取时间戳:每个 M3U8 文件的开头都包含该次录制的开始时间,如:

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

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

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

场景举例

单流模式

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

合流模式

假设有A、B、C、D 四个用户,先后加入同一频道。合流模式下,整个频道生成一个 M3U8 文件和多个 TS 文件,包含四个用户的所有音视频数据。因此,只需通过 RESTful API 回调或解析 M3U8 文件获取本次录制开始时的时间戳,便可以将 TS 文件和其他数据流文件按同一时间轴播放,实现同步回放。