录制文件

更新时间: 2021/03/26 22:00:50

初始化录制实例后,您可以在启动录制时设置录制生成的媒体文件格式。使用本地服务器录制 SDK 成功录制后,录制文件会储存在您的的 Linux 服务器上。

设置录制文件格式

使用本地服务器录制 SDK 进行录制时,默认生成的媒体文件格式为:

  • 音频:AAC 格式,扩展名为 *.m4a
  • 视频:H264 格式,扩展名为 *.mp4

您可以在调用 joinChannel 加入房间并开始录制时,设置生成的媒体文件类型。

  • NERecordEngineContext::decodeAudio:设置音频文件格式,支持设置为:
    • kNERtcAudioFormatAAC:AAC 格式,扩展名为 *.m4a
    • kNERtcAudioFormatPCM:PCM 格式,扩展名 *.wav
  • NERecordEngineContext::decodeVideo:设置视频文件格式,支持设置为:
    • kNERtcVideoFormatH264:H264 格式,扩展名为 *.mp4
    • kNERtcVideoFormatYUV:YUV420 格式,扩展名 *.yuv

设置录制文件的目录结构

您既可以使用默认的目录结构,也可以根据自己的习惯自定义目录结构。

不推荐使用自定义目录结构,如果多个录制实例使用相同的配置参数,会导致同一个目录中存放了不同录制实例的多个文件,不便于查找。

使用默认的目录结构

engine->initialize()record_file_dir_mode 参数设置为 kNERtcRecordFileDirModeDefault,使用默认目录结构,并通过 record_file_root_dir 字段来设置录制文件的根目录。设置了此参数后,SDK 会自动生成子目录。

以录制生成一个 mp4 文件为例,自动生成的子目录为 yyyymmdd/ChannelName_HHMMSS_MSUSNS/xxxx.mp4,其中:

  • yyyymmdd:第一级子目录,为加入房间开始录制的日期(年、月、日)。该目录下包含当日开始录制的所有文件,时区为 UTC+0。

  • ChannelName_HHMMSS_MSUSNS:第二级子目录,包含此次录制生成的所有文件。该目录名包含房间名和时间戳。时间戳为服务器开始录制的时间,时区为 UTC+0,HHMMSS 分别指小时、分钟和秒,MSUSNS 分别指毫秒、微秒和纳秒。

自定义目录结构

engine->initialize()record_file_dir_mode 设置为 kNERtcRecordFileDirModeCustom,使用自定义目录结构。并通过 record_file_root_dir 设置录制文件保存目录的绝对路径,SDK 不会自动生成子目录。

录制文件命名规范

录制生成的音视频文件以房间成员 UID 和时间戳命名。时间戳为该房间成员开始录制的时间,由年、月、日、小时、分钟、秒和毫秒组成,时区为 UTC+0。 举例来说,111_20210121075311.m4a 表示在 UTC 2021 年 1 月 21 日 17 点 53 分 46 秒 11 毫秒时开始录制的一个 UID 为 111 的房间成员的音频文件。 合流录制模式下,录制文件名中 UID 为 mixed。

注意事项

除了音视频文件外,每个 ChannelName_HHMMSS_MSUSNS 文件夹均会自动生成filename-done.txt 文件,该文件标识本次录制结束。

示例代码

合流录制,生成一个 m4a 和 mp4 文件。

nerecord::IRecordEngine *engine = (nerecord::IRecordEngine *)createNERecordEngine();

nerecord::NERecordEngineContext ctx;
ctx.auto_subscribe_audio = true;
ctx.auto_subscribe_video = true;
ctx.audio_enable = true;
ctx.video_enable = true;
ctx.default_stream_type = nerecord::kNERtcRemoteVideoStreamTypeHigh;
ctx.mixed_audio_video = false;
ctx.mixing_enable = true;
ctx.decodeAudio = nerecord::kNERtcAudioFormatAAC;
ctx.decodeVideo = nerecord::kNERtcVideoFormatH264;
ctx.video_record_resolution.vanvasWidth = 640;
ctx.video_record_resolution.vanvasHeight = 480;
ctx.video_record_resolution.bps = 400000;
ctx.video_record_resolution.fps = 15;
ctx.snapshot_interval = 10;
ctx.audioProfile = nerecord::kNERtcAudioProfileHight;

engine->initialize(ctx);
engine->joinChannel(<token>, <channel_name>, <uid>);
nerecord::VideoMixingLayout layout;
layout.layout = kNERtcLayoutGrid;
layout.backgroundColor = "#ffffff";
engine->setVideoMixingLayout(layout);
engine->startService();
/*录制中*/
engine->stopService();
engine->leaveChannel();
engine->release();
destroyNERecordEngine((void *&)engine);
此文档是否对你有帮助?
有帮助
去反馈
  • 设置录制文件格式
  • 设置录制文件的目录结构
  • 使用默认的目录结构
  • 自定义目录结构
  • 录制文件命名规范
  • 注意事项
  • 示例代码