文章目录

  • 一、FFmpeg 注册初始化函数
  • 1、FFmpeg 组件注册函数 - av_register_all 函数 ( 4.0 已弃用 )
  • 2、FFmpeg 4.0 及以后版本的注册函数
  • 3、初始化网络功能 - avformat_network_init 函数
  • 4、初始化设备 - avdevice_register_all 函数







一、FFmpeg 注册初始化函数




1、FFmpeg 组件注册函数 - av_register_all 函数 ( 4.0 已弃用 )



在 4.0 之前的 FFmpeg 版本 中 , 使用 av_register_all 函数注册组件 , 以确保在 打开和处理媒体文件时 可以 正确 识别 和 使用 不同的格式和编解码器

  • 注册所有编解码器 : 包括音频和视频编解码器
  • 注册所有文件格式 : 包括常见的多媒体容器格式
  • 注册所有协议 : 注册 网络协议


av_register_all 函数在 4.0 版本时已经弃用 , 在老版本的 FFmpeg 版本中可能出现该函数代码 ;



av_register_all 函数原型 : 在 FFmpeg 的初始化过程中 必须 先 调用该函数 , 确保所有可用的编解码器和格式在程序开始时都已注册 ;

void av_register_all(void);



代码示例 : 调用该方法时 , 直接在代码最开始处调用即可 , 参数和返回值都是空 ;

#include <libavformat/avformat.h>
int main() {
    // 注册 所有编解码器 / 格式 / 网络协议
    av_register_all();
    
    // 其他 FFmpeg 初始化代码 ...
    
    return 0;
}



2、FFmpeg 4.0 及以后版本的注册函数



从 FFmpeg 4.0 版本开始,av_register_all 函数已被弃用 ;

新版本的 FFmpeg 采用了 更先进的初始化方式 , 不需要 显式 地注册 编解码器 和 文件容器格式 , 新的 初始化方式 会 自动注册所有必要的组件 ;

如果 涉及到 初始化网络协议 和 设备注册

  • avformat_network_init() 函数 : 注册网络协议相关的库 ;
  • avdevice_register_all() 函数 : 注册设备 ;


3、初始化网络功能 - avformat_network_init 函数



avformat_network_init 函数 用于 初始化网络 功能

  • 初始化网络模块 : 初始化 FFmpeg 的网络相关功能
  • 注册网络协议 : 注册要 使用的 各种网络协议

如果需要在程序中 处理网络相关协议 , 如 RTMP 直播 , 则必须调用该函数 ;



avformat_network_init 函数原型 :

int avformat_network_init(void);

该函数参数为空 , 返回值表示是否初始化成功 , 返回 0 表示网络初始化成功 , 如果返回值不为 0 说明网络初始化失败 ;



网络资源释放 : 如果调用 avformat_network_init 初始化了网络功能 , 在 程序退出是需要调用 avformat_network_deinit 函数释放网络资源 , 函数原型如下 :

void avformat_network_deinit(void);



代码示例 : 在下面的代码中 调用了 avformat_network_init 函数初始化网络 , 在程序末尾调用了 avformat_network_deinit 函数 释放网络资源 ;

#include <libavformat/avformat.h>

int main() {
    // 初始化网络模块
    if (avformat_network_init() < 0) {
        fprintf(stderr, "网络模块初始化失败\n");
        return -1;
    }

    // FFmpeg 具体逻辑

    // 释放网络资源
    avformat_network_deinit();

    return 0;
}



4、初始化设备 - avdevice_register_all 函数



avdevice_register_all 函数 用于 注册 当前运行 FFmpeg 程序的 平台上的 所有可用的 输入 / 输出 设备 , 使用这个函数可以 确保 所有 的 音视频 输入 / 输出 设备都被正确注册



avdevice_register_all 函数 功能 :

  • 注册所有音视频 输入 / 输出 设备 : 确保所有可用的 音视频 设备 都被注册
  • 初始化设备 : 确保所有 音视频设备 在使用前已被正确 初始化 ;

avdevice_register_all 函数原型 :

void avdevice_register_all(void);

该函数定义在 avdevice.h 中 , 使用该函数前需要导入头文件 :

#include <libavdevice/avdevice.h>