void hls_segmenter_flv(const char* file)
{
	hls_m3u8_t* m3u = hls_m3u8_create(0, 3);
	hls_media_t* hls = hls_media_create(HLS_DURATION * 1000, hls_handler, m3u);
	void* flv = flv_reader_create(file);
	flv_demuxer_t* demuxer = flv_demuxer_create(flv_handler, hls);

	int r, type;
	uint32_t timestamp;
	static char data[2 * 1024 * 1024];
	while ((r = flv_reader_read(flv, &type, &timestamp, data, sizeof(data))) > 0)
	{
		flv_demuxer_input(demuxer, type, data, r, timestamp);
	}

	// write m3u8 file
	hls_media_input(hls, STREAM_VIDEO_H264, NULL, 0, 0, 0, 0);
	hls_m3u8_playlist(m3u, 1, data, sizeof(data));
	FILE* fp = fopen("playlist.m3u8", "wb");
	fwrite(data, 1, strlen(data), fp);
	fclose(fp);

	flv_demuxer_destroy(demuxer);
	flv_reader_destroy(flv);
	hls_media_destroy(hls);
	hls_m3u8_destroy(m3u);
}
Example #2
0
static void flv_handler(void* param, int codec, const void* data, size_t bytes, uint32_t pts, uint32_t dts, int flags)
{
	switch (codec)
	{
	case FLV_AUDIO_AAC:
		hls_media_input(param, STREAM_AUDIO_AAC, data, bytes, pts, dts, 0);
		break;

	case FLV_AUDIO_MP3:
		hls_media_input(param, STREAM_AUDIO_MP3, data, bytes, pts, dts, 0);
		break;

	case FLV_VIDEO_H264:
		hls_media_input(param, STREAM_VIDEO_H264, data, bytes, pts, dts, 0);
		break;

	default:
		// nothing to do
		break;
	}
}
static int flv_handler(void* param, int codec, const void* data, size_t bytes, uint32_t pts, uint32_t dts, int flags)
{
	hls_media_t* hls = (hls_media_t*)param;

	switch (codec)
	{
	case FLV_AUDIO_AAC:
		return hls_media_input(hls, STREAM_AUDIO_AAC, data, bytes, pts, dts, 0);

	case FLV_AUDIO_MP3:
		return hls_media_input(hls, STREAM_AUDIO_MP3, data, bytes, pts, dts, 0);

	case FLV_VIDEO_H264:
		return hls_media_input(hls, STREAM_VIDEO_H264, data, bytes, pts, dts, flags ? HLS_FLAGS_KEYFRAME : 0);

	case FLV_VIDEO_H265:
		return hls_media_input(hls, STREAM_VIDEO_H265, data, bytes, pts, dts, flags ? HLS_FLAGS_KEYFRAME : 0);

	default:
		// nothing to do
		return 0;
	}
}