在进行视频通话、直播、在线教学时,用户经常需要将视频录制保存下来,方便后续其他用户点播观看。ZEGO 提供了多种录制方案,满足不同场景下的录制需求。
录制方案 | 简介 | 适用场景 |
---|---|---|
通过客户端 SDK 录制您(本地用户)的音视频,并保存到本地。 |
需要录制您(本地用户)的音视频,并保存到本地设备(手机、电脑等终端设备)中。不支持录制其他用户的音视频。
调用方式:通过调用客户端 SDK 接口开始录制。 |
|
通过获取音频的原始数据,将原始数据保存到本地,完成音频录制。 |
|
|
通过 ZEGO 云服务进行录制,并将音视频保存到您开通的云存储中。 |
调用方式:通过调用 ZEGO 服务端 API 接口开始录制。 |
|
录制直播的音视频,并保存到 ZEGO CDN 上。 |
调用方式:您在 ZEGO 控制台 开通了 CDN 录制后,默认是全局录制,无需调用服务端 API 接口;如果您需要选择性录制,请调用 ZEGO 服务端 API 接口开始录制。 |
|
通过开发者自己部署的服务端进行录制。 |
调用方式:通过调用开发者自己搭建的服务器接口开始录制。 |
通话或直播过程中,将您(本地用户)预览的音视频数据录制存储到本地设备中,保存为 mp4 或其他格式的文件。不支持录制其他用户的音视频。
请参考 下载示例源码 获取源码。
相关源码请查看 “/ZegoExpressExample/Examples/Others/RecordCapture” 目录下的文件。
在实现录制功能之前,请确保:
录制功能接口调用流程如下图所示:
开发者需要调用 setDataRecordEventHandler 来设置录制功能的回调以接收录制过程中的录制信息。
在调用 startRecordingCapturedData 开始录制之后才会收到所设置的录制回调信息。
// 设置录制回调
[[ZegoExpressEngine sharedEngine] setDataRecordEventHandler:self];
开发者可以根据此回调 onCapturedDataRecordStateUpdate 判断文件录制的状态或者用户界面进行 UI 的提示等。
开发者可以根据此回调 onCapturedDataRecordProgressUpdate 判断文件录制过程进度或者对用户界面进行 UI 的提示等。
// 开发者可以在这里根据错误码或者录制状态处理录制过程状态变更的逻辑,例如在界面上进行 UI 的提示等
- (void)onCapturedDataRecordStateUpdate:(ZegoDataRecordState)state errorCode:(int)errorCode config:(ZegoDataRecordConfig *)config channel:(ZegoPublishChannel)channel {
NSLog(@" Record state update, state: %d, errorCode: %d, file path: %@, record type: %d", (int)state, errorCode, config.filePath, (int)config.recordType);
}
// 开发者可以在这里根据录制进度处理录制过程进度变更的逻辑,例如在界面上进行 UI 的提示等
- (void)onCapturedDataRecordProgressUpdate:(ZegoDataRecordProgress *)progress config:(ZegoDataRecordConfig *)config channel:(ZegoPublishChannel)channel {
NSLog(@" Record progress update, duration: %llu, file size: %llu", progress.duration, progress.currentFileSize);
}
开发者需要调用 startRecordingCapturedData 以开始录制。
若希望录制音视频则应指定为 “ZegoDataRecordTypeDefault” 或 “ZegoDataRecordTypeAudioAndVideo”,若希望只录制音频则选择 “ZegoDataRecordTypeOnlyAudio”,若只录制纯视频则选择 “ZegoDataRecordTypeOnlyVideo”。
// 登录房间、开始推流、启动预览等接口调用
...
// 此处示例寻找 Document 路径
NSArray *docsPathArray = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES);
NSString *docsPath = [docsPathArray objectAtIndex:0];
// 创建录制配置
ZegoDataRecordConfig *config = [[ZegoDataRecordConfig alloc] init];
// 设置录制文件路径,指定 mp4 格式
config.filePath = [docsPath stringByAppendingPathComponent:@"ZGRecordCapture.mp4"];
// 设置指定录制音视频
config.recordType = ZegoDataRecordTypeAudioAndVideo;
// 开始录制,使用主通道录制
[[ZegoExpressEngine sharedEngine] startRecordingCapturedData:config channel:ZegoPublishChannelMain];
开发者需要调用 stopRecordingCapturedData 来结束录制。
在录制过程中,若退出房间 logoutRoom,SDK 内部会主动停止录制。
[[ZegoExpressEngine sharedEngine] stopRecordingCapturedData:ZegoPublishChannelMain];
录制文件的播放,可选两种方式进行播放。
调用系统默认的播放器进行播放。
调用 ZegoExpressEngine 中的 ZegoMediaPlayer 组件进行播放,详情可参考 媒体播放器。
本地音视频录制支持什么格式的打包文件?
目前音视频已支持 FLV 和 MP4,纯音频已支持 AAC,通过文件路径的后缀名指定格式。其中 FLV 格式只支持 H.264 编码,MP4 格式支持 H.264 和 H.265 编码,不满足会导致没有画面或者没有音频。
存储的路径有什么要求?
存储的路径为应用有权限读写的文件路径即可,如果传入目录路径,则会在回调中返回写文件失败。
录制过程如何获取到录制文件的大小?
录制进度回调 onCapturedDataRecordProgressUpdate 中可以获取得到录制时长和录制文件大小。
传递一个已存在文件的文件路径,SDK 如何处理?
不会出错,但原文件内容将被清空后再写入。
使用外部采集时的录制需要注意什么?
使用外部采集时,也需要在录制之前调用 SDK 的 startPreview 方法来启动。
为什么录制出来的视频会有绿边?
使用者需要注意在开启录制的过程中不要修改视频编码分辨率,开启流量控制(开启时会依据网络环境动态调整编码分辨率)。
为什么录制过程中结束推流,录制出的视频会在这时有一瞬间的卡顿?
SDK 内部处理方式的问题,目前暂时无法解决,需要用户尽量避免出现这种操作的情况。
本地媒体录制支持录 “ZegoMediaPlayer/ZegoAudioPlayer/混音功能” 的声音吗?
可以录制以上输入源的声音,但是只有混入推流中的声音才会被录制,如果仅本地播放,则不会被录制进文件。
通过获取音频的原始数据,将原始数据保存到本地,完成音频录制。
请参考 原始音频数据获取。
云端录制,即通过调用 ZEGO 服务端 API 录制音视频,并保存到您指定的 CDN 上,支持录制视频通话或者直播中任意一个用户的音视频流,并且提供各种容灾、安全机制。
适用于各种需要录制功能的场景,包括但不限于音视频通话、直播、在线课堂、在线会议等。
请参考 云端录制。
CDN 录制,是指将正在通过 CDN 直播的内容保存到相应 CDN 上。需要将音视频推到 CDN 进行直播后,才能使用该方式进行录制。
开发者需要将音视频推到 CDN 进行直播后,才能使用该方式进行录制。如果开发者只是进行视频通话或者连麦,并未将音视频推到 CDN,则无法使用此功能。
您在 ZEGO 控制台 开通了 CDN 录制后,默认是全局录制,无需调用服务端 API 接口;如果您需要选择性录制,请调用 ZEGO 服务端 API 接口开始录制。
请参考 开始 CDN 录制。
开发者自行集成 ZEGO 的服务端录制插件,并部署在自己的服务器上,然后开发者通过访问自己的服务器接口开始录制,具体说明请参考 本地服务端录制。
本方案适用于您有自己的服务端开发团队,并且有能力部署专门的服务器用于音视频录制,并能够处理好大规模并发的问题。
请参考 本地服务端录制。
联系我们
文档反馈