使用FFmpeg转封装为hls(m3u8)流

  • 改造ffmpeg/doc/examples/remuxing.c,支持将输入流转封装为hls协议
  • 对应的github地址:GitHub - yagerfgcs/FFmpeg at examples/remuxing_support_hls
  • 修改点:增加设置hls头
c 复制代码
// example:https://www.ffmpeg.org/ffmpeg-all.html#hls-2
// ffmpeg -i rtmp://xx/livestream -c copy -hls_time 5 -hls_list_size 0 -start_number 1
// -hls_segment_filename /xxdir/test_%Y-%m-%d-%H-%M-%S_%%08t_%%04d.ts /xxdir/test.m3u8
static int write_hls_header(const char* out_filename, AVFormatContext* context) {
  AVDictionary *options = NULL;
  av_dict_set(&options, "hls_time", "5", 0);
  av_dict_set(&options, "hls_list_size", "0", 0);
  av_dict_set(&options, "start_number", "1", 0);
  av_dict_set(&options, "strftime", "1", 0);
  av_dict_set(&options, "hls_flags",
              "second_level_segment_duration+second_level_segment_index", 0);

  char hls_segment_filename[1024];
  memset(hls_segment_filename, 0, 1024);
  sprintf(hls_segment_filename, "%s/%s", av_dirname(out_filename), "%Y-%m-%d-%H-%M-%S_%%08t_%%04d.ts");
  av_dict_set(&options, "hls_segment_filename", hls_segment_filename, 0);
  return avformat_write_header(context, options != NULL ? &options : NULL);
}

相关推荐
活捉一个坏小孩5 天前
Nvidia FFmpeg安装说明
ffmpeg
WF_YL6 天前
如何删除 Oracle 过期 key / 数据,删除目的的key
ffmpeg
浩瀚之水_csdn6 天前
avcodec_find_decoder函数详解
ffmpeg
浩瀚之水_csdn9 天前
avcodec_parameters_copy详解
linux·人工智能·ffmpeg
不吃鱼的猫74813 天前
【ffplay 源码解析系列】02-核心数据结构详解
c++·ffmpeg·音视频
不吃鱼的猫74813 天前
【ffplay 源码解析系列】01-开篇-ffplay整体架构与启动流程
c++·架构·ffmpeg·音视频
REDcker15 天前
FFmpeg开发者快速入门
ffmpeg
不吃鱼的猫74815 天前
【从零手写播放器:FFmpeg 音视频开发实战】04-封装格式与多媒体容器
c++·ffmpeg·音视频
REDcker16 天前
FFmpeg完整文档
linux·服务器·c++·ffmpeg·音视频·c·后端开发
硬汉嵌入式16 天前
QEMU & FFmpeg作者Fabrice Bellard推出MicroQuickJS,一款面向嵌入式系统JavaScript引擎,仅需10K RAM
javascript·ffmpeg·microquickjs