In isobmff library, how to write only moof and mdat (m4v) (MUXING)

69 Views Asked by At

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.

1

There are 1 best solutions below

1
Kundera On