Individual recording

Updated

How to record audio and video in individual recording mode using command line.

The On-Premise Recording SDK supports two recording modes:

  • Individual recording mode: This is the default recording mode. The SDK generates one audio and/or video file for each UID.
  • Composite recording mode: Generates a single mixed audio and video file for all UIDs in a channel, or mixes the audio of all UIDs in the channel into an audio file and the video of all UIDs into a video file.

See Differences between individual recording mode and composite recording mode to decide which mode you should use.

Prerequisites

Before continuing, follow the Quickstart guide to integrate the Recording SDK and implement the basic recording functionality.

Implement individual recording

The implementation of individual recording is largely similar to the steps in the Quickstart guide. The main differences are in the configuration parameters and the APIs used.

Refer to the following call sequence diagram to understand the recording workflow.

Sequence diagram

To implement individual recording mode, configure the recorder and use the appropriate APIs as follows:

  1. Initialize the recorder with enableMix set to false.
  2. Subscribe to the audio and video streams of the users you want to record.
  3. Join the channel and listen for the onUserJoined callback to get the userId of each remote user.
  4. Configure individual recording for each user:
  5. Start and stop the recording for each user:

Refer to the following code to implement these steps:

// Initialize the recorder with individual recording mode enabled
agoraMediaRtcRecorder.initialize(agoraService, false);

// Subscribe to all audio and high-quality video streams
agoraMediaRtcRecorder.subscribeAllAudio();
VideoSubscriptionOptions options = new VideoSubscriptionOptions();
options.setEncodedFrameOnly(false);
options.setType(Constants.VideoStreamType.VIDEO_STREAM_HIGH);
agoraMediaRtcRecorder.subscribeAllVideo(options);

// Join the channel
agoraMediaRtcRecorder.joinChannel(
    recorderConfig.getToken(),
    recorderConfig.getChannelName(),
    recorderConfig.getUserId()
);

// In the onUserJoined callback, configure individual recording for the user
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());

// Set a unique file name based on UID and timestamp
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);

// Apply the configuration for the specific UID
agoraMediaRtcRecorder.setRecorderConfigByUid(config, uid);

// Apply a watermark (optional)
agoraMediaRtcRecorder.enableAndUpdateVideoWatermarksByUid(watermarks, uid);

// Start recording for the specific UID
agoraMediaRtcRecorder.startSingleRecordingByUid(uid);

// ...

// Stop recording for the specific UID
agoraMediaRtcRecorder.stopSingleRecordingByUid(uid);

Reference

This section contains content that completes the information on this page, or points you to documentation that explains other aspects to this product.

Considerations

The individual recording mode supports a specific set of APIs. Calling unsupported methods in the wrong mode has no effect. When using the individual recording mode, the following methods do not work: