I am using isobmff library https://github.com/MPEGGroup/isobmff.
My Goal is make m4v file.
I Know How to make mp4 and fmp4 using this library.
But, I do not know how to make only m4v(moof and mdat box only) file.
The library does not provide this function separately.
So I am gonna try Customizing it.
Simple Usage is below.
ISOMovie moov; // movie box
ISOMedia media;
ISOTrack trak;
err = MP4NewMovie(&moov, 0, 0, 0, 0, 0, 0);
err = MP4SetMovieTimeScale (moov, TIMESCALE);
err = ISONewMovieTrack(moov, MP4NewTrackIsVisual, &trak);
err = ISOSetTrackFragmentDefaults(trak, 0, 0, 0, 0);
err = ISONewTrackMedia(trak, &media, ISOVisualHandlerType, TIMESCALE, NULL);
err = ISOBeginMediaEdits(media);
// first, add the sps pps. if audio add audio specific config.
err = ISOAddMediaSamples(media,0,0,durationsH,sizesH,sampleEntryH,0,0);
err = ISOEndMediaEdits(media);
// write fragment
err = ISOStartMovieFragment(moov);
err = ISOSetSamplestoGroupType(media, SAMPLE_GROUP_NORMAL);
err = ISOAddMediaSamples(media,sampleH,1,durationsH,sizesH,sampleEntryH,0,0);
err = ISOWriteMovieToFile(moov,"fmp4.mp4");
ISOWriteMovieToFile Fuction write whole movie box file. But I need to write only moof and mdat box (m4v file format).
In my case, I have h264 file and muxing to isobmff foramt. I tried below
MP4PrivateMovieRecordPtr movie;
movie = (MP4PrivateMovieRecordPtr)moov;
// when i access movie->movieFragments , this return NULL.
printf("movieFragments %p \n",movie->movieFragments);
MP4PrivateMovieRecordPtr is below.
typedef struct MP4PrivateMovieRecord
{
u32 referenceCount;
struct FileMappingObjectRecord *fileMappingObject;
struct MP4InputStreamRecord *inputStream;
MP4AtomPtr moovAtomPtr; /* might be a moof or a moov */
MP4AtomPtr true_moov;
MP4AtomPtr mdat; /* first, primary, mdat */
MP4LinkedList mdatList; /* all the others we find */
/*MP4Track initialBIFS;*/
/*MP4Track initialOD; */
u32 fileType; /* the file type: MPEG-4, Motion JPEG-2000, or QuickTime */
MP4AtomPtr ftyp; /* the file type atom */
MP4AtomPtr jp2h; /* for JPEG-2000, the JP2 header atom */
MP4AtomPtr sgnt; /* for JPEG-2000, the signature atom */
MP4AtomPtr meta; /* file-level meta-data */
MP4AtomPtr meco; /* Deprecated file-level additional meta-data container */
void *inMemoryDataHandler;
MP4Handle prepend_handle;
MP4LinkedList movieFragments;
} MP4PrivateMovieRecord, *MP4PrivateMovieRecordPtr;
Do you give me any solution or advices..?
Thanks you for Reading.
I am looking forward to your reply.
I found the solution. Thank you
I use internal serialize function
https://github.com/MPEGGroup/isobmff/blob/2a0e1a3690efb4553defca31caf347013f1eb9e1/IsoLib/libisomediafile/src/MP4ES_ID_IncDescriptor.c#L44