Skip to main content
Version: 20 Mar 2024

ml_media_recorder.h

Classes

Name
structMLMediaRecorderOnInfo
structMLMediaRecorderOnError
structMLMediaRecorderEventCallbacks

Types

Name
typedef struct MLMediaRecorderOnInfoMLMediaRecorderOnInfo
typedef struct MLMediaRecorderOnErrorMLMediaRecorderOnError
typedef struct MLMediaRecorderEventCallbacksMLMediaRecorderEventCallbacks

Enums

Name
enumMLMediaRecorderVideoSource
{
MLMediaRecorderVideoSource_Camera = 1,
MLMediaRecorderVideoSource_Ensure32Bits = 0x7FFFFFFF
}
enumMLMediaRecorderAudioSource
{
MLMediaRecorderAudioSource_Voice = 0,
MLMediaRecorderAudioSource_World = 1,
MLMediaRecorderAudioSource_Virtual = 2,
MLMediaRecorderAudioSource_Mixed = 3,
MLMediaRecorderAudioSource_Ensure32Bits = 0x7FFFFFFF
}
enumMLMediaRecorderEvent
{
MLMediaRecorderEvent_Error = 1,
MLMediaRecorderEvent_Info = 2,
MLMediaRecorderTrackEvent_Error = 100,
MLMediaRecorderTrackEvent_Info = 101,
MLMediaRecorderTrackEvent_Ensure32Bits = 0x7FFFFFFF
}
enumMLMediaRecorderInfo
{
MLMediaRecorderInfo_Unknown = 1,
MLMediaRecorderInfo_MaxDurationReached = 800,
MLMediaRecorderInfo_MaxFileSizeReached = 801,
MLMediaRecorderInfo_MaxFileSizeApproaching = 802,
MLMediaRecorderTrackInfo_CompletionStatus = 1000,
MLMediaRecorderTrackInfo_ProgressInTime = 1001,
MLMediaRecorderTrackInfo_Type = 1002,
MLMediaRecorderTrackInfo_DurationMs = 1003,
MLMediaRecorderTrackInfo_MaxChunkDurationMs = 1004,
MLMediaRecorderTrackInfo_EncodedFrames = 1005,
MLMediaRecorderTrackInfo_InterChunkTimeUs = 1006,
MLMediaRecorderTrackInfo_InitialDelayMs = 1007,
MLMediaRecorderTrackInfo_StartOffsetMs = 1008,
MLMediaRecorderTrackInfo_DataKBytes = 1009,
MLMediaRecorderTrackInfo_Ensure32Bits = 0x7FFFFFFF
}
enumMLMediaRecorderError
{
MLMediaRecorderError_Unknown = 1,
MLMediaRecorderError_ServerDied = 2,
MLMediaRecorderTrackError_General = 100,
MLMediaRecorderError_VideoNoSyncFrame = 200,
MLMediaRecorderTrackError_Ensure32Bits = 0x7FFFFFFF
}
Video recorder error types.
enumMLMediaRecorderOutputFormat
{
MLMediaRecorderOutputFormat_DEFAULT = 0,
MLMediaRecorderOutputFormat_THREE_GPP = 1,
MLMediaRecorderOutputFormat_MPEG_4 = 2,
MLMediaRecorderOutputFormat_AMR_NB = 3,
MLMediaRecorderOutputFormat_AMR_WB = 4,
MLMediaRecorderOutputFormat_AAC_ADIF = 5,
MLMediaRecorderOutputFormat_AAC_ADTS = 6,
MLMediaRecorderOutputFormat_RTP_AVP = 7,
MLMediaRecorderOutputFormat_MPEG2TS = 8,
MLMediaRecorderOutputFormat_WEBM = 9,
MLMediaRecorderOutputFormat_HEIF = 10,
MLMediaRecorderOutputFormat_OGG = 11,
MLMediaRecorderOutputFormat_Ensure32Bits = 0x7FFFFFFF
}
enumMLMediaRecorderVideoEncoder
{
MLMediaRecorderVideoEncoder_Default = 0,
MLMediaRecorderVideoEncoder_H263 = 1,
MLMediaRecorderVideoEncoder_H264 = 2,
MLMediaRecorderVideoEncoder_MPEG_4_SP = 3,
MLMediaRecorderVideoEncoder_VP8 = 4,
MLMediaRecorderVideoEncoder_HEVC = 5,
MLMediaRecorderVideoEncoder_Ensure32Bits = 0x7FFFFFFF
}
enumMLMediaRecorderAudioEncoder
{
MLMediaRecorderAudioEncoder_Default = 0,
MLMediaRecorderAudioEncoder_AMR_NB = 1,
MLMediaRecorderAudioEncoder_AMR_WB = 2,
MLMediaRecorderAudioEncoder_AAC = 3,
MLMediaRecorderAudioEncoder_HE_AAC = 4,
MLMediaRecorderAudioEncoder_AAC_ELD = 5,
MLMediaRecorderAudioEncoder_VORBIS = 6,
MLMediaRecorderAudioEncoder_OPUS = 7,
MLMediaRecorderAudioEncoder_Ensure32Bits = 0x7FFFFFFF
}

Functions

Name
voidMLMediaRecorderEventCallbacksInit(MLMediaRecorderEventCallbacks * inout_callbacks)
Initializes MediaRecorderEventCallbacks with default values.
MLResultMLMediaRecorderCreate(MLHandle * out_handle)
Create a new MediaRecorder object.
MLResultMLMediaRecorderDestroy(MLHandle media_recorder)
Destroy a MediaRecorder object.
MLResultMLMediaRecorderSetOutputFileForFD(MLHandle media_recorder, int32_t fd)
Pass in the file descriptor of the file to be written.
MLResultMLMediaRecorderSetOutputFileForPath(MLHandle media_recorder, const char * path)
Sets the path of the output file to be produced.
MLResultMLMediaRecorderSetEventCallbacks(MLHandle media_recorder, const MLMediaRecorderEventCallbacks callbacks, void data)
Sets the MediaRecorderListener object that will receive MediaRecorder notifications.
MLResultMLMediaRecorderSetVideoSource(MLHandle media_recorder, MLMediaRecorderVideoSource in_video_source)
Sets MediaRecorder default video source.
MLResultMLMediaRecorderSetAudioSource(MLHandle media_recorder, MLMediaRecorderAudioSource in_audio_source)
Set MediaRecorder audio source.
MLResultMLMediaRecorderSetOutputFormat(MLHandle media_recorder, MLMediaRecorderOutputFormat in_format)
Sets the format of the output file produced during recording.
MLResultMLMediaRecorderSetVideoEncoder(MLHandle media_recorder, MLMediaRecorderVideoEncoder in_video_encoder)
Sets the video encoder to be used for recording.
MLResultMLMediaRecorderSetAudioEncoder(MLHandle media_recorder, MLMediaRecorderAudioEncoder in_audio_encoder)
Sets the audio encoder to be used for recording.
MLResultMLMediaRecorderSetMaxDuration(MLHandle media_recorder, int32_t in_max_duration_msec)
Sets the maximum duration (in ms) of the recording session.
MLResultMLMediaRecorderSetMaxFileSize(MLHandle media_recorder, int64_t in_max_file_size)
Sets the maximum filesize (in bytes) of the recording session.
MLResultMLMediaRecorderSetGeoLocation(MLHandle media_recorder, int64_t in_latitude10000, int64_t in_longitude10000)
Sets the GEO location for recording.
MLResultMLMediaRecorderPrepare(MLHandle media_recorder, MLHandle format)
Prepares the recorder to begin capturing and encoding data for input mediaformat.
MLResultMLMediaRecorderStart(MLHandle media_recorder)
Begins capturing and encoding data to the specified file.
MLResultMLMediaRecorderGetInputSurface(MLHandle media_recorder, MLHandle * out_input_surface_handle)
Gets the input surface to record from when using SURFACE video source.
MLResultMLMediaRecorderGetMaxAmplitude(MLHandle media_recorder, int32_t * inout_max_amp)
Returns the maximum absolute amplitude that was sampled since the last call to this method.
MLResultMLMediaRecorderStop(MLHandle media_recorder)
Stops recording.
MLResultMLMediaRecorderReleaseInputSurface(MLHandle media_recorder, MLHandle input_surface_handle)
Release the surface that was returned by MLMediaRecorderGetInputSurface.
MLResultMLMediaRecorderReset(MLHandle media_recorder)
Restarts the MediaRecorder to its idle state.

Enums Documentation

MLMediaRecorderVideoSource

EnumeratorValueDescription
MLMediaRecorderVideoSource_Camera1Camera video source.
MLMediaRecorderVideoSource_Ensure32Bits0x7FFFFFFFEnsure enum is represented as 32 bits.

Media recorder video source.


MLMediaRecorderAudioSource

EnumeratorValueDescription
MLMediaRecorderAudioSource_Voice0Recording voice.
MLMediaRecorderAudioSource_World1Recording ambient sounds.
MLMediaRecorderAudioSource_Virtual2Recording digital sounds.
MLMediaRecorderAudioSource_Mixed3Mixed reality mode: digital + ambient.
MLMediaRecorderAudioSource_Ensure32Bits0x7FFFFFFFEnsure enum is represented as 32 bits.

Media recorder audio source.


MLMediaRecorderEvent

EnumeratorValueDescription
MLMediaRecorderEvent_Error1Media recorder error.
MLMediaRecorderEvent_Info2Media recorder info.
MLMediaRecorderTrackEvent_Error100Media recorder track error.
MLMediaRecorderTrackEvent_Info101Media recorder track info.
MLMediaRecorderTrackEvent_Ensure32Bits0x7FFFFFFFEnsure enum is represented as 32 bits.

Media recorder events.


MLMediaRecorderInfo

EnumeratorValueDescription
MLMediaRecorderInfo_Unknown1
MLMediaRecorderInfo_MaxDurationReached800Max duration of the clip is reached.
MLMediaRecorderInfo_MaxFileSizeReached801Max file size is reached.
MLMediaRecorderInfo_MaxFileSizeApproaching802Max file size is approaching.
MLMediaRecorderTrackInfo_CompletionStatus1000Next output file has started.The info about completion status.
MLMediaRecorderTrackInfo_ProgressInTime1001The info about progress in time.
MLMediaRecorderTrackInfo_Type1002Track info.
MLMediaRecorderTrackInfo_DurationMs1003The info about track duration.
MLMediaRecorderTrackInfo_MaxChunkDurationMs1004The time to measure the max chunk duration.
MLMediaRecorderTrackInfo_EncodedFrames1005The info about encoded frames.
MLMediaRecorderTrackInfo_InterChunkTimeUs1006The time to measure how well the audio and video track data interleaved.
MLMediaRecorderTrackInfo_InitialDelayMs1007The time to measure system response.
MLMediaRecorderTrackInfo_StartOffsetMs1008The time used to compensate for initial A/V sync.
MLMediaRecorderTrackInfo_DataKBytes1009Total number of bytes of the media data.
MLMediaRecorderTrackInfo_Ensure32Bits0x7FFFFFFFEnsure enum is represented as 32 bits.

MLMediaRecorderError

EnumeratorValueDescription
MLMediaRecorderError_Unknown1
MLMediaRecorderError_ServerDied2
MLMediaRecorderTrackError_General100
MLMediaRecorderError_VideoNoSyncFrame200
MLMediaRecorderTrackError_Ensure32Bits0x7FFFFFFFEnsure enum is represented as 32 bits.

Video recorder error types.


MLMediaRecorderOutputFormat

EnumeratorValueDescription
MLMediaRecorderOutputFormat_DEFAULT0
MLMediaRecorderOutputFormat_THREE_GPP13gpp format.
MLMediaRecorderOutputFormat_MPEG_42MP4 format.
MLMediaRecorderOutputFormat_AMR_NB3AMR NB.
MLMediaRecorderOutputFormat_AMR_WB4AMR WB.
MLMediaRecorderOutputFormat_AAC_ADIF5AAC_ADIF.
MLMediaRecorderOutputFormat_AAC_ADTS6AAC_ADTS.
MLMediaRecorderOutputFormat_RTP_AVP7Stream over a socket, limited to a single stream.
MLMediaRecorderOutputFormat_MPEG2TS8H.264/AAC data encapsulated in MPEG2/TS.
MLMediaRecorderOutputFormat_WEBM9VP8/VORBIS data in a WEBM container.
MLMediaRecorderOutputFormat_HEIF10HEIC data in a HEIF container.
MLMediaRecorderOutputFormat_OGG11Opus data in a OGG container.
MLMediaRecorderOutputFormat_Ensure32Bits0x7FFFFFFFEnsure enum is represented as 32 bits.

MLMediaRecorderVideoEncoder

EnumeratorValueDescription
MLMediaRecorderVideoEncoder_Default0
MLMediaRecorderVideoEncoder_H2631H263. This format has support for software encoder.
MLMediaRecorderVideoEncoder_H2642H264. This format has support for hardware encoder.
MLMediaRecorderVideoEncoder_MPEG_4_SP3MPEG4 SP. This format has support for software encoder.
MLMediaRecorderVideoEncoder_VP84VP8. This format has support for software encoder.
MLMediaRecorderVideoEncoder_HEVC5HEVC. This format has support for hardware encoder.
MLMediaRecorderVideoEncoder_Ensure32Bits0x7FFFFFFFEnsure enum is represented as 32 bits.

MLMediaRecorderAudioEncoder

EnumeratorValueDescription
MLMediaRecorderAudioEncoder_Default0
MLMediaRecorderAudioEncoder_AMR_NB1AMR NB.
MLMediaRecorderAudioEncoder_AMR_WB2AMR WB.
MLMediaRecorderAudioEncoder_AAC3AAC.
MLMediaRecorderAudioEncoder_HE_AAC4HE AAC.
MLMediaRecorderAudioEncoder_AAC_ELD5AAC ELD.
MLMediaRecorderAudioEncoder_VORBIS6Vorbis.
MLMediaRecorderAudioEncoder_OPUS7Opus.
MLMediaRecorderAudioEncoder_Ensure32Bits0x7FFFFFFFEnsure enum is represented as 32 bits.

Types Documentation

MLMediaRecorderOnInfo

typedef struct MLMediaRecorderOnInfo MLMediaRecorderOnInfo;

More Info


MLMediaRecorderOnError

typedef struct MLMediaRecorderOnError MLMediaRecorderOnError;

More Info


MLMediaRecorderEventCallbacks

typedef struct MLMediaRecorderEventCallbacks MLMediaRecorderEventCallbacks;

More Info


Functions Documentation

MLMediaRecorderEventCallbacksInit

static inline void MLMediaRecorderEventCallbacksInit(
MLMediaRecorderEventCallbacks * inout_callbacks
)

Initializes MediaRecorderEventCallbacks with default values.

Parameters

MLMediaRecorderEventCallbacks *inout_callbacksMedia Recorder Callback structure defined by MLMediaRecorderEventCallbacks that needs to be initialized.

MLMediaRecorderCreate

MLResult MLMediaRecorderCreate(
MLHandle * out_handle
)

Create a new MediaRecorder object.

Parameters

MLHandle *out_handleHandle to the new MediaRecorder object created. Only valid if result is MLResult_Ok.

Returns

MLResultMLResult_AllocFailedCould not allocate internal MediaRecorder.
MLResultMLResult_InvalidParamPassed out_handle was NULL.
MLResultMLResult_OkMediaRecorder was created successfully.

Required Permissions:

  • None
Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderDestroy

MLResult MLMediaRecorderDestroy(
MLHandle media_recorder
)

Destroy a MediaRecorder object.

Parameters

MLHandlemedia_recorderHandle to the media recorder object to destroy.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkMediaRecorder was destroyed successfully.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.

Required Permissions:

  • None
Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderSetOutputFileForFD

MLResult MLMediaRecorderSetOutputFileForFD(
MLHandle media_recorder,
int32_t fd
)

Pass in the file descriptor of the file to be written.

Parameters

MLHandlemedia_recorderHandle to the media recorder instance.
int32_tfdThe file descriptor for the file you want to write into.

Returns

MLResultMLResult_InvalidParamPassed fd does no refer to a valid,open file descriptor or 'media_recorder' was NULL.
MLResultMLResult_OkData source was correctly set to passed file descriptor.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

Call this after MLMediaRecorderSetOutputFormat() but before MLMediaRecorderprepare().

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderSetOutputFileForPath

MLResult MLMediaRecorderSetOutputFileForPath(
MLHandle media_recorder,
const char * path
)

Sets the path of the output file to be produced.

Parameters

MLHandlemedia_recorderHandle to the media recorder instance.
const char *pathThe linux-style path of the file. Must be a valid and existing path.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkData source was correctly set to passed file path.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

Call this after MLMediaRecorderSetOutputFormat() but before MLMediaRecorderprepare().

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderSetEventCallbacks

MLResult MLMediaRecorderSetEventCallbacks(
MLHandle media_recorder,
const MLMediaRecorderEventCallbacks * callbacks,
void * data
)

Sets the MediaRecorderListener object that will receive MediaRecorder notifications.

Parameters

MLHandlemedia_recorderHandle to the media recorder.
const MLMediaRecorderEventCallbacks *callbacksSet of event callbacks. Can be set to NULL to unset the callbacks altogether.
void *dataCustom data to be returned when any callback is fired.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkThe specified callbacks were successfully set/unset.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None
Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderSetVideoSource

MLResult MLMediaRecorderSetVideoSource(
MLHandle media_recorder,
MLMediaRecorderVideoSource in_video_source
)

Sets MediaRecorder default video source.

Parameters

MLHandlemedia_recorderHandle to the media recorder.
MLMediaRecorderVideoSourcein_video_sourceType of the MediaRecorderVideoSource.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found or in_video_source is not MLMediaRecorderVideoSource_Camera.
MLResultMLResult_OkSet default video source successfully.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

Cannot be called twice (without calling MLMediaRecorderReset() in between) because it triggers internal initialization.

Current implementation supports only camera as video source from MediaRecorderVideoSource.

Deprecated

Deprecated since 1.4.0. Scheduled for removal.


MLMediaRecorderSetAudioSource

MLResult MLMediaRecorderSetAudioSource(
MLHandle media_recorder,
MLMediaRecorderAudioSource in_audio_source
)

Set MediaRecorder audio source.

Parameters

MLHandlemedia_recorderHandle to the media recorder.
MLMediaRecorderAudioSourcein_audio_sourceType of the MediaRecorderAudioSource.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkSet audio source successfully.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • android.permission.RECORD_AUDIO (protection level: dangerous)

Cannot be called twice (without calling MLMediaRecorderReset() in between) because it triggers internal initialization.

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderSetOutputFormat

MLResult MLMediaRecorderSetOutputFormat(
MLHandle media_recorder,
MLMediaRecorderOutputFormat in_format
)

Sets the format of the output file produced during recording.

Parameters

MLHandlemedia_recorderHandle to the media recorder.
MLMediaRecorderOutputFormatin_formatType of the MLMediaRecorderOutputFormat.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkSet output format successfully.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None
Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderSetVideoEncoder

MLResult MLMediaRecorderSetVideoEncoder(
MLHandle media_recorder,
MLMediaRecorderVideoEncoder in_video_encoder
)

Sets the video encoder to be used for recording.

Parameters

MLHandlemedia_recorderHandle to the media recorder.
MLMediaRecorderVideoEncoderin_video_encoderType of the VideoEncoder to use.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkSet video encoder successfully.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaResult_InvalidCodecParamrequested width height is not supported.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

If this method is not called, the output file will not contain an video track. Call this after MLMediaRecorderSetOutputFormat() and before MLMediaRecorderPrepare().

The video source is always set to camera by default.

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderSetAudioEncoder

MLResult MLMediaRecorderSetAudioEncoder(
MLHandle media_recorder,
MLMediaRecorderAudioEncoder in_audio_encoder
)

Sets the audio encoder to be used for recording.

Parameters

MLHandlemedia_recorderHandle to the media recorder.
MLMediaRecorderAudioEncoderin_audio_encoderType of the MLMediaRecorderAudioEncoder to use.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkSet audio encoder successfully.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

If this method is not called, the output file will not contain an audio track. Call this after MLMediaRecorderSetOutputFormat() and before MLMediaRecorderPrepare().

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderSetMaxDuration

MLResult MLMediaRecorderSetMaxDuration(
MLHandle media_recorder,
int32_t in_max_duration_msec
)

Sets the maximum duration (in ms) of the recording session.

Parameters

MLHandlemedia_recorderHandle to the media recorder.
int32_tin_max_duration_msecThe maximum duration in ms (if zero or negative, disables the duration limit).

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkMax duration was successfully set.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

Call this after MLMediaRecorderSetOutputFormat() and before MLMediaRecorderPrepare(). After recording reaches the specified duration, a notification will be sent via the callback with a MLMediaRecorderInfo code of MLMediaRecorderInfo_MaxDurationReached and recording will be stopped. Stopping happens asynchronously, there is no guarantee that the recorder will have stopped by the time the listener is notified.

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderSetMaxFileSize

MLResult MLMediaRecorderSetMaxFileSize(
MLHandle media_recorder,
int64_t in_max_file_size
)

Sets the maximum filesize (in bytes) of the recording session.

Parameters

MLHandlemedia_recorderHandle to the media recorder.
int64_tin_max_file_sizeMaxFilesizeBytes The maximum filesize in bytes (if zero or negative, disables the limit).

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkMax file size was successfully set.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

Call this after MLMediaRecorderSetOutputFormat() and before MLMediaRecorderPrepare(). After recording reaches the specified filesize, a notification will be sent via the callback with a MLMediaRecorderInfo code of MLMediaRecorderInfo_MaxFileSizeReached and recording will be stopped. Stopping happens asynchronously, there is no guarantee that the recorder will have stopped by the time the listener is notified.

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderSetGeoLocation

MLResult MLMediaRecorderSetGeoLocation(
MLHandle media_recorder,
int64_t in_latitude10000,
int64_t in_longitude10000
)

Sets the GEO location for recording.

Parameters

MLHandlemedia_recorderHandle to the media recorder.
int64_tin_latitude10000The 10000 multiplies latitude of location.
int64_tin_longitude10000The 10000 multiplies longitude of location.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkGEO location was successfully set.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None
Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderPrepare

MLResult MLMediaRecorderPrepare(
MLHandle media_recorder,
MLHandle format
)

Prepares the recorder to begin capturing and encoding data for input mediaformat.

Parameters

MLHandlemedia_recorderHandle to the media recorder.
MLHandleformatMLHandle to the MediaFormat. MediaFormat object can be created with:

* MLMediaFormatCreateVideo if we want to record video only. * MLMediaFormatCreateAudio if we want to record audio only. * MLMediaFormatCreate if we want to record both video and audio.|

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkRecorder was prepared successfully.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

This method must be called after setting up the desired audio and video sources, encoders, but before start.

Following parameters can be added to MediaFormat handle. Audio Specific parametes:

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderStart

MLResult MLMediaRecorderStart(
MLHandle media_recorder
)

Begins capturing and encoding data to the specified file.

Parameters

MLHandlemedia_recorderHandle to the media recorder.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkRecorder was started successfully.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

Call this after MLMediaRecorderPrepare(). The apps should not start another recording session during recording.

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderGetInputSurface

MLResult MLMediaRecorderGetInputSurface(
MLHandle media_recorder,
MLHandle * out_input_surface_handle
)

Gets the input surface to record from when using SURFACE video source.

Parameters

MLHandlemedia_recorderHandle to the Media Recorder instance.
MLHandle *out_input_surface_handleHandle to the created input native surface.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OKinput surface was correctly returned.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

May only be called after MLMediaRecorderPrepare. Frames rendered to the producer before MLMediaRecorderStart() is called will be discarded.

When using an input surface, there are no accessible input buffers, as buffers are automatically passed from the other modules to this surface.

The returned input surface can also be passed as a destination surface to

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderGetMaxAmplitude

MLResult MLMediaRecorderGetMaxAmplitude(
MLHandle media_recorder,
int32_t * inout_max_amp
)

Returns the maximum absolute amplitude that was sampled since the last call to this method.

Parameters

MLHandlemedia_recorderHandle to the MediaRecorder.
int32_t *inout_max_ampThe maximum absolute amplitude measured since the last call, or 0 when called for the first time.

Returns

MLResultMLResult_InvalidParamMmedia recorder handle was not found.
MLResultMLResult_OkMaximum amplitude was returned successfully.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

Call this only after the MLMediaRecorderSetAudioSource().

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderStop

MLResult MLMediaRecorderStop(
MLHandle media_recorder
)

Stops recording.

Parameters

MLHandlemedia_recorderHandle to the MediaRecorder.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkRecorder was stopped successfully.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

Call this after MLMediaRecorderStart(). Once recording is stopped, you will have to configure it again as if it has just been constructed.

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderReleaseInputSurface

MLResult MLMediaRecorderReleaseInputSurface(
MLHandle media_recorder,
MLHandle input_surface_handle
)

Release the surface that was returned by MLMediaRecorderGetInputSurface.

Parameters

MLHandlemedia_recorderHandle to the MediaRecorder.
MLHandleinput_surface_handleHandle to the internal surface object.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkSurface object was successfully released.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_NoInitMLMediaCodec was not initialized.

Required Permissions:

  • None
Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

MLMediaRecorderReset

MLResult MLMediaRecorderReset(
MLHandle media_recorder
)

Restarts the MediaRecorder to its idle state.

Parameters

MLHandlemedia_recorderHandle to the media recorder.

Returns

MLResultMLResult_InvalidParamMedia recorder handle was not found.
MLResultMLResult_OkRecorder was resetted successfully.
MLResultMLResult_UnspecifiedFailureThe operation failed with an unspecified error.
MLResultMLMediaGenericResult_InvalidOperationMethod was called from the wrong state.

Required Permissions:

  • None

After calling this method, you will have to configure it again as if it had just been constructed.

Deprecated

Deprecated since 1.4.0. Scheduled for removal.

API Level:

  • 20

Source code

// %BANNER_BEGIN%
// ---------------------------------------------------------------------
// %COPYRIGHT_BEGIN%
// Copyright (c) 2017 Magic Leap, Inc. All Rights Reserved.
// Use of this file is governed by the Software License Agreement,
// located here: https://www.magicleap.com/software-license-agreement-ml2
// Terms and conditions applicable to third-party materials accompanying
// this distribution may also be found in the top-level NOTICE file
// appearing herein.
// %COPYRIGHT_END%
// ---------------------------------------------------------------------
// %BANNER_END%

#pragma once

#include "ml_api.h"

ML_EXTERN_C_BEGIN
typedef enum MLMediaRecorderVideoSource {
MLMediaRecorderVideoSource_Camera = 1,
MLMediaRecorderVideoSource_Ensure32Bits = 0x7FFFFFFF
} MLMediaRecorderVideoSource;

typedef enum MLMediaRecorderAudioSource {
MLMediaRecorderAudioSource_Voice = 0,
MLMediaRecorderAudioSource_World = 1,
MLMediaRecorderAudioSource_Virtual = 2,
MLMediaRecorderAudioSource_Mixed = 3,
MLMediaRecorderAudioSource_Ensure32Bits = 0x7FFFFFFF
} MLMediaRecorderAudioSource;

typedef enum MLMediaRecorderEvent {
MLMediaRecorderEvent_Error = 1,
MLMediaRecorderEvent_Info = 2,
MLMediaRecorderTrackEvent_Error = 100,
MLMediaRecorderTrackEvent_Info = 101,
MLMediaRecorderTrackEvent_Ensure32Bits = 0x7FFFFFFF
} MLMediaRecorderEvent;

typedef enum MLMediaRecorderInfo {
MLMediaRecorderInfo_Unknown = 1,
MLMediaRecorderInfo_MaxDurationReached = 800,
MLMediaRecorderInfo_MaxFileSizeReached = 801,
MLMediaRecorderInfo_MaxFileSizeApproaching = 802,
MLMediaRecorderTrackInfo_CompletionStatus = 1000,
MLMediaRecorderTrackInfo_ProgressInTime = 1001,
MLMediaRecorderTrackInfo_Type = 1002,
MLMediaRecorderTrackInfo_DurationMs = 1003,
MLMediaRecorderTrackInfo_MaxChunkDurationMs = 1004,
MLMediaRecorderTrackInfo_EncodedFrames = 1005,
MLMediaRecorderTrackInfo_InterChunkTimeUs = 1006,
MLMediaRecorderTrackInfo_InitialDelayMs = 1007,
MLMediaRecorderTrackInfo_StartOffsetMs = 1008,
MLMediaRecorderTrackInfo_DataKBytes = 1009,
MLMediaRecorderTrackInfo_Ensure32Bits = 0x7FFFFFFF
} MLMediaRecorderInfo;

typedef ML_DEPRECATED_MSG("Use standard Android SDK APIs.") struct MLMediaRecorderOnInfo {
uint32_t track_id;
MLMediaRecorderInfo info;
int extra;
void *data;
} MLMediaRecorderOnInfo;

typedef enum MLMediaRecorderError {
MLMediaRecorderError_Unknown = 1,
MLMediaRecorderError_ServerDied = 2,

MLMediaRecorderTrackError_General = 100,
MLMediaRecorderError_VideoNoSyncFrame = 200,
MLMediaRecorderTrackError_Ensure32Bits = 0x7FFFFFFF
} MLMediaRecorderError;

typedef ML_DEPRECATED_MSG("Use standard Android SDK APIs.") struct MLMediaRecorderOnError {
uint32_t track_id;
MLMediaRecorderError error;
int extra;
void *data;
} MLMediaRecorderOnError;

typedef enum MLMediaRecorderOutputFormat {
MLMediaRecorderOutputFormat_DEFAULT = 0,
MLMediaRecorderOutputFormat_THREE_GPP = 1,
MLMediaRecorderOutputFormat_MPEG_4 = 2,
MLMediaRecorderOutputFormat_AMR_NB = 3,
MLMediaRecorderOutputFormat_AMR_WB = 4,
MLMediaRecorderOutputFormat_AAC_ADIF = 5,
MLMediaRecorderOutputFormat_AAC_ADTS = 6,
MLMediaRecorderOutputFormat_RTP_AVP = 7,
MLMediaRecorderOutputFormat_MPEG2TS = 8,
MLMediaRecorderOutputFormat_WEBM = 9,
MLMediaRecorderOutputFormat_HEIF = 10,
MLMediaRecorderOutputFormat_OGG = 11,
MLMediaRecorderOutputFormat_Ensure32Bits = 0x7FFFFFFF
} MLMediaRecorderOutputFormat;

typedef enum MLMediaRecorderVideoEncoder {
MLMediaRecorderVideoEncoder_Default = 0,
MLMediaRecorderVideoEncoder_H263 = 1,
MLMediaRecorderVideoEncoder_H264 = 2,
MLMediaRecorderVideoEncoder_MPEG_4_SP = 3,
MLMediaRecorderVideoEncoder_VP8 = 4,
MLMediaRecorderVideoEncoder_HEVC = 5,
MLMediaRecorderVideoEncoder_Ensure32Bits = 0x7FFFFFFF
} MLMediaRecorderVideoEncoder;

typedef enum MLMediaRecorderAudioEncoder {
MLMediaRecorderAudioEncoder_Default = 0,
MLMediaRecorderAudioEncoder_AMR_NB = 1,
MLMediaRecorderAudioEncoder_AMR_WB = 2,
MLMediaRecorderAudioEncoder_AAC = 3,
MLMediaRecorderAudioEncoder_HE_AAC = 4,
MLMediaRecorderAudioEncoder_AAC_ELD = 5,
MLMediaRecorderAudioEncoder_VORBIS = 6,
MLMediaRecorderAudioEncoder_OPUS = 7,
MLMediaRecorderAudioEncoder_Ensure32Bits = 0x7FFFFFFF
} MLMediaRecorderAudioEncoder;

typedef ML_DEPRECATED_MSG("Use standard Android SDK APIs.") struct MLMediaRecorderEventCallbacks {
uint32_t version;
void (*on_info)(MLHandle media_recorder, const MLMediaRecorderOnInfo *info);

void (*on_track_info)(MLHandle media_recorder, const MLMediaRecorderOnInfo *track_info);
void (*on_error)(MLHandle media_recorder, const MLMediaRecorderOnError *error);
void (*on_track_error)(MLHandle media_recorder, const MLMediaRecorderOnError *track_error);
} MLMediaRecorderEventCallbacks;

ML_STATIC_INLINE void MLMediaRecorderEventCallbacksInit(MLMediaRecorderEventCallbacks *inout_callbacks) {
if (inout_callbacks) {
inout_callbacks->version = 1;
inout_callbacks->on_info = NULL;
inout_callbacks->on_error = NULL;
inout_callbacks->on_track_error = NULL;
inout_callbacks->on_track_info = NULL;
}
}

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderCreate(MLHandle *out_handle);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderDestroy(MLHandle media_recorder);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderSetOutputFileForFD(MLHandle media_recorder, int32_t fd);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderSetOutputFileForPath(MLHandle media_recorder, const char *path);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderSetEventCallbacks(MLHandle media_recorder, const MLMediaRecorderEventCallbacks *callbacks, void *data);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderSetVideoSource(MLHandle media_recorder, MLMediaRecorderVideoSource in_video_source);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderSetAudioSource(MLHandle media_recorder, MLMediaRecorderAudioSource in_audio_source);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderSetOutputFormat(MLHandle media_recorder, MLMediaRecorderOutputFormat in_format);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderSetVideoEncoder(MLHandle media_recorder, MLMediaRecorderVideoEncoder in_video_encoder);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderSetAudioEncoder(MLHandle media_recorder, MLMediaRecorderAudioEncoder in_audio_encoder);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderSetMaxDuration(MLHandle media_recorder, int32_t in_max_duration_msec);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderSetMaxFileSize(MLHandle media_recorder, int64_t in_max_file_size);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderSetGeoLocation(MLHandle media_recorder, int64_t in_latitude10000, int64_t in_longitude10000);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderPrepare(MLHandle media_recorder, MLHandle format);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderStart(MLHandle media_recorder);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderGetInputSurface(MLHandle media_recorder, MLHandle *out_input_surface_handle);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderGetMaxAmplitude(MLHandle media_recorder, int32_t *inout_max_amp);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderStop(MLHandle media_recorder);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderReleaseInputSurface(MLHandle media_recorder, MLHandle input_surface_handle);

ML_DEPRECATED_MSG("Use standard Android SDK APIs.")
ML_API MLResult ML_CALL MLMediaRecorderReset(MLHandle media_recorder);

ML_EXTERN_C_END