当前位置: 首页 > news >正文

FFmpeg开发学习:AVFormatContext结构体

1.AvFormatContext结构体

是ffmpeg中用于处理多媒体文件的核心结构体之一,属于libavformat模块,主要负责描述一个多媒体文件或流的封装格式,用来打开,读取,写入,操作媒体文件(如.MP4 .mkv .flv等)

2.AvFormatContext常用字段

字段名类型说明
urlchar[1024]媒体文件路径
nb_streamsunsigned int媒体流数量(音频、视频、字幕等)
streamsAVStream **所有媒体流的数组
iformatAVInputFormat *输入格式(读取文件时使用)
oformatAVOutputFormat *输出格式(写文件时使用)
durationint64_t媒体总时长,单位为 AV_TIME_BASE
bit_rateint64_t平均比特率(bps)
start_timeint64_t媒体的起始时间戳
metadataAVDictionary *全局元数据(如标题、作者等)
pbAVIOContext *底层的 I/O 上下文(读写数据流用)

3.AvFormatContext的常用相关方法

函数名参数列表返回类型功能说明
avformat_alloc_contextAVFormatContext*分配并初始化 AVFormatContext(需手动释放)
avformat_open_inputAVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **optionsint打开输入文件或流,并分配填充 AVFormatContext
avformat_find_stream_infoAVFormatContext *ic, AVDictionary **optionsint读取并分析媒体流信息(如分辨率、采样率等)
av_read_frameAVFormatContext *s, AVPacket *pktint读取一帧压缩的音频或视频数据(存入 AVPacket)
av_seek_frameAVFormatContext *s, int stream_index, int64_t timestamp, int flagsint按时间戳跳转媒体位置
avformat_close_inputAVFormatContext **svoid关闭输入文件并释放资源
av_dump_formatAVFormatContext *ic, int index, const char *url, int is_outputvoid打印文件的封装信息(流、格式、时长、码率等)
avformat_alloc_output_context2AVFormatContext **ctx, AVOutputFormat *oformat, const char *format_name, const char *filenameint创建输出文件的 AVFormatContext(推流或录制时使用)
av_interleaved_write_frameAVFormatContext *s, AVPacket *pktint将数据包写入输出媒体文件(带交错处理)
av_write_trailerAVFormatContext *sint写入尾部信息(完成文件封装)
avformat_free_contextAVFormatContext *svoid释放 AVFormatContext 所占用内存

4.常用字段的程序示例

#ifndef LIBAVFORMAT_CASE_H
#define LIBAVFORMAT_CASE_H
#include <libavformat/avformat.h>

inline void printAVFormatContextCase(const char* input) {
    AVFormatContext *fmt_ctx = nullptr;
    avformat_open_input(&fmt_ctx, input, nullptr, nullptr);

    if(!fmt_ctx) {
        fprintf(stderr, "open file failed\n");
        return ;
    }

    printf("Filename: %s\n", fmt_ctx->url);
    printf("Number of streams: %u\n", fmt_ctx->nb_streams);
    printf("Duration (s): %.2f\n", fmt_ctx->duration / (double)AV_TIME_BASE);
    printf("Bitrate: %lld\n", fmt_ctx->bit_rate);
    printf("Start time: %lld\n", fmt_ctx->start_time);

    if (fmt_ctx->iformat)
        printf("Input format: %s\n", fmt_ctx->iformat->name);

    // 打印元数据
    AVDictionaryEntry *tag = NULL;
    while ((tag = av_dict_get(fmt_ctx->metadata, "", tag, AV_DICT_IGNORE_SUFFIX))) {
        printf("Metadata: %s = %s\n", tag->key, tag->value);
    }

    avformat_close_input(&fmt_ctx);
}

在这里插入图片描述

相关文章:

  • 【大模型基础_毛玉仁】3.4 Prompt 技巧
  • 深度学习四大核心架构:神经网络(NN)、卷积神经网络(CNN)、循环神经网络(RNN)与Transformer全概述
  • C++的IO流
  • hackmyvm-jan
  • 如何在 React 项目中使用React.lazy和Suspense实现组件的懒加载?
  • Linux进程间的通信
  • 如何将3DMax模型转换到Blender?
  • 51单片机
  • 基于代理(http\https\socks)的网络访问逻辑重定义
  • 基于本人的专利设计三角形式的三组定子和中间的分形转子结构
  • 海外营收占比近4成,泡泡玛特全球化战略迎收获期
  • 33.[前端开发-JavaScript基础]Day10-常见事件-鼠标事件-键盘事件-定时器-案例
  • C++ 继承:面向对象编程的核心概念(二)
  • 中文字符计数器,助力所有python对齐业务(DeepSeek代笔)
  • 青藏高原湖泊的数量越来越多
  • Mem0 Prompt优化
  • 从手机到机器人:vivo 凭借用户主义重构科技价值
  • 旋转式花键在哪些工业领域应用较为广泛?
  • wps如何给word加水印
  • 告别AI幻觉:Cursor“知识库”技术实现85%的错误减少
  • 国际博物馆日|航海博物馆:穿梭于海洋神话与造船工艺间
  • 上博东馆常设陈列入选全国博物馆“十大精品”
  • 三方合作会否受政局变化影响?“中日韩+”智库合作论坛在沪举行
  • 打造信息消费新场景、新体验,上海信息消费节开幕
  • 当“小铁人”遇上青浦,看00后如何玩转长三角铁三
  • 民间打拐志愿者上官正义遭人身安全威胁,杭州公安:已立案