Linux下Qt creator搭建FFmpeg环境运行FFplay

背景

为了研究ffplay的源码细节,打算使用Qt Creator这个IDE中运行并调试打印ffplay,深入研究ffplay的播放细节。

解决的思路是:编译出ffplay编译依赖包(FFmpeg,SDL2),新建工程,在工程引入对应的头文件及库,编译运行ffplay。

安装SDL

ffplay底层使用的SDL进行渲染显示的,所以需要首先安装SDL。

官网

http://www.libsdl.org/

编译

# cd SDL2-2.0.12
# ./configure
# make ; make install

测试

# cd SDL2-2.0.12/test
# ./configure
# make
# ./testyuv

如果可以出现画面窗口,则表示SDL安装成功。

遇到的问题: No available video device

原因:缺少显示设备库

sudo apt-get install libx11-dev
sudo apt-get install xorg-dev

问题: /usr/bin/ld: cannot find -lGL

原因: 缺少GL库

apt-get install libgl1-mesa-dev

安装FFmpeg

安装x264

git clone https://code.videolan.org/videolan/x264.git
./configure --enable-shared --enable-static --disable-asm
make ; make install

安装FFmpeg

./configure --enable-gpl --enable-shared --enable-libx264 --enable-avresample --disable-x86asm
make ; make install

默认安装目录为/usr/local。

如果这样编译,是会报错的,原因是需要生成动态库。报错信息如下:

/usr/bin/ld: libavcodec/mqc.o: relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
libavcodec/mqc.o: error adding symbols: Bad value
collect2: error: ld returned 1 exit status
make: *** [libavcodec/libavcodec.so.57] Error 1

解决方式:

fPIC的全称是 Position Independent Code, 用于生成位置无关代码。
-fPIC:表示编译为位置独立的代码

在ffbuild目录下,编辑 config.mak:

CPPFLAGS= -D_ISOC99_SOURCE -D_FILE_OFFSET_BITS=64 -fPIC -D_LARGEFILE_SOURCE -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 -DPIC -DZLIB_CONST

在CPPFLAGS标志后面,增加-fPIC。注意:CFLAGS默认是有的,不要加错。

参考:https://blog.csdn.net/ssf1987/article/details/81118631

安装Qt Creator

从Qt官网下载:qt-opensource-linux-x64-5.12.3.run

增加可执行权限,运行安装即可。

新建工程

新建纯C工程,临时命名为hello1

修改hello1.pro如下:

TEMPLATE = app
CONFIG += console
CONFIG -= app_bundle
CONFIG -= qt

SOURCES += \
        cmdutils.c \
        ffplay.c

# The include path and libs of FFmpeg
INCLUDEPATH += /usr/local/include \
               /root/ffmpeg-3.4.7 \

LIBS += -L/usr/local/lib -lavformat \
                         -lavdevice \
                         -lavcodec  \
                         -lavfilter \
                         -lavutil   \
                         -lswresample \
                         -lswscale  \
                         -lpostproc \

# The include path and libs of SDL2
INCLUDEPATH += /usr/local/include/SDL2
LIBS += -L/usr/local/lib -lSDL2

HEADERS += \
    cmdutils.h \
    config.h

添加ffplay.c源文件及依赖的头文件和C文件。主要依赖的文件为:

  • config.h 系统配置信息
  • cmdutils.c/h 应该是用来解析命令行参数

添加FFmpeg头文件和动态库

  • /usr/local/include FFmpeg默认安装路径之头文件路径,包括部分头文件

  • /root/ffmpeg-3.4.7 FFmpeg源码目录,可以提供安装目录提供不了的头文件

  • /usr/local/lib FFmpeg安装路径之动态库路径

对应的SDL2的路径配置跟FFmpeg配置类似。

运行

至此,工程可以正常编译,并且运行。但是,没有输入参数,所以很快就结束了。

添加命令行参数:

在这里插入图片描述
点击运行按钮,效果如下:
在这里插入图片描述

Guess you like

Origin blog.csdn.net/donglicaiju76152/article/details/107695802