FFMPEG常用函数
avformat_alloc_context 函数 : 用于 申请 AVFormatContext 结构体内存 , 并 对 结构体的字段 进行简单初始化操作 ;
avformat_free_context 函数 : 释放 AVFormatContext 结构体 及其 关联的资源 ;
avformat_open_input 函数 : 使用 解复用器 打开 视频文件 / 媒体流 ;
avformat_close_input 函数 : 关闭 解复用器 ;
avformat_find_stream_info 函数 : 获取 媒体流信息 ;
av_read_frame 函数 : 读取 媒体流 中的 AVPacket 数据包 ;
avformat_seek_file 函数 : 根据 时间戳 跨多个流 定位文件 中的位置 ;
av_seek_frame 函数 : 根据 时间戳 跳转到指定流的指定位置 ;
AVCodecParameters 结构体
AVCodecParameters 结构体 定义在 libavcodec/avcodec.h 头文件 中 , 该结构体中 的成员分为如下几类 :
通用参数 : 媒体类型 codec_type , 编解码器 ID codec_id , 编码器标记 codec_tag , 比特率 bit_rate ;
视频流参数 : 视频宽高 width height , 像素格式 format , 画面宽高比 sample_aspect_ratio ;
音频流参数 : 音频采样率 sample_rate , 声道数 channels , 采样位数 format , 每帧采样数 frame_size ;
字幕流参数 : 字幕宽高 width height , 字幕像素格式 format ;
媒体流类型
在 AVStream 结构体 中 的 AVCodecParameters *codecpar 结构体成员 中 的 enum AVMediaType codec_type 枚举成员 表示的是 媒体流类型 ;
AVMediaType 枚举 表示 媒体流类型 , 该枚举 定义在 libavutil/avutil.h 文件中 ;
下面是 AVMediaType 枚举 的原型 :
typedef enum AVMediaType {
AVMEDIA_TYPE_UNKNOWN = -1, /**< 未知类型 */
AVMEDIA_TYPE_VIDEO, /**< 视频 */
AVMEDIA_TYPE_AUDIO, /**< 音频 */
AVMEDIA_TYPE_DATA, /**< 数据 (通常为未解码的补充数据) */
AVMEDIA_TYPE_SUBTITLE, /**< 字幕 */
AVMEDIA_TYPE_ATTACHMENT, /**< 附件 (如字体或图片) */
AVMEDIA_TYPE_NB /**< 媒体类型的数量 (仅用于计数) */
} AVMediaType;
AVMEDIA_TYPE_UNKNOWN : 未知 媒体流 类型 , 如果没有识别出流的类型就会设置 该枚举选项 ;
AVMEDIA_TYPE_VIDEO : 视频流 类型 , 包括编码的或未编码的 视频帧数据 , 如 : H.264 ;
AVMEDIA_TYPE_AUDIO : 音频流 类型 , 包括各种音频编码格式 , 如 : acc / mp3 / pcm ;
AVMEDIA_TYPE_DATA : 数据流 类型 , 包含 未解码 或 额外的非音视频数据 , 如 : 元数据 / 统计信息 ;
AVMEDIA_TYPE_SUBTITLE : 字幕流 类型 , 包含 ASS / SRT 文字字幕 或 图片字幕 ;
AVMEDIA_TYPE_ATTACHMENT : 附件流 类型 , 通常为媒体文件中包含的 字体 或 缩略图 等 外部资源 ;
AVMEDIA_TYPE_NB : 媒体类型的数量 , 用于标记 AVMediaType 中的枚举条目总数 ;