同步回放
不少教育应用需要将录制的视频与其他数据流文件(白板、课件、课堂聊天记录等)同步回放,从而还原真实通话场景。你可以通过云端录制提供的录制开始时的时间戳,将录制的视频与其他数据流文件同步回放。
前提条件
使用同步回放功能前,需要满足以下条件:
-
如果使用的单流录制模式,则需要先通过音视频合并转码脚本将音频和视频合并成一个视频文件。转码步骤详见转换单流录制文件。在设置转码字段时,必须将
-m
字段设置为1
,并且不设置-s
字段。在该设置条件下,如果用户中途退出频道,则该用户退出时间段的视频画面会呈现其退出前最后一帧的画面。 -
如果你希望通过云端录制回调时间来获取录制开始的时间戳,还需要参考接收 Webhook 事件开启消息通知服务。
实现同步回放
获取时间戳
你可以通过云端录制回调或解析录制生成的 M3U8 文件来获取录制开始的时间戳。
- 通过云端录制回调
- 通过解析 M3U8 文件
开通消息通知服务后,你可以通过 recorder_slice_start
事件中的 startUtcMs
字段,获取某路流录制的开始时间(即第一个录制切片的开始时间)。该时间戳为 UTC 时间,精确到毫秒。
参考如下步骤解析录制生成的 M3U8 文件来获取录制开始时间。
-
获取 M3U8 文件:你需要在第三方云存储的录制文件存储位置中找到 M3U8 文件。通过文件的命名规则,可以找到本次录制对应的 M3U8 文件。
- 合流录制模式下,M3U8 文件名由录制 ID 和频道名组成,如
sid_cname.m3u8
。 - 单流录制模式下,M3U8 文件的命名规则详见单流录制。
- 合流录制模式下,M3U8 文件名由录制 ID 和频道名组成,如
-
解析 M3U8 文件,获取时间戳:每个 M3U8 文件的开头都包含该次录制的开始时间,如:
Shell#EXT-X-AGORA-TRACK-EVENT:EVENT=START,TRACK_TYPE=AUDIO,TIME=1568597779021
其中 TRACK_TYPE
表示该次录制的类型,TIME
值即为该路流开始录制的时间。TIME
为 Unix 时间戳,单位为 ms。如果用户在录制过程中退出并重新加入,M3U8 文件中会可能会出现多个时间戳。在此种情况下,第一次出现的 TIME 值为本次录制的开始时间。
如果单流录制中同一个 UID 的音频和视频开始时间不一致,则取两个时间中较早的时间作为本次录制开始时间。
回放文件
1. 单流模式
假设有 A、B、C、D 四个用户,先后加入同一频道。单流模式下,每个 UID 生成两个 M3U8 文件和多个 TS/WebM 文件。通过音视频合并转码脚本转码后,每个 UID 生成一个 MP4 文件。通过 RESTful API 回调或解析 M3U8 文件可获取每个 UID 对应的音视频流开始录制时的时间戳。通过将这四个 MP4 文件与其他数据流文件按同一时间轴播放,便可实现同步回放。
2. 合流模式
假设有 A、B、C、D 四个用户,先后加入同一频道。合流模式下,整个频道生成一个 M3U8 文件和多个 TS 文件,包含四个用户的所有音视频数据。因此,只需通过 RESTful API 回调或解析 M3U8 文件获取本次录制开始时的时间戳,便可以将 TS 文件和其他数据流文件按同一时间轴播放,实现同步回放。