ffmpeg 存流为hls文件

hls文件

hls文件的好处是:
1、可以按照时间来分割文件,在上传和下载时拿到小文件
2、小文件可以缓存内存
第二点相对于大文件来说,一个1G的文件不可能缓存到内存里,1个2M的文件很容易缓存到内存

存mp4

mp4文件是可以存的,没有问题,也可以存储fmp4,这个也有很大的好处,存mp4和fmp4这个在另外一篇文章里可以详解。可以把远处的流加上本地的话筒声音等合流存文件。

存hls

存hls是最好的了,缺点是文件因为被拆分而大了

ffmpeg - re - i source.mp4 - codec:v libx264 - codec : a libfaac - map 0 - f hls 
- hls_list_size 6 - hls_wrap 10 - hls_time 10 playlist.m3u8

使用api如下:

int Mp4WrapperLocal::Create(const char *fileName, TFileFormat *param)
{
	Close();
	//video_st.dlen = 0;
	//audio_st.dlen = 0;
	_pts = 0;
	_firstRecordPts = 0;
	_sample_count = 1024; //1024 是默认值,注意后面会自动修改//param->sample_count;
	//audio_st.samples_count = 0;
	videofps = param->fps;

	if (param->m3u8 == 1) {
		avformat_alloc_output_context2(&oc, NULL, "hls", fileName);

		av_opt_set(oc->priv_data, "hls_time", "5", AV_OPT_SEARCH_CHILDREN);
		//av_opt_set(oc->priv_data, "hls_list_size" ,"0" , AV_OPT_SEARCH_CHILDREN);
		av_opt_set(oc->priv_data, "hls_wrap", "5", AV_OPT_SEARCH_CHILDREN);

	}
	else {
		avformat_alloc_output_context2(&oc, NULL, NULL, fileName);
	}


	if (!oc)
		return 1;
...以下省略

版权声明:本文为qianbo042311原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。