3 ffmpeg+sdl学习笔记-ffmpeg视频解码

1.视频解码知识
封装格式文件-》H.264码流-》YUV像素
 
2.VC开发环境
ffmpeg开发文件拷贝
.h copy到include文件夹 (配置属性 C/C++ 常规 附加包含目录)
.lib copy到lib文件夹(配置属性 链接器 常规 附加库目录)(配置属性 链接器 输入 附加依赖项 输入分号隔开的所有lib文件名)
.dll copy到新项目文件夹下(不需要配置)
 
测试是否配置成功:包含头文件(C++下有特殊写法,因为ffmpge的原始库为C环境)-》调用某个函数
 
3.ffmpge类库介绍
4.ffmpge解码流程
av_register_all()//注册所有组件
avformat_open_input()//打开输入流
avformat_find_stream_info()//从打开的文件获取基本信息
avcodec_find_decoder()//找对应的解码器
avcodec_open2()//打开解码器
av_read_frame()//读取一帧压缩的视频数据 即一帧h264码流,判断是否拿到一个AVPacket
avcodec_decode_video2()//将AVPacket(装的H264)解码为AVFrame(装的YUV)
 
5.相关数据结构
 
AVFormatContext封装格式的上下文,视频最外层信息
AVInputFormat(AVFormatContext结构体的iformat属性) 文件的封装格式,比如FLV
AVStream(AVFormatContext结构体的streams数组的一个分量,数组长度nb_streams 通常为2)
,通常0为视频流,1为音频流
AVCodecContext (AVStream 结构体的codec) 编解码上下文
AVCodec (AVCodecContext 结构体的codec) 编码器类型 比如H264
AVPacket解码前存储的一帧数据H264 (pts是一个整数,基于前面的time_base得到秒,将data依次写入得到H264文件)
AVFrame解码后存储的一帧数据YUV(将data按分量依次写入得到YUV文件,注:解码后得到的YUV需要经过sws_scale转换去掉一些无效数据)
6.文件操作
FILE *fp
fopen
fwrite
fprintf
fclose
 
 
 
 
 
 
posted @ 2016-03-19 17:37  cucr  阅读(390)  评论(0)    收藏  举报