

















函数说明
avformat_open_input:打开视频文件:读取文件头,将文件格式信息存储在"fmt context"中;
avformat_find_stream_info:搜索流信息:读取一段视频文件数据,尝试解码,将读取到的流信息填入pFormatCtx->streams;
avcodec_find_decoder:利用解编码器的id获取解解码器;
avcodec_open2:编解码器的初始化;
调用av_read_frame()从输入文件中读取视频数据包,调用avcodec_send_packet()和avcodec_receive_frame()对视频数据解码。
图像格式转换的目的,是为了解码后的视频帧能被 SDL 正常显示,因为FFmpeg解码后得到的图像格式不一定就能被SDL支持,这种情况下不作图像转换是无法正常显示的。
定时刷新线程 + 解码主线程,定时刷新线程按计算出的帧率发送自定义 SDL 事件,通知解码主线程。解码主线程收到 SDL 事件后,获取一个视频帧解码并显示。
codec:编解码器,对应数据结构 AVCodec。编码器将未压缩的原始图像或音频数据编码为压缩数据。解码器与之相反。
codec context:编解码器上下文,对应数据结构 AVCodecContext。此为非常重要的一个数据结构,后文分析。各API大量使用 AVCodecContext 来引用编解码器。
codec par:编解码器参数,对应数据结构 AVCodecParameters。新版本增加的字段。新版本建议使用 AVStream->codepar 替代 AVStream->codec。
packet:经过编码的数据包,对应数据结构 AVPacket。通过 av_read_frame() 从媒体文件中获取得到的一个 packet 可能包含多个(整数个)音频帧或单个视频帧,或者其他类型的流数据。
frame:未编码的原始数据帧,对应数据结构 AVFrame。解码器将 packet 解码后生成 frame。
plane:如 YUV 有 Y、U、V 三个 plane,RGB 有 R、G、B 三个 plane。
此处指播放视频文件里面的音频,即仅播放视频文件中的声音,而不显示图像。

注意:

从**解复用器(Media Extractor、AVFormatContetext->stream)**开始,会有两个线程分别负责解析音频和视频。

音频:PCM->ACC数据,视频:YUV->H264,音视频封装:FLV / MP4。



I帧是一个关键帧,能够独立解码并显示画面,可指定I帧出现的频率。


常用的是H264。



