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二进制文件