FFmpeg 基本API avformat_open_input函数内部调用流程分析

1、avformat_open_input 函数定义说明

avformat_open_input 是 FFmpeg 库中的一个函数,用于打开一个输入 URL,并创建一个 AVFormatContext 结构体的指针。在使用 FFmpeg 进行音视频处理时,通常需要先调用这个函数来创建一个 AVFormatContext 对象。

函数原型如下:

cpp 复制代码
int avformat_open_input(AVFormatContext **ps, const char *url, AVInputFormat *fmt, AVDictionary **options);

参数说明:

  • AVFormatContext** 指向 AVFormatContext 对象指针的地址。函数会分配或初始化此上下文。
  • const char* url媒体文件的路径或URL。可以是本地文件,也支持网络流(如rtmp://, http://)。
  • AVInputFormat* fmt强制指定输入文件的封装格式。通常传 NULL,让FFmpeg自动探测格式。
  • AVDictionary** options一个字典,用于传递特定于格式或设备的额外选项。可以为 NULL。

2、avformat_open_input详细创建过程说明

详细过程已经在 FFmpeg 播放播放 HTTP网络流读取数据过程分析 详细说明具体创建过程。

3、avformat_open_input调用流程说明

4、avformat_open_input使用实例

cpp 复制代码
#include <libavformat/avformat.h>

int main() {
    AVFormatContext *formatCtx = NULL;
    const char *filename = "test.mp4";
    
    // 打开输入文件
    int ret = avformat_open_input(&formatCtx, filename, NULL, NULL);
    if (ret < 0) {
        char errbuf[128];
        av_strerror(ret, errbuf, sizeof(errbuf));
        fprintf(stderr, "无法打开输入文件 '%s': %s\n", filename, errbuf);
        return -1;
    }

    /****** 其他操作 *****/
    // 关闭并释放资源
    avformat_close_input(&formatCtx);
    return 0;
}
相关推荐
刻BITTER4 小时前
用CMake 实现U8g2 的 SDL2 模拟环境
c++·stm32·单片机·嵌入式硬件·arduino
三贝勒文子4 小时前
C++ 多线程实战 14|如何系统性避免死锁
c++
Yupureki4 小时前
从零开始的C++学习生活 9:stack_queue的入门使用和模板进阶
c语言·数据结构·c++·学习·visual studio
远远远远子4 小时前
C++-- 内存管理
c++·算法
小年糕是糕手4 小时前
【数据结构】单链表“0”基础知识讲解 + 实战演练
c语言·开发语言·数据结构·c++·学习·算法·链表
Dobby_055 小时前
【Go】C++ 转 Go 第(一)天:环境搭建 Windows + VSCode 远程连接 Linux
linux·运维·c++·vscode·golang
咸鱼爱学习5 小时前
【题解】B2613【深基1.习5】打字速度
数据结构·c++·算法
一匹电信狗5 小时前
【C++】C++风格的类型转换
服务器·开发语言·c++·leetcode·小程序·stl·visual studio
syt_biancheng5 小时前
C++ 多态(1)
jvm·c++·学习