参考链接
01_FFMpeg环境搭建
02_FFMpeg代码验证
01的文章讲述了环境搭建,在代码验证时发现略有问题,后面我说。
02的文章讲述了搭建FFMpeg环境和验证代码。环境搭建和01文章类似,主要是参考代码具有意义。
我说下主要内容吧。
在希望存放项目的目录下创建三个文件夹,分别是:
ffmpeg_sources用于下载源文件
ffmpeg_build 存储编译后的库文件
bin存储编码解析库等(ffmpeg,ffplay,ffprobe,X264,X265等)
我这里目录是/home/shengy/下新建了这三个文件夹
在这之前若库不是最新的,通过sudo apt-get update更新一下软件列表。
在终端粘贴下列代码,安装需要的依赖库:
sudo apt-get update
sudo apt-get -y install \
autoconf \
automake \
build-essential \
cmake \
git-core \
libass-dev \
libfreetype6-dev \
libsdl2-dev \
libtool \
libva-dev \
libvdpau-dev \
libvorbis-dev \
libxcb1-dev \
libxcb-shm0-dev \
libxcb-xfixes0-dev \
pkg-config \
texinfo \
wget \
zlib1g-dev
本指南假定您要安装一些最常见的第三方库。每个小节为您提供安装该库所需的命令。
如果不需要某些功能,则可以跳过相关小节(如果不需要),然后在FFmpeg中删除相应的./configure选项。例如,如果不需要libvpx,请跳过该小节,然后从“ 安装FFmpeg”部分中删除–enable-libvpx。
提示:如果要在多核系统中加快编译速度,可以在每个make命令(例如make -j4)中使用-j选项。
建议都使用源码进行安装。
我这里省略每个库的简介,直接给出总结后的命令。详细内容可看01文章
sudo apt install nasm yasm libx264-dev libx265-dev libnuma-dev libvpx-dev libfdk-aac-dev libmp3lame-dev libopus-dev -y
下面的命令是我从文章01复制过来的,但是我增加了–enable-postproc这个编译选项,因为后面的测试代码用到了filter库的内容,filter库需要编译postproc才能使用。 我第一次使用就是报了找不到postproc这个链接库。
cd ~/ffmpeg_sources
wget -O ffmpeg-4.2.1.tar.bz2 https://ffmpeg.org/releases/ffmpeg-4.2.1.tar.bz2
tar xjvf ffmpeg-4.2.1.tar.bz2
cd ffmpeg-4.2.1
PATH="$HOME/bin:$PATH"
PKG_CONFIG_PATH="$HOME/ffmpeg_build/lib/pkgconfig"
CFLAGS="-O3 -fPIC"
./configure \
--prefix="$HOME/ffmpeg_build" \
--pkg-config-flags="--static" \
--extra-cflags="-I$HOME/ffmpeg_build/include" \
--extra-ldflags="-L$HOME/ffmpeg_build/lib" \
--extra-libs="-lpthread -lm" \
--bindir="$HOME/bin" \
--enable-gpl \
--enable-libass \
--enable-libfdk-aac \
--enable-libfreetype \
--enable-libmp3lame \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265 \
--enable-pic \
--enable-shared \
--enable-postproc \
--enable-nonfree
PATH="$HOME/bin:$PATH"
make -j16
make install
hash -r
关闭当前窗口,然后重新打开,使用ffmpeg -version测试,如果打印正常,则安装完成。
为了代码开发正常,还需要把库文件的路径添加到系统。
在/etc/ld.so.conf中 末尾添加**/home/shengy/ffmpeg_build/lib**即可,这个路径是刚才编译的ffmpeg_build的路径,根据自己情况填
然后执行
sudo ldconfig
更多代码参考02文章。我这里只复制了第一个。
新建test_001.c,输入如下内容。
#include
#include
#include
#include
#define dbmsgc(fmt, args ...) printf("cong:%s[%d]: "fmt"\n", __FUNCTION__, __LINE__,##args)
//#define dbmsg(fmt, args ...) printf("cong:%s:%s[%d]: "fmt"\n",__FILE__, __FUNCTION__, __LINE__,##args)
int main(int argc, char **argv)
{
int i=0;
AVFormatContext *pFormatCtx = NULL;
avcodec_register_all();
#if CONFIG_AVDEVICE
avdevice_register_all();
#endif
avfilter_register_all();
av_register_all();
if(avformat_open_input(&pFormatCtx, argv[1], NULL, NULL)!=0)
return -1; // Couldn't open file
if(avformat_find_stream_info(pFormatCtx, NULL)<0)
return -1; // Couldn't find stream inform
av_dump_format(pFormatCtx,0, 0, 0);
return 0;
}
对应的Makefile如下:
FFMPEG=/home/shengy/ffmpeg_build/
CC=gcc
CFLAGS=-g -I$(FFMPEG)/include
LDFLAGS = -L$(FFMPEG)/lib/ -lswscale -lswresample -lavformat -lavdevice -lavcodec -lavutil -lavfilter -lm
TARGETS=test_001
all:$(TARGETS)
test_001:test_001.c
$(CC) $(CFLAGS) -o $@ $^ $(LDFLAGS) -std=c99 #我测试了-std=c99和-std=c++11 都可以运行
clean:
rm -rf $(TARGETS)