ffmpeg linux 开发环境,基于FFmpeg程序开发的环境配置(Linux下利用Makefile进行配置)-Go语言中文社区...

文章主要内容介绍

本文主要描述了FFmpeg开发环境的配置。除了FFmpeg依赖的安装和FFmpeg源码的编译的内容,还有如何编译我们自己编写的FFmpeg程序。

如果你需要对基于FFmpeg的小程序进行编译、测试的时候,本文可以帮到你。

本文编译的过程不需要使用那些大型的IDE,你只需要vi或vim即可。

写本文档时的配置环境

FFmpeg版本: 4.1

ysam版本: 1.3.0

zlib版本: 1.2.8

一、安装FFmpeg前准备

1.安装yasm编译器

FFmpeg为了提升效率使用了汇编指令,如MMX和SSE等,所以需要安装汇编编译器yasm。

官网下载:下载地址

手动安装:

tar -xvzf yasm-1.3.0.tar.gz

cd yasm-1.3.0/

./configure

make

make install

2.安装zlib

zlib 适用于数据压缩的函式库,是一个无损数据压缩库。

cd zlib-1.2.8/

./configure

make

make check

make install

注意:

make check进行检查,要全部为OK。

二、编译FFmpeg

不需要安装,之后需要用到FFmpeg的共享库或静态库,所以要先编译。

官网下载:下载地址

手动安装:

cd ffmpeg-4.1/

./configure --enable-shared --prefix=/usr/local/ffmpeg

make

注意:

make用于编译FFmpeg源码,生成库文件,编译花费的时间较多,耐心等待。

./configure用来配置make编译信息和make install程序安装目录等,不能省略。

如果你想要安装FFmpeg,请看文章末尾“参考引用”的第二条。

三、编写Makefile进行FFmpeg程序的编译

1.FFmpeg所需要的开发环境配置项

这里我们先看一下一个基于FFmpeg开发的项目需要配置哪些内容,之后会写一个Makefile的例子。

注: Makefile并不是必要的,比较简单的程序在终端输入gcc语句一步步编译也是可以的,但是使用Makefile能使这个过程变得简单很多。

1.1 配置头文件目录

配置语句:

-I ./ffmpeg头文件所在目录/

1.2 配置库文件目录

如果你需要将程序在其它机器上运行测试,使用链接静态库会比较方便,不过静态库链接相比起采用动态链接库的程序,在体积上通常会更大。

①链接动态库

动态库路径指定:使用-l指定库名称,使用-L指定库的的查找路径。

-l库名称 -L./ffmpeg库所在目录/

②连接静态库

静态库路径指定:使用-static表示优先链接静态库,使用-l指定库名称,使用-L指定库的的查找路径。

配置语句:

-static -l库名称 -L./ffmpeg库所在目录/

2.Makefile示例

按上面配置的思路,将编译语句写入Makefile,方便项目编译。

此Makefile我直接放在 你开发的FFmpeg项目的根目录 下,Makefile文件示例如下:

1.将编译好的FFmpeg源码文件夹复制到项目中。

(放在项目外也没问题,之后会进行文件夹路径的配置;但是如果放在项目外,如果你移动了项目文件,将需要重新配置FFmpeg源码文件夹的路径)

2.新建并编写Makefile文件:vim Makefile

#说明:

#【假设我们要编译的文件是ffmpegTest.c】

#【】

#‘cc’等价与‘gcc’,用于编译链接.c文件

#-static利用静态库编译,如果你需要

#-I指定头文件目录

#-L指定库文件目录

#-l指定库名

#配置头文件目录

INCLUDES = -I./ffmpeg-4.1/

COMPILE_OPTS = ${INCLUDES}

C_FLAGS = ${COMPILE_OPTS} -W -Wall -O3

#配置库目录

LIB_DIR = ./ffmpeg-4.1/

#定义PROGRAM_NAME变量

#用于存储 我们要编译的代码文件的文件名

PROGRAM_NAME= ffmpegTest

#定义其他变量,如果你需要在一个项目中编译多个C/C++文件,这会很有用

#但是本例子中,并没有突出这些变量的作用

#SOURCES保存要编译的代码文件名;

#OBJECTS保存编译出的文件名;

#PROGRAM保存链接出来可执行文件名(即,最终我们要得到的程序)

SOURCES= $(PROGRAM_NAME).c

OBJECTS= $(PROGRAM_NAME).o

PROGRAM= $(PROGRAM_NAME)

all:$(PROGRAM)

#将.c文件编译,生成对应.o对象文件

.c.o:

cc -c ${C_FLAGS} $<

#将.o对象文件和库进行链接,生成程序文件

$(PROGRAM_NAME) :$(PROGRAM_NAME).o

cc -o $@ $< -static -lavformat -L${LIB_DIR}libavformat/

-lavdevice -L${LIB_DIR}libavdevice/

-lavcodec -L${LIB_DIR}libavcodec/

-lavutil -L${LIB_DIR}libavutil/

-lpthread -ldl -lswscale -L${LIB_DIR}libswscale/

-lswresample -L${LIB_DIR}libswresample/

-lz -lm -lrt

#用于清理编译链接生成的文件

clean:

$(RM) $(PROGRAM) $(OBJECTS)

3.进行项目编译

保存Makefile文件之后,到Makefile所在的目录,在终端输入make即可进行编译,此时会输出编译的语句,如果出现错误提示可以进行对应的修改。

有些错误是因为之前编译出的文件有问题,如果出现错误,最好先将上次编译的文件删除,可以使用make clean。

ffmpeg linux 开发环境,基于FFmpeg程序开发的环境配置(Linux下利用Makefile进行配置)-Go语言中文社区..._第1张图片

四、可能出现的错误

1.问题:libxxxx/xxxx.h:没有那个文件或目录

b7c7698d5e1e69eb9dce6c9cbee1ff92.png

出现此问题是因为找不到头文件。

解决方法:

按之前的说明编写,仔细检查。

2.问题:找不到 -lxxxx

ffmpeg linux 开发环境,基于FFmpeg程序开发的环境配置(Linux下利用Makefile进行配置)-Go语言中文社区..._第2张图片

出现此问题是因为找不到so库。

解决方法:

按之前的说明,仔细检查。

3.问题:找不到avconfig.h

ffmpeg linux 开发环境,基于FFmpeg程序开发的环境配置(Linux下利用Makefile进行配置)-Go语言中文社区..._第3张图片

libavutil/avconfig.h是自动生成的,所以可能FFmpeg源文件夹中会没有这个文件。/* Generated by ffconf */

解决方法:

可能需要对源代码先编译,也可以从其它项目拷贝到libavutil文件夹中。

4.问题:对‘ABC’未定义的引用

ffmpeg linux 开发环境,基于FFmpeg程序开发的环境配置(Linux下利用Makefile进行配置)-Go语言中文社区..._第4张图片

出现此问题是因为FFmpeg是C库,在编译为可执行文件时需要具体的实现,这里未正确使用g++造成库无法链接上,也就导致无法找到。

解决方法:

将文件类型改为.c,编译工具改用gcc。

5.问题:找不到lz

ffmpeg linux 开发环境,基于FFmpeg程序开发的环境配置(Linux下利用Makefile进行配置)-Go语言中文社区..._第5张图片

出现这个问题就是因为缺少zlib库。

解决方法:

只需要重新安装就可以了。

6.之后的编译错误请补充在此处

需补充错误描述,截图,解决方法。

五、记录注解

1.随着ffmpeg代码版本更新,API接口名称会有更新,可查看ffmpegdoc APIchanges 文件确定名称变更记录;

2.如果程序使用动态库链接,可用ldd查看程序的动态库依赖;

六、参考引用

你可能感兴趣的:(ffmpeg,linux,开发环境)