同上面所写的两篇文章,本篇依然是介绍FFmpge的相关操作,前一篇讲的是视频压缩,本篇则相反的讲视频的解码。废话不多说,直接上代码吧。
同理于上篇,本篇先设计一个视频解码相关的类,定义如下:
class Ffmpeg_Decoder
{
public:
AVCodecParserContext *avParserContext;
AVPacket avpkt; //数据包结构体
AVFrame *m_pRGBFrame; //帧对象
AVFrame *m_pYUVFrame; //帧对象
AVCodec *pCodecH264; //解码器
AVCodecContext *c; //解码器数据结构对象
uint8_t *yuv_buff; //yuv图像数据区
uint8_t *rgb_buff; //rgb图像数据区
SwsContext *scxt; //图像格式转换对象
uint8_t *filebuf; //读入文件缓存
uint8_t *outbuf; //解码出来视频数据缓存
int nDataLen; //rgb图像数据区长度
IplImage* img; //OpenCV图像显示对象
uint8_t *pbuf; //用以存放帧数据
int nOutSize; //用以记录帧数据长度
int haveread; //用以记录已读buf长度
int decodele
本文介绍了如何使用FFmpeg进行视频解码,从H264视频流转换为图像。首先定义了一个视频解码类,并详细解释了类中的关键函数。接着展示了主函数部分,演示了从文件或网络数据流中读取并解码的过程。作者还提供了工程下载链接,但警告旧版代码可能存在性能问题,建议根据最新版FFmpeg进行调整。文章末尾给出了作者维护的ffmpeg解码应用类,需要注意码流开头的特定标识来确保解码成功。
订阅专栏 解锁全文

5393

被折叠的 条评论
为什么被折叠?



