我总结了FFmpeg的一些基础知识:
(1)FFmpeg中的八个库:
(2)视频解码的流程图:
各个函数的功能如下:
av_register_all():注册所有的组件
avformat_open_input():打开输入码流
avformat_find_stream_info():查找码流信息
avcodec_find_decoder():查找解码器
avcodec_open2():打开编解码器
av_read_frame():读取一帧数据
avcodec_decode_video2():解码一帧数据 (是最主要的方法)
在解码中,结构体如下:
AVFormatContext:分装格式上下文结构体,包含视频最外层信息,专门处理封装格式。
包含的结构体变量有:
iformat:输入视频的AVInputFormat
nb_streams:输入视频的AVStream个数
streams:输入视频的AVStream []数组
duration:输入视频的时长
bit_rate:输入视频的码率
AVInputFormat:指明文件用哪种封装格式。
包含的结构体变量有:
name:封装格式名字
long_name:封装格式的长名称
extensions:封装格式的扩展名
id:封装格式的ID
一些封装格式处理的接口函数
AVStream[ ] :指明是哪一种视频流或者音频流,一般情况下,0代表的是视频流,1代表的是音频流。
包含的结构体变量有:
id:序号
codec:该流对应的AVCodecContext
time_base:该流的时基
r_frame_rate:该流的帧率
AVCodecContext:编解码上下文结构体,保存视音频编解码的相关信息,专门处理编解码。
包含的结构体变量有:
codec:编解码器的AVCodec
width,height:图像的宽高
pix_fmt:像素格式
sample_rate:采样率
channels:声道数
sample_fmt:采样格式
AVCodec:指明编码器
包含的结构体变量有:
name:编解码器名称
long_name:编解码器长名称
type:编解码器类型
id:编解码器ID
一些编解码的接口函数
(3)音频播放流程
(4)SDL显示流程