FFmpeg的入门实践系列五(编程入门之属性查看)

在这里插入图片描述

欢迎诸位来阅读在下的博文~
在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力

前期博客

FFmpeg的入门实践系列一(环境搭建)
FFmpeg的入门实践系列二(基础知识)
FFmpeg的入门实践系列三(基础知识)
FFmpeg的入门实践系列四(AVS)

参考书籍

《FFmpeg开发实战——从零基础到短视频上线》——欧阳燊

一、AVFormatContext结构体

AVFormatContext 是 FFmpeg 中用于处理多媒体文件格式的一个核心结构体。它包含了文件的格式信息,以及与文件相关的流信息,如音频流、视频流和字幕流。以下是 AVFormatContext 的详细信息:

1. 结构定义

typedef struct AVFormatContext {
   
    const AVClass *av_class;       // AVClass提供日志处理等功能
    struct AVInputFormat *iformat; // 输入格式
    struct AVOutputFormat *oformat;// 输出格式
    void *priv_data;               // 私有数据,特定于输入或输出格式
    AVIOContext *pb;               // 读写数据的IO上下文
    int ctx_flags;                 // 上下文标志
    
    unsigned int nb_streams;       // 流的数量
    AVStream **streams;            // 指向流的指针数组
    char filename[1024];           // 文件名
    // 一些时间基准和时长信息
    int64_t duration;              // 文件时长
    int64_t bit_rate;              // 比特率
    unsigned int packet_size;      // 数据包大小
    int max_delay;                 // 最大延迟
    // 其他与解码、时序、元数据等相关的字段
    AVDictionary *metadata;        // 文件元数据,如标题、作者等
    // 其他字段省略...
} AVFormatContext;

2. 字段说明

  • av_class:指向 AVClass 的指针,用于日志处理、调试和其他全局设置。
  • iformatoformat:分别指向输入格式和输出格式结构体。用于定义当前上下文是用于输入还是输出。
  • priv_data:格式特定的私有数据,通常由特定的输入或输出格式使用。
  • pbAVIOContext 用于管理输入输出操作的上下文,比如读写文件或网络数据。
  • ctx_flags:用于标志一些上下文状态,比如是否允许缺少流、是否实时流等。
  • nb_streams:表示文件中包含的流的数量(音频流、视频流、字幕流等)。
  • streams:一个指向 AVStream 指针数组的指针,每个 AVStream 结构体包含一个具体流的信息。
  • filename:文件名或 URL,用于标识输入或输出资源。
  • duration:表示文件的总时长,以 AV_TIME_BASE(通常是微秒)为单位。
  • bit_rate:文件的总比特率(包括所有流)。
  • packet_size:数据包的大小,主要用于输出。
  • max_delay:最大延迟,用于管理实时流的延迟处理。
  • metadata:文件的元数据,存储在一个 AVDictionary 中。

3.示例1(打开与关闭音视频文件)

#include <stdio.h>
#ifdef __cplusplus
extern "C"
{
   
#endif
#include <libavformat/avformat.h>
#include <libavutil/avutil.h>
#ifdef __cplusplus
};
#endif

int main(int argc, char** argv){
   
    const char* filename = "./fuzhou.mp4";
    if(argc > 1){
   
        filename = argv[1];
    }
    AVFormatContext* fmt_ctx = NULL;
    //打开音视频文件
    int ret = avformat_open_input(&fmt_ctx, filename, NULL, NULL);
    if(ret < 0){
   
        av_log(NULL, AV_LOG_ERROR, "open file:%s fail\n", filename);
        return -1;
    }
    av_log(NULL, AV_LOG_INFO, "success open input_file %s \n", filename);
    // 查找音视频文件中的流信息
    ret = avformat_find_stream_info(fmt_ctx, NULL);
    if(ret < 0){
   
        av_log(NULL, AV_LOG_ERROR, "find streaminfo fail\n");
        return -1;
    }
    av_log(NULL, AV_LOG_INFO, "success find streaminfo\n");
    const AVInputFormat* iformat = fmt_ctx->iformat
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值