MP4FileSource::~MP4FileSource() { for (int i = 0; i < m_count; i++) { struct media_t* m = &m_media[i]; if (m->rtp) { rtp_destroy(m->rtp); m->rtp = NULL; } if (m->packer) { rtp_payload_encode_destroy(m->packer); m->packer = NULL; } } if (m_reader) { mov_reader_destroy(m_reader); m_reader = NULL; } if (m_fp) fclose(m_fp); }
void* mov_reader_create(const char* file) { struct mov_reader_t* reader; reader = (struct mov_reader_t*)malloc(sizeof(*reader)); if (NULL == reader) return NULL; memset(reader, 0, sizeof(*reader)); // ISO/IEC 14496-12:2012(E) 4.3.1 Definition (p17) // Files with no file-type box should be read as if they contained an FTYP box // with Major_brand='mp41', minor_version=0, and the single compatible brand 'mp41'. reader->mov.ftyp.major_brand = MOV_BRAND_MP41; reader->mov.ftyp.minor_version = 0; reader->mov.ftyp.brands_count = 0; reader->mov.header = 0; reader->mov.fp = file_reader_create(file); if (NULL == reader->mov.fp || 0 != mov_reader_init(&reader->mov)) { mov_reader_destroy(reader); return NULL; } reader->dts = INT64_MAX; return reader; }
void mov_reader_test(const char* mp4) { s_vfp = fopen("v.h264", "wb"); s_afp = fopen("a.aac", "wb"); void* mov = mov_reader_create(mp4); mov_reader_getinfo(mov, mov_video_info, mov_audio_info, NULL); while (mov_reader_read(mov, s_buffer, sizeof(s_buffer), onread, NULL) > 0) { } mov_reader_destroy(mov); fclose(s_vfp); fclose(s_afp); }