1. 背景
ffmpeg是一个巨大的开源宝库,其中的ffplay是音视频开发者不能不看的优秀框架案例。静态的代码固然晦涩难明,如果能够调试和添加log,对于我们的研究学习当然会事半功倍,单独编译ffplay便是出于此目的。
2. 环境
- 本文是在mac进行的实验,linux和win的情况大致类似。
- 需要安装SDL2
- 最好是之前有源码编译过一次ffmpeg,并且系统中存放的库和本次ffplay编译需要的一致(换言之,同一包代码里面出来的),以免发生由于版本不同函数link不到的现象。ffmpeg6.0的编译可以参考我的另外一篇文章FFmpeg编译及开发环境搭建
3. 项目搭建
3.1 代码目录
首先新建Qt qmake项目,然后移植ffmpeg目录下的代码,整体结构如下。
# 当前工作环境目录
ffplay_qmake
├── cmdutils.c
├── cmdutils.h
├── ffplay.c
├── ffplay_qmake.pro
├── ffplay_qmake.pro.user
├── fopen_utf8.h
├── opt_common.c
└── opt_common.h
其中ffplay_qmake.pro,ffplay_qmake.pro.user为Qt项目生成,.pro文件需要我们具体提供构建指令,.user为QtCreator使用,我们不必修改。
另外,ffplay.c, cmdutils.h, cmdutils.c, opt_common.h, opt_common.c, fopen_utf8.h这些文件均拷贝于ffmpeg源码的fftools目录。
另外说明下这里的构建原则,对于fftools文件夹里面的代码,需要源码编译,所以需要拷贝到项目中。对于ffmpeg几大.so库, 以静态连接的方式引入使用。
3.2 qmake构建指令
下面是ffplay_qmake.pro文件中的内容
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
# CONFIG -= qt
INCLUDEPATH += /usr/local/include/SDL2 \
/usr/local/include/ \
/Users/zhou/workspace/third_src/ffmpeg_src/FFmpeg \ # 这里是ffmpeg的源码目录
LIBS += -L/usr/local/lib/ \
-lavutil \
-lavformat \
-lavdevice \
-lavfilter \
-lswresample \
-lswscale \
-lpostproc \
-lavcodec \
-lSDL2 \
SOURCES += cmdutils.c \
ffplay.c \
opt_common.c
HEADERS += \
cmdutils.h \
fopen_utf8.h \
opt_common.h