【Qt+FFmpeg】FFmpeg解码本地视频流程

本文介绍了视频播放器的实现框架,包括解封装、解码及音视频同步等关键步骤,并详细解析了使用FFmpeg进行视频解码的具体流程,涵盖了从初始化环境到循环解码直至释放资源的全过程。

 目录

一、视频播放器的实现框架

1.解封装(Demuxing)

2.解码(Decode)

3.音视频同步

二、FFmpeg解码视频流程

1.FFmpeg解码视频流程图

2. 代码实现

一、视频播放器的实现框架

 

1.解封装(Demuxing)

将输入的封装格式的数据,分离成为音频流压缩编码数据视频流压缩编码数据。封装格式种类很多,例如 MP4,MKV,RMVB,TS,FLV,AVI 等,它的作用就是将已经压缩编码的视频数据和音频数据按照一定的格式放到一起。例如,FLV 格式的数据,经过解封装操作后,输出 H.264 编码的视频码流AAC 编码的音频码流

2.解码(Decode)

视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含 AAC,MP3 等,视频的压缩编码标准则包含 H.264,MPEG2 等。解码是整个系统中最重要也是最复杂的一个环节。通过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如 YUV、RGB 等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如 PCM 数据

3.音视频同步

根据解封装模块处理过程中获取到的参数信息,同步解码出来的音频和视频数据,并将音视频频数据送至系统的显卡和声卡播放出来(Render)。

二、FFmpeg解码视频流程

1.FFmpeg解码视频流程图

音频解码后面会专门出一期介绍,这边就先不说了;

2. 代码实现

头文件中类的数据成员和信号

    //视频文件上下文格式
    AVFormatContext* avformat_context;
    //编解码器上下文格式
    AVCodecContext* avcodec_context;
    //解码器上下文格式
    AVCodec* avcodec;
    //数据包
    AVPacket* av_packet;
    //保存视频流的索引
    int av_stream_index;
    //帧数据
    AVFrame *pFramein;
    AVFrame *pFrameRGB;
    uint8_t * pOutbuffer;
    int ret;
    QImage m_image;
signals:   
    //发送解码得到的每一帧像素数据--保存的图片信息
    void sigGetOneFrame(QI
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

logani

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值