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 在 iOS 上编写时将 fMP4 转码为 HLS