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);
}
Exemple #2
0
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);
}