管理录制文件

最近更新时间:2023-08-15 05:57:36

功能描述

云端录制生成的录制文件包括 M3U8 索引文件、TS 切片文件和 MP4 文件。如果要对录制文件进行进一步处理,你需要了解录制文件的命名规则、文件格式以及切片规则。

录制文件命名规则

单流模式

单流模式下,云端录制生成的录制文件的命名规则如下:

M3U8 文件名:<sid>_<cname>__uid_s_<uid>__uid_e_<type>.m3u8

TS 文件名:<sid>_<cname>__uid_s_<uid>__uid_e_<type>_utc.ts

MP4 文件名:<sid>_<cname>__uid_s_<uid>__uid_e_<type>.mp4

上述文件名中各字段含义如下:

  • <sid>:录制 ID
  • <cname>:频道名
  • <uid>:用户 ID
  • <type>: 文件类型,audiovideo
  • <utc>:该切片文件开始录制时的 UTC 时间,时区为 UTC+0,由年、月、日、小时、分钟、秒和毫秒组成。例如,utc 等于 20210331073246875,表示该切片文件的开始时间为 UTC 2021 年 3 月 31 日 7 点 32 分 46 秒 875 毫秒。

示例文件名 sid123456789520_cname__uid_s_123__uid_e_video_20210331073246875.ts 中,sid123456789520 为录制 ID,cname 为频道名,123 为用户 ID,录制时间为 2021 年 3 月 31 日 7 点 32 分 46 秒 875 毫秒。

合流模式

合流模式下,云端录制生成的录制文件的命名规则如下:

  • M3U8 文件名:<sid>_<cname>.m3u8
  • TS 文件名:<sid>_<cname>_<utc>.ts
  • MP4 文件名:<sid>_<cname>.mp4

上述文件名中各字段含义如下:

  • <sid>:录制 ID
  • <cname>:频道名
  • <utc>:该切片文件开始录制时的 UTC 时间,时区为 UTC+0,由年、月、日、小时、分钟、秒和毫秒组成。例如 20210331073246875 表示该切片文件的开始时间为 UTC 2021 年 3 月 31 日 7 点 32 分 46 秒 875 毫秒。

只有当你在 avFileType中设置了 "mp4" 时,才会生成 MP4 文件。

异常状况下的录制文件名

上传云存储失败

如果录制文件上传到你指定的云存储失败,云端录制会将文件通过备份云转存至你指定的云存储。为确保不覆盖最新版本,M3U8 文件名会附上后缀 _<tick>_<index>

  • tick:与该 M3U8 文件生成时的时间相关。
  • index:该 M3U8 文件的索引数。0 表示第一次更新。index 越大,M3U8 文件的版本越新。

以文件名 sid123456789520_cnamear__uid_s_123__uid_e_video_12345678910_3.m3u8 为例,3 为该 M3U8 文件的索引数,表示该文件为第四次更新后的 M3U8 文件。

当云存储中存在带有 _<tick>_<index> 后缀的 M3U8 文件,你需要将 index 最大的 M3U8 文件与无后缀的 M3U8 文件对比,选择内容较多的一个,作为最终使用的 M3U8 文件。

通过备份云转存的 TS 文件以及 MP4 文件的文件名不会附上该后缀。

服务器断网或进程被杀

当出现服务器断网、进程被杀时,系统自动启用高可用机制,在 90 秒内切换到新的服务器并恢复录制服务。启用高可用机制后,会生成新的 M3U8 文件,包含录制服务恢复之后的切片文件索引信息。文件名增加 bak<n> 前缀,n 为高可用机制在该次录制中被启用的 index, 0 表示第一次启用。

以文件名 bak0_sid123456789520_cnamear.m3u8 为例,bak0 表示该文件为本次录制中第一次启用高可用机制后生成的 M3U8 文件。

启用高可用机制后,录制生成的 TS 文件以及 MP4 文件的文件名也会增加 bak<n> 前缀。

录制文件大小

单流模式下,录制文件大小主要与音视频源的码率和录制时长相关。例如,当音频码率为 48 Kbps,视频码率为 500 Kbps,录制文件时长为 30 分钟时,该录制文件的大小约为 (48 Kbps + 500 Kbps) * 60 s/min * 30 min = 986.4 Mbit,即 123.3 MB。

合流模式下,录制文件大小主要与转码设置中的码率和录制时长相关,如果你未进行转码设置,则使用默认值。例如,当你在 start 方法中设置 audioProfile 为 1 (音频码率 128 Kbps),设置 bitrate (视频码率)为 800,录制文件时长为 30 分钟时,该文件的大小约为 (128 Kbps + 800 Kbps) * 60 s/min * 30 min = 1670.4 Mbit,即 208.8 MB。

M3U8 文件

M3U8 文件包含多个切片文件的文件名及其描述符。anyRTC 云端录制产生的 M3U8 文件中用到的描述符有三种:

  • #EXT-X-AR-TRACK-EVENT:EVENT=<event>,TRACK_TYPE=<type>,TIME=<utc>:音视频流开始或者中断后重新开始的第一个切片文件会附带这一描述符,描述流状态的变化。
    • EVENT: 事件名称,目前只能为 START,表示音视频开始或中断后重新开始
    • TRACK_TYPE:切片文件内容,AUDIO 或 VIDEO
    • TIME: 流状态变化的时间。UTC 时间,时区为 UTC+0
  • #EXTINF:<length>:描述切片文件的时长,单位为秒。

例如:

#EXT-X-AR-ROTATE:WIDTH=640,HEIGHT=480,ROTATE=90,TIME=20210331073246875
#EXT-X-AR-TRACK-EVENT:EVENT=START,TRACK_TYPE=VIDEO,TIME=20210331073246875
#EXTINF:6.332000
sid123456789520_cnamear__uid_s_123__uid_e_video_20210331073246875.ts

上述 M3U8 文件中包含一个 TS 切片文件的文件名以及三个描述符,表示该切片文件是视频流开始或中断后重新开始后的第一片切片文件,相对前一片 TS 文件逆时针旋转了 90 度,总时长为 6.332 秒。

切片规则

视频文件切片

当满足以下任一条件时,云端录制即会对视频文件进行切片:

  • 切片时长达到 15 秒,并遇到视频关键帧
  • 编码器发生变化
  • 视频宽高发生变化
  • 视频流发生中断
  • 当使用 H.264 编码,单片视频时长超过 5.5 分钟,或单个文件大小超过 50M,云端录制会强制切片。强制切片后,新切片的首帧可能非 I 帧,导致该切片文件不能直接解码播放。

音频文件切片

当切片时长达到 20 秒,并遇到音频关键帧时,云端录制即会对音频文件进行切片。

音频 M3U8 文件示例

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:18
#EXT-X-DISCONTINUITY
#EXT-X-AR-TRACK-EVENT:EVENT=START,TRACK_TYPE=AUDIO,TIME=20210331073250321
#EXTINF:15.019000
sid123456789520_cnamear__uid_s_123__uid_e_audio_20210331073250321.ts
#EXTINF:15.019000
sid123456789520_cnamear__uid_s_123__uid_e_audio_20210331073250684.ts
#EXTINF:15.019000
sid123456789520_cnamear__uid_s_123__uid_e_audio_20210331073252666.ts
#EXTINF:15.019000
sid123456789520_cnamear__uid_s_123__uid_e_audio_20210331073252999.ts
#EXTINF:12.523000
sid123456789520_cnamear__uid_s_123__uid_e_audio_20210331073253520.ts
#EXT-X-ENDLIST

视频 M3U8 文件示例

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:34
#EXT-X-DISCONTINUITY
#EXT-X-AR-ROTATE:WIDTH=640,HEIGHT=480,ROTATE=0,TIME=20210331073246875
#EXT-X-AR-TRACK-EVENT:EVENT=START,TRACK_TYPE=VIDEO,TIME=20210331073246875
#EXTINF:6.332000
sid123456789520_cnamear__uid_s_123__uid_e_video_20210331073246875.ts
#EXT-X-AR-ROTATE:WIDTH=1280,HEIGHT=720,ROTATE=0,TIME=202103310732 47 234
#EXT-X-DISCONTINUITY
#EXTINF:17.442000
sid123456789520_cnamear__uid_s_123__uid_e_video_20210331073247234.ts
#EXT-X-DISCONTINUITY
#EXT-X-AR-ROTATE:WIDTH=640,HEIGHT=480,ROTATE=0,TIME=20210331073247385
#EXTINF:33.326000
sid123456789520_cnamear__uid_s_123__uid_e_video_20210331073247385.ts
#EXT-X-DISCONTINUITY
#EXT-X-AR-ROTATE:WIDTH=1280,HEIGHT=720,ROTATE=0,TIME=20210331073247842
#EXTINF:14.815000
sid123456789520_cnamear__uid_s_123__uid_e_video_20210331073247842.ts
#EXT-X-ENDLIST