实践出真知。通过实践才能发现更多的问题。在学习新的技术的时候也是这样。今天通过学习FFmpeg解码视频,实现一个Qt 和ffmpeg播放视频的小栗子。当然刚开始学习难免会到网上查询一下资料,然后结合自己的理解重新实现一下。具体参考哪一篇文章,我似乎也不记得了,但我记得还是好多东西都是参考雷神的博客才一步一步实践出来的。如果要学习音视频开发一定要去看雷神的博客。
说了太多废话,看一下如何配置环境。由于是在Qt中开发的,所以需要安装Qt,而IDE自然是使用QtCreator,如果你要使用visual studio,那么我也不能强求你。接下来是下载FFmpeg的库文件,可以直接去官网ffmpeg的官网下载,那里有着丰富的介绍,可惜的是我没有找到过中文版的文档。它会给你指出两个windows下可以使用的别人编译好的ffmpeg的库文件。
首先使用QtCreator创建一个项目,我把它命名为videoplayer,虽然能播放视频,但没有声音,而且播放速度还很快。在Qt项目管理配置pro文件中,添加上
1 | INCLUDEPATH += D:/ffmpeg/include |
以上两行,目的是为了添加ffmpeg的头文件,在链接的时候链接到ffmpeg的库文件。
首先是界面设计 如下(很简单):
打开文件,就是让你选择一个文件,播放就是播放视频,而TextLabel则是为了显示解码出的一帧帧图像。
流程图如下:
部分代码讲解如下:
打开解码视频文件并绑定AVFormatContext,并找到其中流信息
1 | AVFormatContext *pFormatCtx = avformat_alloc_context(); |
打开解码器,设置转换解码参数:
1 | AVCodecContext *pCodecCtx = pFormatCtx->streams[video_stream_index]->codec; |
读取每一帧并播放:
1 | int got_frame = 0; |
实现代码如下:
widget.cpp
1 |
|
widget.h
1 |
|
main.cpp
1 |
|