ffmpeg 存流为hls文件

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
...以下省略

以上是关于ffmpeg 存流为hls文件的主要内容,如果未能解决你的问题,请参考以下文章

使用 ffmpeg 将 Mp4 转换为 HLS

使用 FFmpeg 在 iOS 上编写时将 fMP4 转码为 HLS

ffmpeg hls_time选项不适用于h264_nvenc

将多个输出中的hls属性设置为单独的片段代码

使用 FFmpeg 通过管道输出视频片段

FFmpeg中HLS文件解析源码