AgoraMediaRecorder

Used for recording audio and video on the client.

AgoraMediaRecorder can record the following:
  • The audio captured by the local microphone and encoded in AAC format.
  • The video captured by the local camera and encoded by the SDK.
Attention: In the COMMUNICATION channel profile, this feature is unavailable when there are users using SDK versions earlier than v3.0.0.

getMediaRecorder

Gets one AgoraMediaRecorder object.

public static synchronized AgoraMediaRecorder getMediaRecorder(RtcEngine engine) {
    RtcEngineImpl engineImpl = (RtcEngineImpl) engine;
    if (mRecorder == null) {
      mRecorder = new AgoraMediaRecorder(engineImpl);
    } else {
      mRecorder.setEngine(engineImpl);
    }
    return mRecorder;
  }
Note: Make sure the RtcEngine is initialized before you call this method.

Parameters

engine
An RtcEngine object.

Returns

One AgoraMediaRecorder object.

setMediaRecorderObserver

Registers one IMediaRecorderCallback object.

public int setMediaRecorderObserver(RtcConnection connection, IMediaRecorderCallback callback) {
    RtcEngineImpl engine = null;
    if (mEngineReference == null || (engine = mEngineReference.get()) == null) {
      mEngineReference = null;
      return -7;
    }
    return engine.setMediaRecorderObserver(callback, connection);
  }

Make sure the RtcEngine is initialized before you call this method.

Parameters

connection
The connection information. See RtcConnection.
callback
The callbacks for recording local audio and video streams. See IMediaRecorderCallback.

Returns

  • 0: Success.
  • < 0: Failure.

startRecording

Starts recording the local audio and video.

public int startRecording(RtcConnection connection, MediaRecorderConfiguration config) {
    RtcEngineImpl engine = null;
    if (mEngineReference == null || (engine = mEngineReference.get()) == null) {
      mEngineReference = null;
      return -7;
    }
    return engine.startRecording(config.storagePath, config.containerFormat, config.streamType,
        config.maxDurationMs, config.recorderInfoUpdateInterval, connection);
  }

After successfully getting the AgoraMediaRecorder object, you can all this method to enable the recoridng of the local audio and video.

This method can record the audio captured by the local microphone and encoded in AAC format, and the video captured by the local camera and encoded in H.264 format. The SDK can generate a recording file only when it detects audio and video streams; when there are no audio and video streams to be recorded or the audio and video streams are interrupted for more than five seconds, the SDK stops the recording and triggers the onRecorderStateChanged(RECORDER_STATE_ERROR, RECORDER_ERROR_NO_STREAM) callback.

Once the recording is started, if the video resolution is changed, the SDK stops the recording; if the sampling rate and audio channel changes, the SDK continues recording and generates audio files respectively.

Attention: Call this method after joining a channel.

Parameters

connection
The connection information. See RtcConnection.
config
The recording configuration. See MediaRecorderConfiguration.

Returns

  • 0: Success.
  • < 0: Failure.
    • 2: The parameter is invalid. Ensure the following:
      • The specified path of the recording file exists and is writable.
      • The specified format of the recording file is supported.
      • The maximum recording duration is correctly set.
    • 4: RtcEngine does not support the request. The recording is ongoing or the recording stops because an error occurs.
    • 7: A method is called before RtcEngine is initialized. Ensure that you have called getMediaRecorder before calling this method.

stopRecording

Stops recording the local audio and video.

public int stopRecording(RtcConnection connection) {
    RtcEngineImpl engine = null;
    if (mEngineReference == null || (engine = mEngineReference.get()) == null) {
      mEngineReference = null;
      return -7;
    }
    return engine.stopRecording(connection);
  }
Attention: After calling startRecording, if you want to stop the recording, you must call this method; otherwise, the generated recording files may not be playable.

Parameters

connection
The connection information. See RtcConnection.

Returns

  • 0: Success.
  • < 0: Failure.
    • -7: A method is called before RtcEngine is initialized. Ensure that you have called getMediaRecorder before calling this method.

release

Release the AgoraMediaRecorder object.

public void release() {
    RtcEngineImpl engine = null;
    if (mEngineReference != null && (engine = mEngineReference.get()) != null) {
      engine.releaseRecorder();
    }
    mEngineReference = null;
    return;
  }

This method releases the AgoraMediaRecorder object and all resources used by the RtcEngine object. After calling this method, if you need to start recording again, you need to call getMediaRecorder again to get the AgoraMediaRecorder object.