MP4v2
Functions
MP4v2 Track

Functions

MP4TrackId MP4AddTrack (MP4FileHandle hFile, const char *type, uint32_t timeScale=MP4_MSECS_TIME_SCALE)
 Add a user defined track. More...
 
MP4TrackId MP4AddSystemsTrack (MP4FileHandle hFile, const char *type)
 Add an MPEG-4 systems track. More...
 
MP4TrackId MP4AddODTrack (MP4FileHandle hFile)
 Add a object descriptor (OD) track. More...
 
MP4TrackId MP4AddSceneTrack (MP4FileHandle hFile)
 Add a scene (BIFS) track. More...
 
MP4TrackId MP4AddAudioTrack (MP4FileHandle hFile, uint32_t timeScale, MP4Duration sampleDuration, uint8_t audioType=MP4_MPEG4_AUDIO_TYPE)
 Add audio track to mp4 file. More...
 
MP4TrackId MP4AddULawAudioTrack (MP4FileHandle hFile, uint32_t timeScale)
 Add ulaw track to mp4 file. More...
 
MP4TrackId MP4AddALawAudioTrack (MP4FileHandle hFile, uint32_t timeScale)
 Add alaw track to mp4 file. More...
 
MP4TrackId MP4AddAC3AudioTrack (MP4FileHandle hFile, uint32_t samplingRate, uint8_t fscod, uint8_t bsid, uint8_t bsmod, uint8_t acmod, uint8_t lfeon, uint8_t bit_rate_code)
 
MP4TrackId MP4AddAmrAudioTrack (MP4FileHandle hFile, uint32_t timeScale, uint16_t modeSet, uint8_t modeChangePeriod, uint8_t framesPerSample, bool isAmrWB)
 
void MP4SetAmrVendor (MP4FileHandle hFile, MP4TrackId trackId, uint32_t vendor)
 
void MP4SetAmrDecoderVersion (MP4FileHandle hFile, MP4TrackId trackId, uint8_t decoderVersion)
 
void MP4SetAmrModeSet (MP4FileHandle hFile, MP4TrackId trakId, uint16_t modeSet)
 
uint16_t MP4GetAmrModeSet (MP4FileHandle hFile, MP4TrackId trackId)
 
MP4TrackId MP4AddHrefTrack (MP4FileHandle hFile, uint32_t timeScale, MP4Duration sampleDuration, const char *base_url=NULL)
 
const char * MP4GetHrefTrackBaseUrl (MP4FileHandle hFile, MP4TrackId trackId)
 
MP4TrackId MP4AddVideoTrack (MP4FileHandle hFile, uint32_t timeScale, MP4Duration sampleDuration, uint16_t width, uint16_t height, uint8_t videoType=MP4_MPEG4_VIDEO_TYPE)
 Add a video track. More...
 
MP4TrackId MP4AddH264VideoTrack (MP4FileHandle hFile, uint32_t timeScale, MP4Duration sampleDuration, uint16_t width, uint16_t height, uint8_t AVCProfileIndication, uint8_t profile_compat, uint8_t AVCLevelIndication, uint8_t sampleLenFieldSizeMinusOne)
 
void MP4AddH264SequenceParameterSet (MP4FileHandle hFile, MP4TrackId trackId, const uint8_t *pSequence, uint16_t sequenceLen)
 
void MP4AddH264PictureParameterSet (MP4FileHandle hFile, MP4TrackId trackId, const uint8_t *pPict, uint16_t pictLen)
 
void MP4SetH263Vendor (MP4FileHandle hFile, MP4TrackId trackId, uint32_t vendor)
 
void MP4SetH263DecoderVersion (MP4FileHandle hFile, MP4TrackId trackId, uint8_t decoderVersion)
 
void MP4SetH263Bitrates (MP4FileHandle hFile, MP4TrackId trackId, uint32_t avgBitrate, uint32_t maxBitrate)
 
MP4TrackId MP4AddH263VideoTrack (MP4FileHandle hFile, uint32_t timeScale, MP4Duration sampleDuration, uint16_t width, uint16_t height, uint8_t h263Level, uint8_t h263Profile, uint32_t avgBitrate, uint32_t maxBitrate)
 
MP4TrackId MP4AddHintTrack (MP4FileHandle hFile, MP4TrackId refTrackId)
 Add a hint track. More...
 
MP4TrackId MP4AddTextTrack (MP4FileHandle hFile, MP4TrackId refTrackId)
 
MP4TrackId MP4AddSubtitleTrack (MP4FileHandle hFile, uint32_t timescale, uint16_t width, uint16_t height)
 
MP4TrackId MP4AddSubpicTrack (MP4FileHandle hFile, uint32_t timescale, uint16_t width, uint16_t height)
 
MP4TrackId MP4AddPixelAspectRatio (MP4FileHandle hFile, MP4TrackId refTrackId, uint32_t hSpacing, uint32_t vSpacing)
 
MP4TrackId MP4AddColr (MP4FileHandle hFile, MP4TrackId refTrackId, uint16_t primary, uint16_t transfer, uint16_t matrix)
 
MP4TrackId MP4CloneTrack (MP4FileHandle srcFile, MP4TrackId srcTrackId, MP4FileHandle dstFile=MP4_INVALID_FILE_HANDLE, MP4TrackId dstHintTrackReferenceTrack=MP4_INVALID_TRACK_ID)
 Make a clone of a specified track. More...
 
MP4TrackId MP4CopyTrack (MP4FileHandle srcFile, MP4TrackId srcTrackId, MP4FileHandle dstFile=MP4_INVALID_FILE_HANDLE, bool applyEdits=false, MP4TrackId dstHintTrackReferenceTrack=MP4_INVALID_TRACK_ID)
 Make a copy of a specified track. More...
 
bool MP4DeleteTrack (MP4FileHandle hFile, MP4TrackId trackId)
 Delete a track. More...
 
uint32_t MP4GetNumberOfTracks (MP4FileHandle hFile, const char *type=NULL, uint8_t subType=0)
 Get the number of tracks. More...
 
MP4TrackId MP4FindTrackId (MP4FileHandle hFile, uint16_t index, const char *type=NULL, uint8_t subType=0)
 Find a track id. More...
 
uint16_t MP4FindTrackIndex (MP4FileHandle hFile, MP4TrackId trackId)
 Find a track index. More...
 
bool MP4GetTrackDurationPerChunk (MP4FileHandle hFile, MP4TrackId trackId, MP4Duration *duration)
 Get maximum duration of chunk. More...
 
bool MP4SetTrackDurationPerChunk (MP4FileHandle hFile, MP4TrackId trackId, MP4Duration duration)
 Set maximum duration of chunk. More...
 
bool MP4AddIPodUUID (MP4FileHandle hFile, MP4TrackId trackId)
 

Detailed Description

Function Documentation

◆ MP4AddALawAudioTrack()

MP4TrackId MP4AddALawAudioTrack ( MP4FileHandle  hFile,
uint32_t  timeScale 
)

Add alaw track to mp4 file.

MP4AddALawAudioTrack adds a alaw track to the mp4 file. MP4WriteSample() can then be used to add the desired audio samples.

Parameters
hFilehandle of file for operation.
timeScalethe time scale in ticks per second of the track.
Returns
On success, the track-id of the new track. On error, MP4_INVALID_TRACK_ID.

◆ MP4AddAudioTrack()

MP4TrackId MP4AddAudioTrack ( MP4FileHandle  hFile,
uint32_t  timeScale,
MP4Duration  sampleDuration,
uint8_t  audioType = MP4_MPEG4_AUDIO_TYPE 
)

Add audio track to mp4 file.

MP4AddAudioTrack adds an audio track to the mp4 file. MP4WriteSample() can then be used to add the desired audio samples.

It is recommended that the time scale be set to the sampling frequency (e.g. 44100 Hz) of the audio so as to preserve the timing information accurately.

If the audio encoding uses a fixed duration for each sample that should be specified here. If not then the value MP4_INVALID_DURATION should be given for the sampleDuration argument.

Parameters
hFilehandle of file for operation.
timeScalethe time scale in ticks per second of the track.
sampleDurationthe fixed duration for all track samples. Caveat: the value should be in track-timescale units.
audioTypethe audio encoding type. See MP4GetTrackEsdsObjectTypeId() for known values.
Returns
On success, the track-id of the new track. On error, MP4_INVALID_TRACK_ID.

◆ MP4AddHintTrack()

MP4TrackId MP4AddHintTrack ( MP4FileHandle  hFile,
MP4TrackId  refTrackId 
)

Add a hint track.

MP4AddHintTrack adds a hint track to the mp4 file. A hint track is used to describe how to send the reference media track over a particular network transport. In the case of the IETF RTP protocol, the hint track describes how the media data should be placed into packets and any media specific protocol headers that should be added.

Typically there is a one to one correspondence between reference media track samples and hint track samples. The start time, duration, and sync flags are typically the same, however provisions are made for deviations from this rule.

The MP4 library provides extensive support for RTP hint tracks. This includes a easy to use API to create RTP hint tracks, and read out fully constructed RTP packets based on the hint track.

Parameters
hFilehandle of file for operation.
refTrackIdspecifies the reference media track for this hint track.
Returns
On success, the track-id of the new track. On error, MP4_INVALID_TRACK_ID.

◆ MP4AddIPodUUID()

bool MP4AddIPodUUID ( MP4FileHandle  hFile,
MP4TrackId  trackId 
)
Parameters
hFilehandle of file for operation.
trackIdid of track for operation.
Returns
true on success, false on failure.

◆ MP4AddODTrack()

MP4TrackId MP4AddODTrack ( MP4FileHandle  hFile)

Add a object descriptor (OD) track.

MP4AddODTrack adds an object descriptor (aka OD) track to the mp4 file. MP4WriteSample() can then be used to add the desired OD commands to the track. The burden is currently on the calling application to understand OD.

Those wishing to have a simple audio/video scene without understanding OD may wish to use MP4MakeIsmaCompliant() to create the minimal OD and BIFS information.

Parameters
hFilehandle of file for operation.
Returns
On success, the track-id of new track. On failure, MP4_INVALID_TRACK_ID.

◆ MP4AddSceneTrack()

MP4TrackId MP4AddSceneTrack ( MP4FileHandle  hFile)

Add a scene (BIFS) track.

MP4AddSceneTrack adds a scene (aka BIFS) track to the mp4 file. MP4WriteSample() can then be used to add the desired BIFS commands to the track. The burden is currently on the calling application to understand BIFS.

Those wishing to have a simple audio/video scene without understanding BIFS may wish to use MP4MakeIsmaCompliant() to create the minimal OD and BIFS information.

Parameters
hFilehandle of file for operation.
Returns
On success, the track-id of new track. On failure, MP4_INVALID_TRACK_ID.

◆ MP4AddSystemsTrack()

MP4TrackId MP4AddSystemsTrack ( MP4FileHandle  hFile,
const char *  type 
)

Add an MPEG-4 systems track.

MP4AddSystemsTrack adds an MPEG-4 Systems track to the mp4 file. Note this should not be used to add OD or scene tracks, MP4AddODTrack() and MP4AddSceneTrack() should be used for those purposes. Other known MPEG-4 System track types are:

@li #MP4_CLOCK_TRACK_TYPE
@li #MP4_MPEG7_TRACK_TYPE
@li #MP4_OCI_TRACK_TYPE
@li #MP4_IPMP_TRACK_TYPE
@li #MP4_MPEGJ_TRACK_TYPE
Parameters
hFilehandle of file for operation.
typespecifies the type of track to be added.
Returns
On success, the track-id of new track. On failure, MP4_INVALID_TRACK_ID.

◆ MP4AddTrack()

MP4TrackId MP4AddTrack ( MP4FileHandle  hFile,
const char *  type,
uint32_t  timeScale = MP4_MSECS_TIME_SCALE 
)

Add a user defined track.

MP4AddTrack adds a user defined track to the mp4 file. Care should be taken to avoid any of the standardized track type names. A useful convention is use only uppercase characters for user defined track types. The string should be exactly four characters in length, e.g. "MINE".

Note this should not be used to add any of the known track types defined in the MP4 standard (ISO/IEC 14496-1:2001).

Parameters
hFilehandle of file for operation.
typespecifies the type of track to be added.
timeScalethe time scale in ticks per second of the track. Default is 1000.
Returns
On success, the track-id of new track. On failure, MP4_INVALID_TRACK_ID.

◆ MP4AddULawAudioTrack()

MP4TrackId MP4AddULawAudioTrack ( MP4FileHandle  hFile,
uint32_t  timeScale 
)

Add ulaw track to mp4 file.

MP4AddULawAudioTrack adds a ulaw track to the mp4 file. MP4WriteSample() can then be used to add the desired audio samples.

Parameters
hFilehandle of file for operation.
timeScalethe time scale in ticks per second of the track.
Returns
On success, the track-id of the new track. On error, MP4_INVALID_TRACK_ID.

◆ MP4AddVideoTrack()

MP4TrackId MP4AddVideoTrack ( MP4FileHandle  hFile,
uint32_t  timeScale,
MP4Duration  sampleDuration,
uint16_t  width,
uint16_t  height,
uint8_t  videoType = MP4_MPEG4_VIDEO_TYPE 
)

Add a video track.

MP4AddVideoTrack adds a video track to the mp4 file. MP4WriteSample() can then be used to add the desired video samples.

It is recommended that the time scale be set to 90000 so as to preserve the timing information accurately for the range of video frame rates commonly in use.

If the video frame rate is to be fixed then the sampleDuration argument should be give the appropriate fixed value. If the video frame rate is to be variable then the value MP4_INVALID_DURATION should be given for the sampleDuration argument.

Parameters
hFilehandle of file for operation.
timeScalethe timescale in ticks per second of the track.
sampleDurationspecifies fixed sample duration for all track samples. Caveat: the value should be in track timescale units.
widthspecifies the video frame width in pixels.
heightspecifies the video frame height in pixels.
videoTypespecifies the video encoding type. See MP4GetTrackVideoType() for known values.
Returns
On success, the track-id of the new track. On error, MP4_INVALID_TRACK_ID.

◆ MP4CloneTrack()

MP4TrackId MP4CloneTrack ( MP4FileHandle  srcFile,
MP4TrackId  srcTrackId,
MP4FileHandle  dstFile = MP4_INVALID_FILE_HANDLE,
MP4TrackId  dstHintTrackReferenceTrack = MP4_INVALID_TRACK_ID 
)

Make a clone of a specified track.

MP4CloneTrack creates a new track to an mp4 file that is a copy of an existing track with respect to the track media type, and other control information.

Note this function does not copy the media samples of the source track to the new track. If you want to do that use MP4CopyTrack() instead.

Parameters
srcFilespecifies the mp4 file of the source track of the operation.
srcTrackIdspecifies the track id of the track to be cloned.
dstFilespecifies the mp4 file of the new, cloned track. If the value is MP4_INVALID_FILE_HANDLE, the new track is created in the same file as the source track.
dstHintTrackReferenceTrackspecifies the track id of the reference track in the destination file when cloning a hint track.
Returns
Upon success, the track id of the new track. Upon an error, MP4_INVALID_TRACK_ID.
See also
MP4CopyTrack()

◆ MP4CopyTrack()

MP4TrackId MP4CopyTrack ( MP4FileHandle  srcFile,
MP4TrackId  srcTrackId,
MP4FileHandle  dstFile = MP4_INVALID_FILE_HANDLE,
bool  applyEdits = false,
MP4TrackId  dstHintTrackReferenceTrack = MP4_INVALID_TRACK_ID 
)

Make a copy of a specified track.

MP4CopyTrack creates a new track to an mp4 file that is a copy of an existing track with respect to the track media type, other control information, and media samples.

The applyEdits parameter of this function allows for easy creation of standalone clips from a larger mp4 file. To do this use MP4AddTrackEdit() to specify the start and duration of the clip, and then use MP4CopyTrack() to export that portion of the media to a new mp4 file.

Note if you do not want to copy the media samples, but just want to create a track with the same type and control information of the source track use MP4CloneTrack().

Parameters
srcFilespecifies the mp4 file of the source track of the operation.
srcTrackIdspecifies the track id of the track to be copied.
dstFilespecifies the mp4 file of the new, copied track. If the value is MP4_INVALID_FILE_HANDLE, the new track is created in the same file as the source track.
applyEditsspecifies if the track edit list is to be applied during the copying of media samples. If false, then all samples are copied, if true then only those samples included by the track edit list are copied.
dstHintTrackReferenceTrackspecifies the track id of the reference track in the destination file when cloning a hint track.
Returns
Upon success, the track id of the new track. Upon an error, MP4_INVALID_TRACK_ID.
See also
MP4CloneTrack()
MP4AddTrackEdit()

◆ MP4DeleteTrack()

bool MP4DeleteTrack ( MP4FileHandle  hFile,
MP4TrackId  trackId 
)

Delete a track.

MP4DeleteTrack deletes the control information associated with the specified track. The trackId will become invalid if this call succeeds.

Note that the samples associated with this track are not deleted with this call. This can be accomplished via MP4Optimize(). The reason for this is that multiple tracks can reference the same samples so a global view must be taken when deleting them.

Parameters
hFilespecifies the mp4 file to which the operation applies.
trackIdspecifies the track to which the operation applies.
Returns
Upon success, true (1). Upon an error, false (0).

◆ MP4FindTrackId()

MP4TrackId MP4FindTrackId ( MP4FileHandle  hFile,
uint16_t  index,
const char *  type = NULL,
uint8_t  subType = 0 
)

Find a track id.

MP4FindTrackId gets the track id associated with the index'th track of the specified track type. For example, to get the track id of the first video track:

For audio and video tracks, a subtype can be specified to find a track of a particular encoding. For example, to get the track id of the first audio track encoded with MPEG-1 audio:

MP4FindTrackId(hFile, 0, MP4_AUDIO_TRACK_TYPE, MP4_MPEG1_AUDIO_TYPE);

Caveat: The track id's do not imply anything about the ordering of the track information within the mp4 file.

Parameters
hFilespecifies the mp4 file to which the operation applies.
indexspecifies which track is desired from matching tracks.
typespecifies the type of track to be matched. A NULL value implies any type of track. See MP4GetTrackType() for predefined values.
subTypespecifies the subtype of the track to be matched. Subtypes are only defined for audio and video tracks, see MP4GetTrackEsdsObjectTypeId() for predefined values. A zero value implies any subtype.
Returns
Upon success, the track index of the specified track. Upon an error, 0xFFFF.
See also
MP4FindTrackIndex()

◆ MP4FindTrackIndex()

uint16_t MP4FindTrackIndex ( MP4FileHandle  hFile,
MP4TrackId  trackId 
)

Find a track index.

MP4FindTrackIndex gets the index of the track with the specified track id.

Parameters
hFilespecifies the mp4 file to which the operation applies.
trackIdspecifies the track for which the index is desired.
Returns
Upon success, the track index of the specified track. Upon an error, 0xFFFF.
See also
MP4FindTrackId()

◆ MP4GetNumberOfTracks()

uint32_t MP4GetNumberOfTracks ( MP4FileHandle  hFile,
const char *  type = NULL,
uint8_t  subType = 0 
)

Get the number of tracks.

MP4GetNumberOfTracks returns how many tracks of the specified type and subtype exist in the mp4 file. This can be used to determine if an mp4 file contains a track of a given type of media, for instance audio or video. It can also be used to determine if multiple options may be available. For instance multiple audio tracks in different languages.

For audio and video tracks, a subtype can be specified to only count tracks of a particular encoding.

Parameters
hFilespecifies the mp4 file to which the operation applies.
typespecifies the type of track for which a count is desired. A NULL value implies any type of track. See MP4GetTrackType() for predefined values.
subTypespecifies the subtype of the tracks to be counted. Subtypes are only defined for audio and video tracks, see MP4GetTrackEsdsObjectTypeId() for predefined values. A zero value implies any subtype.
Returns
The number of tracks of the specified type and subType in the mp4 file.

◆ MP4GetTrackDurationPerChunk()

bool MP4GetTrackDurationPerChunk ( MP4FileHandle  hFile,
MP4TrackId  trackId,
MP4Duration *  duration 
)

Get maximum duration of chunk.

MP4GetTrackDurationPerChunk gets the maximum duration for each chunk.

Parameters
hFilehandle of file for operation.
trackIdid of track for operation.
durationout value of duration in track timescale units.
Returns
true on success, false on failure.

◆ MP4SetTrackDurationPerChunk()

bool MP4SetTrackDurationPerChunk ( MP4FileHandle  hFile,
MP4TrackId  trackId,
MP4Duration  duration 
)

Set maximum duration of chunk.

MP4SetTrackDurationPerChunk sets the maximum duration for each chunk.

Parameters
hFilehandle of file for operation.
trackIdid of track for operation.
durationin timescale units.
Returns
true on success, false on failure.
MP4_VIDEO_TRACK_TYPE
#define MP4_VIDEO_TRACK_TYPE
Constant: video track.
Definition: general.h:72
MP4_AUDIO_TRACK_TYPE
#define MP4_AUDIO_TRACK_TYPE
Constant: audio track.
Definition: general.h:71
MP4FindTrackId
MP4TrackId MP4FindTrackId(MP4FileHandle hFile, uint16_t index, const char *type=NULL, uint8_t subType=0)
Find a track id.