我正在使用 isobmff 库 https://github.com/MPEGGroup/isobmff.
我的目标是制作 m4v 文件。
我知道如何使用这个库制作 mp4 和 fmp4。
但是,我不知道如何只制作 m4v(仅限 moof 和 mdat 框)文件。
库没有单独提供这个功能。
所以我要尝试定制它。
简单用法如下。
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 函数写入整个电影盒文件。 但我只需要写moof和mdat框(m4v文件格式)。
就我而言,我有 h264 文件并混合为 isobmff 格式。 我在下面尝试过
MP4PrivateMovieRecordPtr movie;
movie = (MP4PrivateMovieRecordPtr)moov;
// when i access movie->movieFragments , this return NULL.
printf("movieFragments %p \n",movie->movieFragments);
MP4PrivateMovieRecordPtr 如下。
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;
你能给我任何解决方案或建议吗..?
感谢您的阅读。
我期待您的回复。
我找到了解决方案。谢谢你