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

本文深入剖析了FFmpeg的解码流程,包括av_register_all()、avformat_open_input()等关键步骤,并详细介绍了AVFormatContext、AVInputFormat、AVStream和AVCodecContext等核心结构体的作用和功能,帮助读者理解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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值