一、编译x264源码
首先下载x264源码:https://code.videolan.org/videolan/x264/
解压,进入源码目录,然后执行命令:
./configure --prefix=$(pwd)/install --enable-static --enable-shared --disable-asm
make
make install
执行完后,即会在源码目录下生成x264的头文件,库文件。
二、编译x265源码
下载x265源码:https://bitbucket.org/multicoreware/x265_git/src/master/
解压,进入源码目录的source目录下,然后执行命令:
cmake -DCMAKE_INSTALL_PREFIX=./install ./
make
make install
执行完后,即会在source目录的install 目录下生成x265的头文件,库文件。
三、编译fdk-aac源码
下载fdk-aac源码:GitHub - mstorsjo/fdk-aac: A standalone library of the Fraunhofer FDK AAC code from Android.
将fdk-aac编译进FFmpeg后进行AAC编码时就可以通过-sample_fmt参数指定采样格式了,否则可能会报错:Specified sample format XXX is invalid or not supported
安装libtool
yum install libtool
如果不安装libtool等下执行autoreconf -fiv命令时可能会报错:
执行命令:
yum install libtool
unzip fdk-aac-master.zip
cd fdk-aac-master
autoreconf -fiv
mkdir install
./configure --prefix=$(pwd)/install --enable-static --enable-shared
make
make install
四、编译sdl源码
要编译出ffplay需要sdl库。
下载sdl源码:https://github.com/libsdl-org/SDL/releases
解压,然后在跟解压后的目录同级的目录下新建build文件夹:
执行上述操作后目录结构如下:
然后执行命令:
cd build/
cmake -DCMAKE_INSTALL_PREFIX=./install ../SDL-release-2.28.5
make
make install
如果cmake出现报错,就删除掉CMakeCache.txt,再重新进行cmake
五、编译FFmpeg源码
下载FFmpeg源码:https://github.com/FFmpeg/FFmpeg/tags
查看pkgconfig路径:
which pkgconfig
whereis pkgconfig
设置环境变量(这里以pkgconfig路径在/usr/lib64/pkgconfig 为例,以实际为准):
export PKG_CONFIG_PATH="/usr/lib64/pkgconfig"
分别拷贝x264、x265、fdk-aac和sdl的.pc文件到pkgconfig目录下
cp x264.pc /usr/lib64/pkgconfig
cp x265.pc /usr/lib64/pkgconfig
cp lib/pkgconfig/fdk-aac.pc /usr/lib64/pkgconfig
cp sdl2.pc /usr/lib64/pkgconfig
这些步骤是为了防止等下configure ffmpeg 的时候报错:ERROR: XXX not found using pkg-config
进入FFmpeg源码目录,执行:
./configure --enable-shared --prefix=$(pwd)/install --enable-ffmpeg --enable-ffplay --enable-debug --disable-optimizations --disable-asm --disable-stripping --enable-libx264 --enable-libx265 --enable-sdl2 --enable-gpl --enable-pthreads --enable-libfdk-aac --enable-nonfree --extra-cflags="-I/root/NfsShareDir/trunk/avs/sdk/x264/inc -I/root/NfsShareDir/trunk/avs/sdk/x265/inc -I/root/NfsShareDir/trunk/avs/sdk/fdk-aac/inc/fdk-aac -I/root/NfsShareDir/trunk/avs/sdk/sdl2/inc" --extra-ldflags="-L/root/NfsShareDir/trunk/avs/sdk/x264/lib -L/root/NfsShareDir/trunk/avs/sdk/x265/lib -L/root/NfsShareDir/trunk/avs/sdk/fdk-aac/lib -L/root/NfsShareDir/trunk/avs/sdk/sdl2/lib"
其中,--enable-debug--enable-ffplay--disable-optimizations --disable-asm --disable-stripping 是为了编译出带有调试信息,可以用gdb调试的ffmpeg和ffplay。
--extra-cflags 指定 x264、x265、fdk-aac和sdl的头文件路径。
--extra-ldflags 指定 x264、x265、fdk-aac和sdl的库文件路径。
make
make install
执行完成后,即会在/root/NfsShareDir/trunk/avs/third_party/FFmpeg-n5.0.3/install 目录下生成ffmpeg的头文件,库文件。
六、编译生成的可执行文件测试
然后我们可以通过命令去验证ffmpeg是否支持x264的编码了:
./ffmpeg -i rtsp://admin:admin@192.168.18.14 -vcodec libx264 -acodec aac -f flv rtmp://172.16.17.154:1935/live/test
通过命令去验证ffmpeg是否支持对aac编码修改音频采样格式:
./ffmpeg -i "rtsp://172.16.17.155/stream/video5" -vcodec copy -acodec libfdk_aac -ar 44100 -sample_fmt s16 -f flv rtmp://127.0.0.1/live/test1
通过命令去验证ffplay是否正常
./ffplay XXX.mp4
如果报错:Failed to initialize a hardware accelerated renderer: Couldn't find matching render driver。说明可能是系统显卡驱动不支持。
参考:
《ffmpeg支持libx264和libx265的安装方法》
《X265编译》