2017.11.21 正式开始FFmpeg的学习 学习充实自己提高自己

来源:互联网 发布:java校验图片尺寸 编辑:程序博客网 时间:2024/05/16 12:08

关于音视频编解码等一系列知识,打算实际操作一个demo代码然后通过代码深入学习ffmpeg,下列代码打算:ffmpeg作编解码,SDL作视频音频显示。


             1.vc下FFmpeg开发环境的搭建:头文件(.h)拷贝到项目文件的include子文件夹下;(.lib)拷贝到项目的lib子文件夹下;(.dll)拷贝到项目文件夹下。

            2.FFmpeg一共8个库:

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

                           2.avfomat:封装格式处理

                           3.avfilter:滤镜特效处理

                           4.avdevice:各种设备的输入输出

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

                           6.postproc:后加工

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

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

              3.FFmpeg解码流程图:

                                       

av_register_all()----------->

                                      avformat_open_input()------------->

                                                                                  avfomat_find_stream_info()--------------------->

                                     avcodec_find_decoder()-------------->

                                                                                   avcodec_open2()------------------>

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

                                                                                                                     av_read_frame()---->Get Packet?------------->(TRUE)AVPacket------------>avcodec_decode_vodeo2()----------->AVFrame--------------->Show On Screen.......

(FALSE)Close...

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

整个解码的流程大概是这样:

            av_register_all(首先都会注册一下)------------>avfomat_open_input(打开输入的文件)----------------------------->avfomat_find_stream_info(查找视频流相关信息)

----------------->avcodec_find_decoder(根据视频流相关信息,查找对应的解码器)------------------->avcodec_open2(打开查找到的解码器)

----------------->av_read_frame(开始循环读取一帧一帧的视频流数据)---------------------->如果读取失败则度到了文件末尾,则关闭。-------------------->如果读取成功---------------->AVPacket(调用该函数,该函数里放的是H。264这样形式的数据)----------------------->avcodec_decode_video2(真正的开始进行解码)--------------------------->AVFrame(该函数里放的是YUV此类型的像素数据)----------->Show On Screen


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

FFmpeg解码的数据结构体:

                                                                                                     ----------->AVInputFomat(说明编码其类型以及封装格式有哪些)

                                                                                                     |

      AVFomatContext(Audio And Vdieo封装格式上下文)----------->AVStream[0](视频流)-------->AVCodecContext(视频流上下文)------>AVCodec(指明了编码器类型)

                                                                                                      |

                                                                                                       ---------->AVStream[1](音频流)--------->AVCodecContext(音频流上下文)------>AVCodec(指明了编码器类型)


     AVPaket(解码前保存的一帧一帧的数据)--------------------->Decode------------------------->AVFrame(解码后保存的一帧一帧的数据)

-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


FFmpeg数据结构体简介:

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

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

               AVStream:视频文件中每个视频/音频流对应一个该结构体

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

               AVcodec:每种音视频编解码器(例如H264解码器)对应一个该结构体

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

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

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

几个结构体的初始化销毁函数列表:

结构体

 

初始化

销毁

AVFormatContext

avformat_alloc_context()

avformat_free_context()

AVIOContext

avio_alloc_context()

 

AVStream

avformat_new_stream()

 

AVCodecContext

avcodec_alloc_context3()

 

AVFrame

av_frame_alloc();

av_image_fill_arrays()

av_frame_free()

AVPacket

av_init_packet();

av_new_packet()

av_free_packet


























https://wenku.baidu.com/view/21edbceedc3383c4bb4cf7ec4afe04a1b071b081.html

http://blog.csdn.net/ethercat_i7/article/details/52858758











原创粉丝点击