ffmpeg及其依赖生成静态链接库

ffmpeg有很多依赖, 使用ffmpeg的作用是对视频做转码功能, 包括VP8,VP9, H264之间项目转换。
本文有两大部分:1. 使用开源项目ffmpeg-static, 依赖库优先使用稳定版本; 2. 介绍ffmpeg的编译参数;

ffmpeg-static

ffmpeg-static 是github开源ffmpeg静态编译链接项目(https://github.com/zimbatm/ffmpeg-static), wilddog在此项目基础上修改。

主要修改有以下内容:

升级deps到稳定版本

升级到x264版本

原项目是从videolan下载最新last_x264.tar.bz2的snapshot版本(在编译过程中发现编译失败), 可以选择snapshot版本中的稳定版本比如last_stable_x264.tar.bz2, 建议选择真正的稳定版本。下面是真正的稳定版


    git clone http://git.videolan.org/git/x264.git x264-stable

    cd x264-stable

    git checkout stable

升级fdk-aac稳定版

原项目是https://github.com/mstorsjo/fdk-aac/tarball下载的master版本, master版本不一定最稳定的版(ps: 在测试音频的解码出现crash, 从core文件发现ff_aac_eld_window_480有崩溃异常)。


    curl -o fdk-aac-v0.1.5.tar.gz https://codeload.github.com/mstorsjo/fdk-aac/tar.gz/v0.1.5

升级lame版本

原项目使用lame的是2012年发版的3.99.5, 时隔5年后发布了了3.100, 且在20180119日的周下载量到达到1万2左右, 远远超过其他版本。


download \

  "lame-3.100.tar.gz" \

  "" \

  "83e260acbe4389b54fe08e0bdbf7cddb" \

  "https://jaist.dl.sourceforge.net/project/lame/lame/3.100/lame-3.100.tar.gz"

ps: download是ffmpeg-static项目build.sh文件的shell的函数

升级opus版本

由于其他项目保持一致, 升级到1.2.1版本


download \

  "opus-1.2.1.tar.gz" \

  "opus-1.2.1.tar.gz" \

  "54bc867f13066407bc7b95be1fede090" \

  "https://archive.mozilla.org/pub/opus/"

升级ffmpeg版本

由于其他项目保持一致, 升级到3.4版本


download \

  "n3.4.tar.gz" \

  "ffmpeg3.4.tar.gz" \

  "fa2058283d2a7c90f2a93f144f8aaccc" \

  "https://github.com/FFmpeg/FFmpeg/archive"

调整ffmpeg 启用enable选项和禁止disable选项

这里先把configure配置贴出来, #后面的内容是我屏蔽的内容,我的使用ffmpeg主要目标是: 在c++项目中使用ffmpeg编码解码工作。

下文会介绍每个编译选项的作用。


PKG_CONFIG_PATH="$TARGET_DIR/lib/pkgconfig" ./configure \

  --prefix="$TARGET_DIR" \

  --pkg-config-flags="--static" \

  --extra-cflags="-fPIC -I$TARGET_DIR/include" \

  --extra-ldflags="-L$TARGET_DIR/lib" \

  --extra-ldexeflags="-static" \

  --bindir="$BIN_DIR" \

  --enable-pic \

  --enable-ffplay \

  --enable-ffserver \

  --enable-gpl \

  --enable-version3 \

  --disable-encoder=aac \

  --disable-decoder=aac \

  --enable-libfdk-aac \

  --enable-avresample \

  --enable-libvpx \

  --enable-libx264 \

  --enable-libmp3lame \

  --enable-nonfree \

  --enable-static \

  --enable-ffmpeg \

  --disable-symver \

  --disable-encoder=opus \

  --disable-decoder=opus \

  --enable-libopus \

  --disable-lzma \

  --disable-bzlib \

  --disable-vaapi

#--enable-libass \

#--enable-libfribidi \

#--enable-frei0r \

#  --enable-fontconfig \

#  --enable-libfreetype \

#  --enable-libopencore-amrnb \

#  --enable-libopencore-amrwb \

#  --enable-libopenjpeg \

#  --enable-librtmp \

#  --enable-libsoxr \

#  --enable-libspeex \

#  --enable-libtheora \

#  --enable-libvidstab \

#  --enable-libvo-amrwbenc \

#  --enable-libvorbis \

#  --enable-libwebp \

#  --enable-libx265 \

#  --enable-libxvid \

#  --enable-libzimg \

#  --enable-openssl

启用gpl选项

GPL就是一种gnu开源协议, 若不启用--enable-gpl, 是不能集成x264等软件的。--enable-version3 是规定GPL的版本,使用3版本

GPL对商用软件有要求,这不是本文的重点。

启用pic选项

pic选项的含义是build position-independent code, 若不启用此选项, 生成的libxxx.a文件是没法做静态链接的, 此选项很重要。

禁止内置acc和启用外部libfdk-acc

--disable-encoder=aac--enable-libfdk-aac看起很冲突, 内置acc版本更新不太及时,功能也不足够全, 所以使用外部的。

fdk-acc是一个音频文件库 A standalone library of the Fraunhofer FDK AAC code from Android

ps: opus也需要同样的配置

启用avresample选项

ffmpeg的一个库, 主要作用是重采样。

启用libvpx选项

libvpx是视频编码VP8和VP9的支持库, 是webm项目中的一部分,参考文档 https://www.webmproject.org/code/

启用libx264选项

使用videolan的 H264的实现来做视频的编码器(无解码部分), x264 is a free software library and application for encoding video streams into the H.264/MPEG-4 AVC compression format, and is released under the terms of the GNU GPL, 参考文档 https://www.videolan.org/developers/x264.html

启用nonfree选项

无解释

启用static选项

无解释

启用ffmpeg选项

--enable-ffmpeg 代表编译可执行的ffmpeg二进制文件

禁止symver选项

你可能感兴趣的:(ffmpeg及其依赖生成静态链接库)