FFMPEG-FLV-MUX编码

一、流程图

在这里插入图片描述

二、结构体

1 .AVOutputFormat

一、核心功能与作用
  1. 封装格式描述
    AVOutputFormat保存了输出容器格式的元数据,包括:

    • 短名称name):如flvmp4
    • 易读名称long_name):如FLV (Flash Video)
    • MIME类型mime_type):如video/x-flv
    • 文件扩展名extensions):如flv
  2. 默认编码格式设置
    指定音视频流的默认编码格式ID(如audio_codecvideo_codec),例如FLV默认音频编码为MP3,视频编码为FLV1。

  3. 操作函数接口
    定义封装过程中的关键函数指针,包括:

    • write_header:写入文件头部;
    • write_packet:写入数据包;
    • write_trailer:写入尾部信息。
  4. 链表存储
    FFmpeg将所有支持的AVOutputFormat实例以链表形式存储,便于动态查找和管理。

二、结构体关键字段解析
typedef struct AVOutputFormat {
    const char *name;            // 格式短名称(如"flv")
    const char *long_name;       // 易读全称
    const char *mime_type;       // MIME类型
    const char *extensions;      // 文件扩展名
    enum AVCodecID audio_codec;  // 默认音频编码ID
    enum AVCodecID video_codec;  // 默认视频编码ID
    int flags;                   // 控制封装行为的标志位
    const struct AVCodecTag **codec_tag; // 支持的编码器标签列表
    struct AVOutputFormat *next; // 链表指针
    int priv_data_size;          // 私有数据大小
    // 函数指针(如write_header、write_packet等)
} AVOutputFormat;
三、 重要字段说明:
  • flags标志位
    控制封装行为,例如:

    • AVFMT_GLOBALHEADER:要求编码器生成全局头(如H.264的SPS/PPS);
    • AVFMT_VARIABLE_FPS:允许可变帧率封装,适用于直播流。
  • codec_tag编码器标签
    定义支持的编码器列表,按优先级排序,用于匹配最佳编码器。

  • priv_data_size私有数据
    存储格式特定的上下文信息(如FLV的FLVContext),用于自定义参数。

四、使用场景与示例
1. 获取输出格式

通过文件名或扩展名查找支持的封装器:

AVOutputFormat *fmt = av_guess_format("flv", NULL, NULL);  // 获取FLV封装器
2. 初始化封装上下文

AVOutputFormat绑定到AVFormatContext

AVFormatContext *oc = NULL;
avformat_alloc_output_context2(&oc, fmt, NULL, "output.flv");  // 关联格式并分配上下文
3. 自定义封装器实现

以FLV为例,需实现关键函数接口:

AVOutputFormat ff_flv_muxer = {
    .name = "flv",
    .long_name = "FLV (Flash Video)",
    .priv_data_size = sizeof(FLVContext),  // 私有上下文
    .audio_codec = AV_CODEC_ID_MP3,
    .video_codec = AV_CODEC_ID_FLV1,
    .write_header = flv_write_header,      // 自定义头部写入
    .write_packet = flv_write_packet,      // 数据包写入逻辑
};
五、与其他组件的关系
  1. AVFormatContext
    AVOutputFormat作为其oformat成员,驱动封装流程。

  2. AVCodecContext
    通过audio_codecvideo_codec关联默认编码器参数,影响流配置。

  3. 私有数据(如FLVContext
    存储格式特定的上下文信息,例如FLV的元数据或时间戳处理逻辑。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值