2025/06/30 15:31:13
单流录制和合流录制
功能简介
为支持不同的录制业务需求,本地服务端录制 SDK 支持单流和合流两种录制模式,其中:
- 单流录制,指对频道内不同的主播发出的流,根据 UID 进行区别然后分别进行录制,产生不同的录制文件。
- 合流录制,指将频道内全部主播的音视频合流录制到一起,只生成一个录制文件。
本文介绍如何使用录制 4.x SDK 分别实现单流录制和合流录制。
前提条件
开始前,请确保你已参考快速开始集成了录制 SDK,并实现了极简的录制功能。
实现单流或合流录制的步骤,和快速开始中一致,不同的是参数的设置,以及不同录制模式下可以调用的 API。因此开始前请确保你了解实现基础录制功能所需要的步骤。
实现单流录制
单流录制完整的 API 时序如下图所示:
其中,关键步骤和参数设置如下:
- 初始化录制实例时,将
enableMix
参数设为false
,表示使用单流录制; - 调用
subscribe
系列方法订阅你想要录制的用户; - 加入频道,并接收远端用户加入频道的回调
onUserJoined
,获取其中的userId
参数用于后续设置; - 根据需求,调用
setRecorderConfigByUid
设置单流录制的配置项;调用enableAndUpdateVideoWatermarksByUid
添加录制水印; - 调用单流录制对应的 API 开始/结束单流录制:
startSingleRecordingByUid
:开始单流录制stopSingleRecordingByUid
:停止单流录制
示例代码如下:
Java
// ...
// enableMix 设为false,启用单流录制模式
agoraMediaRtcRecorder.initialize(agoraService, false);
// 设置音频订阅逻辑
agoraMediaRtcRecorder.subscribeAllAudio();
VideoSubscriptionOptions options = new VideoSubscriptionOptions();
options.setEncodedFrameOnly(false);
options.setType(Constants.VideoStreamType.VIDEO_STREAM_HIGH);
agoraMediaRtcRecorder.subscribeAllVideo(options);
// 加入频道
agoraMediaRtcRecorder.joinChannel(recorderConfig.getToken(),
recorderConfig.getChannelName(),
recorderConfig.getUserId());
// 在收到 onUserJoined 回调后,可以针对 uid 设置 recorder config
MediaRecorderConfiguration config = new MediaRecorderConfiguration();
config.setFps(recorderConfig.getVideo().getFps());
config.setWidth(recorderConfig.getVideo().getWidth());
config.setHeight(recorderConfig.getVideo().getHeight());
config.setChannelNum(recorderConfig.getAudio().getNumOfChannels());
config.setSampleRate(recorderConfig.getAudio().getSampleRate());
String curTime = getCurrentTimeAsString();
String storagePath = recorderConfig.getRecorderPath() + uid + "_" + curTime + ".mp4";
config.setStoragePath(storagePath);
config.setStreamType(Constants.MediaRecorderStreamType.STREAM_TYPE_BOTH);
config.setMaxDurationMs(recorderConfig.getMaxDuration() * 1000);
agoraMediaRtcRecorder.setRecorderConfigByUid(config, uid);
// 设置水印
agoraMediaRtcRecorder.enableAndUpdateVideoWatermarksByUid(watermarks, uid);
// 开始录制
agoraMediaRtcRecorder.startSingleRecordingByUid(uid);
// ...
// 停止录制
agoraMediaRtcRecorder.stopSingleRecordingByUid(uid);
实现合流录制
合流录制完整 API 时序如下图所示:
其中,关键步骤和参数设置如下:
- 初始化录制实例时,将
enableMix
参数设为true
,表示使用合流录制; - 调用
subscribe
系列方法订阅你想要录制的用户; - 加入频道后,根据需求调用
setRecorderConfig
、setVideoMixingLayout
、enableAndUpdateVideoWatermarks
设置合流录制的配置项、合流布局、水印等; - 调用合流录制对应的 API 开始/结束合流录制:
startRecording
:开始合流录制stopRecording
:停止合流录制
示例代码如下:
Java
// ...
// enableMix 设为 true,启用合流录制模式
agoraMediaRtcRecorder.initialize(agoraService, true);
// 设置订阅逻辑
agoraMediaRtcRecorder.subscribeAllAudio();
VideoSubscriptionOptions options = new VideoSubscriptionOptions();
options.setEncodedFrameOnly(false);
options.setType(Constants.VideoStreamType.VIDEO_STREAM_HIGH);
agoraMediaRtcRecorder.subscribeAllVideo(options);
// 加入频道
agoraMediaRtcRecorder.joinChannel(recorderConfig.getToken(),
recorderConfig.getChannelName(),
recorderConfig.getUserId());
// 设置合流录制 config、水印 config、合流的渲染布局
agoraMediaRtcRecorder.setRecorderConfig(recorderConfig);
agoraMediaRtcRecorder.enableAndUpdateVideoWatermarks(watermarks);
agoraMediaRtcRecorder.setVideoMixingLayout(layout);
// 开始录制
agoraMediaRtcRecorder.startRecording();
// ...
// 停止录制
agoraMediaRtcRecorder.stopRecording();
开发注意事项
如果你使用了单流录制模式,调用如下方法不生效:
setRecorderConfig
enableAndUpdateVideoWatermarks
setVideoMixingLayout
startRecording
stopRecording
如果你使用了合流录制模式,调用如下方法不生效:
setRecorderConfigByUid
enableAndUpdateVideoWatermarksByUid
startSingleRecordingByUid
stopSingleRecordingByUid