ffmpeg 开发: 001-搭建环境

介绍

由于命令行的ffmpeg工具无法满足产品的性能要求,需要对视频流进行兼容。所以需要调试有关的参数。
FFmpeg全名是Fast Forward MPEG(Moving Picture Experts Group)是一个集成了各种编解码器的库,可以说是一个全能型的工具,从视频采集、视频编码到视频传输(包括RTP、RTCP、RTMP、RTSP等等协议)都可以直接使用FFMPEG来完成,更重要的一点FFMPEG是跨平台的,Windows、Linux、Aandroid、IOS这些主流系统通吃。因此初期强烈建议直接使用FFMPEG。

编译有关的库:

Linux版本的可以根据源码进行编译,可以参考本人的编译博文:

Ubuntu 移植 ffmpeg + x264
arm linux 移植 FFMPEG库 + x264

Windows  MacOS 版本 可以在官网进行下载Dev版本的:
ffmpeg bulid分为3个版本:Static,Shared,Dev。前两个版本可以直接在命令行中使用,他们的区别在于:

Static(静态库版本): 里面只有3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe,相关的Dll已经被编译到exe里面去了。作为工具而言此版本就可以满足我们的需求;
Shared(动态库版本):里面除了3个应用程序:ffmpeg.exe,ffplay.exe,ffprobe.exe之外,还有一些Dll,比如说avcodec-54.dll之类的。Shared里面的exe在运行的时候,需要到相应的Dll调用功能。程序运行过程必须依赖于提供的dll文件;
Dev(开发者版本):是用于开发的,里面包含了库文件xxx.lib以及头文件xxx.h,这个版本不包含exe文件。dev版本中include文件夹内文件用途

备注:应用程序在开发期间需要用到dev版本下的lib库,应用程序编译后执行期间需要shared中的dll库文件的支持

新建工程

Linux版本的工程
无论是x86还是arm,一般都用makefile 进行工程的管理。
下面提供一个通用的makefile模板:

#           Makefile edited by Schips
#           2019-06-21 [email protected]

# 文件类型
PSFS            =.cpp

# 源文件所在目录
SRC_LIST    = .
# 头文件所在目录
INCLUDE     = include

# 编译选项
CFLAGS      = -g -Wall
CC          = g++
CXX         = g++


# 所有的库路径,依次写在这里
LDLIBS          = ./lib

# 调用到的库名,依次写在这里
#LIBS           = avutil avcodec avdevice avfilter swscale swresample avformatis
LIBS            = avutil avcodec avdevice avfilter swscale swresample  avformat

# 调试用
INSIGHT         = gdb

# 输出文件名
TGT         = demo
OTHER_CSRC  =
OTHER_ASRC  =
ASRC        =

########################################
# 不需要改动
INC_P = -I
LIBD_P = -L
LIB_P = -l
CFLAGS      += $(addprefix $(INC_P), $(INCLUDE))
LDFLAGS     += $(addprefix $(LIBD_P), $(LDLIBS))
LIB_ALL     += $(addprefix $(LIB_P), $(LIBS))
SRC_LIST    ?= .
SRCSS       += $(addsuffix /*$(PSFS), $(SRC_LIST))
CSRC        += $(wildcard  $(SRCSS))

OBJS        = $(CSRC:$(PSFS)=.o) $(ASRC:.S=.o)
NOLINK_OBJS = $(OTHER_CSRC:$(PSFS)=.o) $(OTHER_ASRC:.S=.o)
DEPS        = $(OBJS:.o=.d) $(NOLINK_OBJS:.o=.d)
BIN         = $(TGT)

.PHONY: clean all

all: $(BIN)

debug:
        $(INSIGHT) --se=$(TGT)

$(BIN): $(OBJS) $(NOLINK_OBJS)
        $(CC) $(LDFLAGS) $(OBJS) $(LIB_ALL) -o $@

clean:
        rm -f $(DEPS)
        rm -f $(OBJS) $(NOLINK_OBJS)
        rm -f $(BIN)

# ---------------------------------------------------------------------------
# rules for code generation
# ---------------------------------------------------------------------------
%.o:    %$(PSFS)
        $(CC) $(CFLAGS) -o $@ -c $<

%.o:    %.S
        $(CC) $(ASFLAGS) -o $@ -c $<

# ---------------------------------------------------------------------------
#  # compiler generated dependencies
# ---------------------------------------------------------------------------
-include $(LWOS_DEPS) $(PORT_DEPS) $(APPL_DEPS)

猜你喜欢

转载自www.cnblogs.com/schips/p/12193376.html