Qt+ubuntu+ffmpeg环境搭建,ffmpeg库的编译与调用

本章分两部分,第一部分介绍ubuntu下ffmpeg库的编译,第二部分介绍ubuntu下Qt调用ffmpeg库。

ffmpeg库编译

编译环境建议切换到root下操作,新建文件夹/opt/ffmpeglib/,cd进来,在这里下载安装包、后续安装编译等操作

编译依赖的资源我已打包上传资源,包括编译好的库,嫌麻烦的同学可以直接下载使用:
https://download.csdn.net/download/weixin_40355471/23230845
资源包含:ffmpeg.tar.gz,编译好的ffmpeg库;ffmpeg-4.0.6.tar.bz2,ffmpeg源码;nasm-2.14.02.tar.bz2;SDL2-2.0.8.tar.gz;x264;x265_3.2.tar.gz;yasm-1.3.0.tar.gz;zlib-1.2.3.tar.gz;

下载ffmpeg源码

我下载的是4.06版本,ffmpeg-4.0.6.tar.bz2
http://www.ffmpeg.org/download.html

安装yasm

wget http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz
tar xvzf yasm-1.3.0.tar.gz
cd yasm-1.3.0
./configure
make
make install

centos7安装可尝试yum install yasm

安装nasm

wget https://www.nasm.us/pub/nasm/releasebuilds/2.14.02/nasm-2.14.02.tar.bz2
tar xvf nasm-2.14.02.tar.bz2
cd nasm-2.14.02
./configure
make
make install

安装其他依赖

apt install cmake -y
apt install pkg-config //后面编译x264和x265需要

编译x264

ubuntu:
x264下载地址:
http://ftp.videolan.org/pub/videolan/x264/snapshots/
tar xvf x264-snapshot-20191024-2245-stable.tar.bz2
cd x264-snapshot-20191024-2245-stable
./configure --enable-static --prefix=…/x264 --enable-pic

./configure --enable-static --enable-shared --prefix=…/x264 --enable-pic
make
make install

centos7用下面的方法
cd ~/x264
make uninstall
make distclean
./configure --enable-static --disable-opencl
make
make install

编译x265

如果x265编译失败,可以不用,后续编译ffmpeg不编译x265就可以
x265下载地址:
http://ftp.videolan.org/pub/videolan/x265/
tar xvf x265_3.2.tar.gz
//和x264编译不一样,264直接在根目录下编译,265要进入这个目录
cd x265_3.2/build/linux/
cmake -G “Unix Makefiles” -DCMAKE_INSTALL_PREFIX=“…/…/…/x265” -DENABLE_SHARED:bool=off …/…/source
make -j
make install

编译SDL2

编译之前先安装
sudo apt-get install libx11-dev
sudo apt-get install xorg-dev

下载SDL的源码,http://libsdl.org/release/
tar zxvf SDL2-2.0.8.tar.gz
cd SDL2-2.0.8
./configure
make
make install

centos7尝试下面方法
(1) wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
(2)选择列出的SDL并安装
1、yum install SDL2_gfx-devel.x86_64
2、yum install SDL2_image-devel.x86_64
3、yum install SDL2_ttf-devel.x86_64
4、yum install SDL2.x86_64

编译zlib

下载zlib-1.2.3.tar.gz
tar -zxvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure
vi Makefile
找到 CFLAGS=-O3 -DUSE_MMAP
在后面加入-fPIC,即变成CFLAGS=-O3 -DUSE_MMAP -fPIC
接下面步骤
make
make install

编译ffmpeg

解压缩源码包ffmpeg-4.0.6.tar.bz2,cd进来依次执行

#这种方式是生成动态库和头文件的
./configure --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libx264 --enable-libx265 --prefix=…/ffmpeg
#配置安装的系统目录,可用ffmpeg命令行
./configure --enable-libx264 --enable-gpl --prefix=/usr/local/ffmpeg --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib
make
sudo make install

第二种configure方式,配置一下环境变量
sudo vim /etc/profile
export PATH=$PATH:/usr/local/ffmpeg/bin# 在最后PATH添加环境变量
source /etc/profile
ffmpeg -version#查看ffmpeg版本

编译完成后,在目标文件夹生成bin、include、lib、share4个文件夹
在这里插入图片描述

问题1,libx264 not found

最后一步编译ffmpeg时报错libx264 not found
解决
把编译好的x264目标文件include和lib文件夹里面的文件,分别拷贝到/usr/local/include和/usr/local/lib文件里面
在./configure最后添加–extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib

问题2,relocation R_X86_64_32S against `ff_mqc_qe’ can not be used when making a shared object; recompile with -fPIC

编译ffmpeg时报错,解决,在前面加CFLAGS=“-O3 -fPIC”:
CFLAGS=“-O3 -fPIC” ./configure --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libx264 --prefix=…/ffmpeg

Qt调用ffmpeg库

把编译生成的ffmpeg文件夹(包含bin、include、lib、share4个文件夹),拷贝到qt工程目录(/home/chw/HSCompany/videoCall/),根据目录结构在pro文件添加

INCLUDEPATH+=/home/chw/HSCompany/videoCall/ffmpeg/include
LIBS+=-L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lavcodec\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lavdevice\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lavfilter\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lavformat\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lavutil\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lswresample\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lswscale\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lpostproc

测试打印配置信息和版本号

//打印ffmpeg配置
qDebug()<<"["<<__FILE__<<"]"<<__LINE__<<__FUNCTION__<<" "<<avcodec_configuration();
//打印ffmpeg版本号
qDebug()<<"["<<__FILE__<<"]"<<__LINE__<<__FUNCTION__<<" "<<avcodec_version();

打印输出:

[ ../ffmpegTestUbu/mainwindow.cpp ] 13 MainWindow   --enable-shared --enable-nonfree --enable-gpl --enable-pthreads --enable-libx264 --prefix='…/ffmpeg'
[ ../ffmpegTestUbu/mainwindow.cpp ] 14 MainWindow   3805796

Qt调用ffmpeg库,移植到其他电脑

如果是移植到其他没有安装上述软件包的电脑,使用上面方式会提示缺少依赖库,修改pro文件:

INCLUDEPATH+=/home/chw/HSCompany/videoCall/ffmpeg/include
LIBS+=-L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lx264\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lva\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lSDL2\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lva-drm\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lva-x11\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lvdpau\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lavcodec\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lavdevice\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lavfilter\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lavformat\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lavutil\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lswresample\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lswscale\
      -L/home/chw/HSCompany/videoCall/ffmpeg/lib/ -lpostproc

把ffmpeg依赖的这些库也拷贝到/home/chw/HSCompany/videoCall/ffmpeg/lib/文件夹里面,文件目录如下,这些文件在编译ffmpeg过程中生成,在编译的系统里搜索即可。
这些库我已打包上传,需要的可直接下载:
https://download.csdn.net/download/weixin_40355471/25618549
在这里插入图片描述

问题,/lib/x86_64-linux-gnu/libz.so.1👎 error: error adding symbols: DSO missing from command line

编译时报错,也有可能会报libXext.so.6、libX11.so.6、xcb等的类似错误,解决:
pro文件添加

LIBS += -lz
LIBS += -lXext
LIBS += -lX11
LIBS += -lxcb
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值