编译ffmpeg及相关库

第三方组件:

libfdk-aac, librtmp, libsrt, libx264, libx265, libmbedtls

我用的机器是centos7, 先声明,此配置没有图形显示相关的东西,也没有ffplay,建议需要的看一下文章尾部,然后根据ffmpeg的帮助文档自行配置。下面根据项目需要,先编译相关的第三方组件。

安装curl:

sudo yum install curl

说明:我的安装路径设置成了/home/young/workDir/thirdparty/media_built,可根据需要安装在不同路径。如果不设置prefix选项,则安装在系统默认路径/usr/local。

zlib:如果需要交叉编译,应该在./configure 前面执行 export CHOST=xxx,xxx表示你的交叉编译器

./configure --prefix=/home/young/workDir/thirdparty/ffmpeg_built --shared

openssl:如果需要交叉编译,需要添加编译选项:--cross-compile-prefix=xxx, xxx表示你的编译器前缀,如:arm-hisiv500-linux-

./config --prefix=/home/young/workDir/thirdparty/ffmpeg_built no-asm shared zlib-dynamic \
--with-zlib-include="/home/young/workDir/thirdparty/ffmpeg_built/include" \
--with-zlib-lib="/home/young/workDir/thirdparty/ffmpeg_built/lib"

注意:在编译时遇到 ./libcrypto.so: undefined reference to `getcontext' 这种错误,应该加上 no-async 重新配置,删去Makefile中的-m32 和-m64,原因是该编译器没有提供GNU C 的ucontext库

mbedtls:如果需要交叉编译,在cmake前面加上 CC=xxx,xxx表示你的编译器,如:arm-hisiv600-linux-gcc

1、必须要切换到某个开发分支才可以进行下面的编译,这里切换到2.6分支: 
git checkout -b mbedtls-2.6 origin/mbedtls-2.6

2、清除配置信息:
find . -iname '*cmake*' -not -name CMakeLists.txt -exec rm -rf {} +

3、执行 cmake: 
cmake -DUSE_SHARED_MBEDTLS_LIBRARY=On . \
-DCMAKE_INSTALL_PREFIX=/home/young/workDir/thirdparty/ffmpeg_built

4、编译:设置VERBOSE=1是为了使编译的时候打印出更多编译信息,如果不设置,则是静默编译。
make VERBOSE=1 && make install

编译x264,x265和ffmpeg时需要用到汇编器,先安装nasm和ysam

nasm:交叉编译增加选项 --host=xxx 进行设置你的编译器

./configure --prefix=/home/young/workDir/thirdparty/media_built && make && make install

yasm:交叉编译增加选项 --host=xxx 进行设置你的编译器

sed -i 's#) ytasm.*#)#' Makefile.in && \
./configure --prefix=/home/young/workDir/thirdparty/media_built && make && make install

注意:sed -i 's#) ytasm.*#)#' Makefile.in: 这条命令是阻止编译仅在windows上使用的两个程序(vsyasm 和 ytasm)

x264:交叉编译增加选项 --host=xxx 进行设置你的编译器,或者增加 --cross-prefix=xxx,设置编译器前缀

export PATH=$PATH:/home/young/workDir/thirdparty/media_built/bin && \
./configure --prefix=/home/young/workDir/thirdparty/media_built \
            --enable-shared \
            --disable-cli && make && make install

注意:export 命令是指定刚才我们安装的汇编器的路径,在编译x264的时候需要用到它。

        --disable-cli:禁止构建多余的命令行编码器,因为大多数的输入格式都需要FFmpeg

cmake 3.20.3: 需要依赖libuv和libarchive,所以我们先编译安装这两个工具,都安装在系统默认路径就行。

libuv1.41.0:

sh autogen.sh && ./configure --disable-static && make -j4 && make install

libarchive:

./configure --disable-static && make -j4 && make install

编译安装cmake:

./bootstrap --system-libs --mandir=/share/man --no-system-jsoncpp \
--no-system-librhash --system-curl --system-zlib \
--docdir=/share/doc/cmake-3.20.3 && make -j4 && make install

x265:如果需要交叉编译,在cmake前面加上 CC=xxx,xxx表示你的编译器,如:arm-hisiv600-linux-gcc

mkdir built && cd built && \
cmake -DCMAKE_INSTALL_PREFIX=/home/young/workDir/thirdparty/media_built ../source && \
make -j4 && make install

fdk-aac:交叉编译增加选项 --host=xxx 进行设置你的编译器

./configure --prefix=/home/young/workDir/thirdparty/media_built \
--disable-static && make -j4 && make install

librtmp:交叉编译需要在 make 后面加上 -DCROSS_COMPILE=xxx,xxx表示你的编译器,也可直接在Makefile中开头的位置增加CROSS_COMPILE=xxx

1.cd librtmp && vi Makefile
2.修改安装目录:prefix=/home/young/workDir/thirdparty/ffmpeg_built
3.make && make install

srt:交叉编译需要增加选项 --with-compiler-prefix=xxx, xxx表示你的编译器前缀

1、需要先切换到某个release版本,否则在使用过程中可能会出现一些问题,切记!这里切换到v1.4.4分支:
git checkout v1.4.4

配置和编译:
./configure --prefix=/home/young/workDir/thirdparty/media_built --disable-static \
--openssl-include-dir=/home/young/workDir/thirdparty/media_built/include \
--openssl-ssl-library=/home/young/workDir/thirdparty/media_built/lib && \
make -j4 && make install

以上都准备好的我们需要的第三方库和编译环境,下面开始配置和编译ffmpeg

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/young/workDir/thirdparty/media_built/lib/pkgconfig && \
./configure --prefix=/home/young/workDir/thirdparty/media_built \
--enable-gpl \
--enable-version3 \
--enable-nonfree \
--disable-static \
--enable-shared \
--enable-libfdk-aac \
--enable-librtmp \
--enable-libsrt \
--enable-libx264 \
--enable-libx265 \
--enable-mbedtls \
--disable-autodetect \
--disable-v4l2-m2m \
--disable-vaapi \
--disable-vdpau \
--disable-videotoolbox \
--disable-nvenc \
--disable-nvdec \
--disable-cuda-llvm \
--disable-cuvid \
--disable-d3d11va \
--disable-dxva2 \
--disable-vaapi \
--disable-ffnvcodec \
--disable-libdrm \
--disable-sdl2 \
--disable-libxcb \
--docdir=/home/young/workDir/thirdparty/ffmpeg-doc \
--extra-ldflags="-L/home/young/workDir/thirdparty/media_built/lib/" \
--extra-cflags="-I/home/young/workDir/thirdparty/media_built/include" && \
make -j4 && make install

注意:

1、export命令是设置PKG_CONFIG_PATH环境变量,因为ffmpeg寻找配置的第三方库的时候是使用pkg-config进行寻找的,所以我们需要在环境变量中指定我们编译安装的路径,否则在ffmpeg配置的时候会出错说找不到某个库。

2、我编译的这个ffmpeg因为是在服务器上使用,所以可以看到并没有图形显示,ui相关的配置,也没有配置ffplay,如有需要的请自行根据ffmpeg的帮助文档进行配置。

最后:

1、相关库已经上传到github,有需要的自行下载,地址:JHYoung1034/ffmpeg-package (github.com)

2、对于新手来说,可能编译编码库是一个痛苦的过程,因为有很多依赖,有很多路径,变量需要去设置。我们只要执行这些开源库的 confiugre --help 脚本查看帮助,认真看看相关选项,根据我们的需要进行设置,如果看了帮助还是搞不定,首先还是建议到这个源码库的github页去认真阅读帮助文档就可以。一般来说开源库都是有能让你用起来的文档说明,否则不明不白的开源库还不如不用。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值