安卓视音频基础(二)ffmpeg库的简介、解码函数简介、数据结构简介

FFmpeg一共包含8个库

avcodec:编解码(最重要的库)

avformat:封装格式处理。

avfilter:滤镜特效处理。 

avdevice:各种设备的输入输出。

avutil:工具库(大部分库都需要这个库的支持)。

postproc:后加工。

swresample:音频采样数据格式转换。

swscale:视频像素数据格式转换。


 FFmpeg解码的流程图如下所示: (这里借鉴一下雷神的ppt)

分析一下解码函数

av_register_all():注册所有组件。

avformat_open_input():打开输入视频文件。

avformat_find_stream_info():获取视频文件信息。

avcodec_find_decoder():查找解码器。

avcodec_open2():打开解码器。

av_read_frame():从输入文件读取一帧压缩数据。

avcodec_decode_video2():解码一帧压缩数据。

avcodec_close():关闭解码器。

avformat_close_input():关闭输入视频文件


AVFormatContext    封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装 格式相关信息。

                                   iformat:         输入视频的AVInputFormat

                                   nb_streams : 输入视频的AVStream 个数

                                   streams :       输入视频的AVStream []数组

                                   duration :       输入视频的时长(以微秒为单位)

                                   bit_rate :        输入视频的码率 

AVInputFormat    每种封装格式(例如FLV, MKV, MP4, AVI)对应一个该结构体。

                                   name:         封装格式名称

                                   long_name:封装格式的长名称

                                   extensions: 封装格式的扩展名

                                   id:               封装格式ID

                                   一些封装格式处理的接口函数

AVStream    视频文件中每个视频(音频)流对应一个该结构体。

                                   id:                  序号

                                   codec:           该流对应的AVCodecContext

                                   time_base:    该流的时基

                                   r_frame_rate:该流的帧率

AVCodecContext    编码器上下文结构体,保存了视频(音频)编解码相关信息。

                                   codec:          编解码器的AVCodec

                                   width, height:图像的宽高(只针对视频)

                                   pix_fmt:         像素格式(只针对视频)

                                   sample_rate: 采样率(只针对音频)

                                   channels:       声道数(只针对音频)

                                   sample_fmt:  采样格式(只针对音频

AVCodec    每种视频(音频)编解码器(例如H.264解码器)对应一个该结构体。

                                   name:         编解码器名称

                                   long_name:编解码器长名称

                                   type:           编解码器类型

                                   id:               编解码器ID

                                   一些编解码的接口函数

AVPacket    存储一帧压缩编码数据。

                                   pts:                 显示时间戳

                                   dts :                解码时间戳

                                   data :              压缩编码数据

                                   size :               压缩编码数据大小

                                   stream_index :所属的AVStream 

AVFrame    存储一帧解码后像素(采样)数据。 

                                   data:            解码后的图像像素数据(音频采样数据)。

                                   linesize:        对视频来说是图像中一行像素的大小;对音频来说是整个音 频帧的大小。

                                   width, height:图像的宽高(只针对视频)。

                                   key_frame:    是否为关键帧(只针对视频) 。

                                   pict_type:       帧类型(只针对视频) 。例如I,P,B

猜你喜欢

转载自blog.csdn.net/we1less/article/details/108926719