网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
解码的流程图,如下所示:
🔴解码思路分析:
- 注册所有的组件 av_register_all()
- 打开视频文件 avformat_open_input() 有可能打开失败
- 获取视频信息 视频码流、音频码流、文字码流
- 查找流信息 avformat_find_stream_info()
- 找到解码器 avcodec_find_decoder() 有可能没找到
- 打开解码器 avcodec_open2()
- 读取码流中的一帧码流数据 av_read_frame()
- 解码读到一帧码流数据 得到一帧的像素数据 YUV RGB
- 重复7-8的动作直到视频所有的帧都处理完
- 关闭解码器
- 关闭视频文件
🔴解码过程中几个重要的结构体:
- AVFormatContext
封装格式上下文结构体,也是统领全局的结构体,保存了视频文件封装格式相关信息。
- AVInputFormat//AVOutpufFormat
每种封装格式(例如FLV, MKV, MP4, AVI)对应一个该结构体。
- AVStream
视频文件中每个视频(音频)流对应一个该结构体。
- AVCodecContext
编码器上下文结构体,保存了视频