实时音视频
  • 平台类型
  • 框架 / 引擎
  • iOS
  • Android
  • macOS
  • Windows
  • Linux
  • Web
  • 小程序

录制

更新时间:2021-08-06 14:16

1 功能简介

本地媒体录制组件提供媒体本地录制的能力,把直播过程中的音视频数据录制存储到本地文件。

1.1 应用场景

  • 纯本地录制:不推流情况下,本地预览进行录制。
  • 边直播边录制:在推流的同时进行录制,把直播的全程录制保存到本地文件。
  • 直播过程中录制短视频:直播过程中,可以随时录制一小段视频进行保存到本地。

1.2 支持格式

  • 音视频:FLV、MP4
  • 纯音频:AAC

2 示例源码下载

请参考 下载示例源码 获取源码。

相关源码请查看 “/ZegoExpressExample/Others/src/main/java/com/example/others/recording” 目录下的文件。

3 前提条件

在实现媒体播放器功能之前,请确保:

4 使用步骤

录制功能接口调用流程如下图所示:

录制功能接口调用流程图

  1. 创建 ZegoExpressEngine 实例
  2. 设置录制信息回调
  3. 登录房间
  4. 开始推流或启动预览以启动数据采集(开启麦克风、摄像头)
  5. 开始录制
  6. 处理录制信息的回调通知
  7. 停止录制
  8. 停止推流且停止预览
  9. 退出房间
  10. 销毁引擎

4.1 设置录制回调

开发者需要调用 setDataRecordEventHandler 来设置录制功能的回调以接收录制过程中的录制信息。

在调用 startRecordingCapturedData 开始录制之后才会收到所设置的录制回调信息。

// 设置录制回调
engine.setDataRecordEventHandler(new IZegoDataRecordEventHandler(){

    public void onCapturedDataRecordStateUpdate (ZegoDataRecordState state, int errorCode, ZegoDataRecordConfig config, ZegoPublishChannel channel){
        // 开发者可以在这里根据错误码或者录制状态处理录制过程状态变更的逻辑,例如在界面上进行 UI 的提示等
        ...
    }

    public void onCapturedDataRecordProgressUpdate (ZegoDataRecordProgress progress, ZegoDataRecordConfig config, ZegoPublishChannel channel){
        // 开发者可以在这里根据录制进度处理录制过程进度变更的逻辑,例如在界面上进行 UI 的提示等
        ...
    }

});

4.2 开始录制

开发者需要调用 startRecordingCapturedData 以开始录制。

在开始录制之前需要先开始推流 startPublishingStream 或启动本地预览 startPreview,否则无法成功录制。

若希望录制音视频则应指定为 “ZegoDataRecordType.DEFAULT” 或 “ZegoDataRecordType.AUDIO_AND_VIDEO”,若希望只录制音频则选择 “ZegoDataRecordType.ONLY_AUDIO”,若只录制纯视频则选择 “ZegoDataRecordType.ONLY_VIDEO”。

  • ZegoDataRecordConfig 指定录制的配置中,文件路径的后缀名必须是 “.mp4”、“.flv” 或 “.aac” 结尾以指定录制文件的格式。
  • 录制的类型 ZegoDataRecordType 与文件的后缀名无关。
// 登录房间、开始推流、启动预览等接口调用
...

// 创建录制配置
ZegoDataRecordConfig config = new ZegoDataRecordConfig();
// 例如需要录制 mp4 格式
config.filePath = "path.mp4";
// 例如使用默认的方式录制
config.recordType = ZegoDataRecordType.DEFAULT;

// 开始录制,使用主通道录制
engine.startRecordingCapturedData(config, ZegoPublishChannel.MAIN);

4.3 停止录制

开发者需要调用 stopRecordingCapturedData 来结束录制。

在录制过程中,若退出房间 logoutRoom,SDK 内部会主动停止录制。

engine.stopRecordingCapturedData(ZegoPublishChannel.MAIN);

4.4 录制文件的播放

录制文件的播放,可选两种方式进行播放。

  1. 调用系统默认的播放器进行播放。

  2. 调用 ZegoExpressEngine 中的 ZegoMediaPlayer 组件进行播放。

5 API 参考列表

方法 描述
setDataRecordEventHandler 设置数据录制事件回调
startRecordingCapturedData 开始录制
stopRecordingCapturedData 结束录制
onCapturedDataRecordStateUpdate 录制状态更新的回调
onCapturedDataRecordProgressUpdate 录制进度更新的回调

6 相关文档

常用功能 - 媒体播放器

7 常见问题

  1. 本地音视频录制支持什么格式的打包文件?

    目前音视频已支持 FLV 和 MP4,纯音频已支持 AAC,通过文件路径的后缀名指定格式。其中 MP4 格式只支持 AAC + H.264 编码,不满足会导致没有画面或者没有音频。

  2. 存储的路径有什么要求?

    存储的路径为应用有权限读写的文件路径即可,如果传入目录路径,则会在回调中返回写文件失败。

  3. 录制过程如何获取到录制文件的大小?

    录制进度回调 onCapturedDataRecordProgressUpdate 中可以获取得到录制时长和录制文件大小。

  4. 传递一个已存在文件的文件路径,SDK 如何处理?

    不会出错,但原文件内容将被清空后再写入。

  5. 使用外部采集时的录制需要注意什么?

    使用外部采集时,也需要在录制之前调用 SDK 的 startPreview 方法来启动。

  6. 为什么录制出来的视频会有绿边?

    使用者需要注意在开启录制的过程中不要修改视频编码分辨率,开启流量控制(开启时会依据网络环境动态调整编码分辨率)。

  7. 为什么录制过程中结束推流,录制出的视频会在这时有一瞬间的卡顿?

    SDK 内部处理方式的问题,目前暂时无法解决,需要用户尽量避免出现这种操作的情况。

  8. 本地媒体录制支持录 “ZegoMediaPlayer/ZegoAudioPlayer/混音功能” 的声音吗?

    可以录制以上输入源的声音,但是只有混入推流中的声音才会被录制,如果仅本地播放,则不会被录制进文件。