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

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

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





