文章目录
- 一、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>