> 文章列表 > linux下FFmpeg rtmp开发环境 搭建

linux下FFmpeg rtmp开发环境 搭建

linux下FFmpeg rtmp开发环境 搭建

1,环境变量

编辑 vi ~/profile,添加如下几行:

export PATH=$HOME/bin:$PATH
export LIBRARY_PATH=$HOME/lib:$HOME/lib64:$LIBRARY_PATH
export PKG_CONFIG_PATH=$HOME/lib/pkgconfig:$PKG_CONFIG_PATH
export C_INCLUDE_PATH=$HOME/include:$C_INCLUDE_PATH
source ~/profile

2,配置动态库路径

编辑 /etc/ld.so.conf,添加如下两行:

/root/lib
/root/lib64

ld.so.conf 中的内容是程序运行时需要搜索的动态库路径。
在命令行中运行如下命令,使新设置的动态库路径立即生效:

ldconfig

3,yasm/nasm

旧版 ffmpeg 及 x264/x265 使用 yasm 汇编器
官网下载页面 Download - The Yasm Modular Assembler Project 下载最新版源码 yasm-1.3.0.tar.gz

tar -zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0/./configure --prefix=$HOME
make
make install

新版 ffmpeg 及 x264/x265 改用 nasm 汇编器
具体从哪一版本开始改用nasm不太清楚。在官网 https://www.nasm.us/ 下载最新版源码 nasm-2.14.02.tar.bz2

tar -zxvf nasm-2.14.02.tar.gz
cd nasm-2.14/./configure --prefix=$HOME
make
make install

4 x264

在网址 x264, the best H.264/AVC encoder - VideoLAN 下载源码包 last_x264.tar.bz2,这是 git 仓库的 master 分支源码。我们输入以下地址:Index of /x264/snapshots/,可以选择最新的 stable 版本源码包进行下载,当前最新版本为 x264-snapshot-20191217-2245-stable.tar.bz2。

tar -jxvf x264-snapshot-20191217-2245-stable.tar.bz2
cd x264-snapshot-20191217-2245-stable/./configure --prefix=$HOME --enable-shared --enable-static  
make  
make install  

注意第 4 行配置选项中,未给出 --disable-asm 选项,则表示启用汇编选项

5 x265

在网址 https://bitbucket.org/multicoreware/x265/downloads/ 下载源码包 x265_3.0.tar.gz
编译说明参照 https://bitbucket.org/multicoreware/x265/wiki/Home

tar -zxvf x265_3.3.tar.gz
cd x265_3.3/build/linux/./make-Makefiles.bash  
在上一行命令运行快结束时,出现 cmake 配置信息编辑界面,将 CMAKE_INSTALL_PREFIX 的值改成 $HOME
make  
make install  

6 libmp3lame

在官网 LAME MP3 Encoder 下载最新源码 lame-3.100.tar.gz

tar -zxvf lame-3.100.tar.gz
cd lame-3.100./configure --prefix=$HOME
make
make install

7 librtmp

根据官网 RTMPDump 说明,通过 git 下载源码。
编译安装方法参考源码目录下 README 文件和 Makefile 文件。

git clone git://git.ffmpeg.org/rtmpdump
cd rtmpdumpmake CRYPTO=GNUTLS
make install prefix=$HOME

 由于rtmp很久没更新,使用的openssl版本太久,所以要重新编译openssl

8 openssl 1.0f

源码地址为:https://www.openssl.org/source/old/;当前最新版本为 1.1.0f,https://www.openssl.org/source/old/1.1.0/openssl-1.1.0f.tar.gz

源码编译

解压之后,进入源码目录openssl-1.1.0f,执行如下命令。因为只需要编译静态库,也没有特殊要求,所以使用的编译选项配置很简单:

./config -fPIC no-shared --prefix=$HOMEmake
make install

其中,-fPIC:指示生成位置无关的代码,这个选项是在把openssl生成的静态库链接到动态库的时候提示错误添加的;no-shared:指示生成静态库。

最终在当前目录下会编译出libssl.a和libcrypto.a两个库文件,在开发的时候只需要包含头件并链接这两个库就可以了。

9 ffmpeg

在官网 FFmpeg 下载最新版源码包。或者使用 git 克隆 ffmpeg 源码仓库。
ffmpeg 源码仓库地址 https://git.ffmpeg.org/ffmpeg.git,在 github 上镜像地址 https://github.com/FFmpeg/FFmpeg.git。

git clone https://git.ffmpeg.org/ffmpeg.git
cd ffmpeg
git tag
git checkout -b n4.2.2 n4.2.2./configure --prefix=$HOME \\
--enable-shared --enable-static --enable-gpl --enable-pthreads \\
--enable-libx264 --enable-libx265 --enable-libmp3lame --enable-librtmp \\
--extra-cflags=-I$HOME/include --extra-ldflags=-L$HOME/lib
make
make install

"./configure" 选项中 "--extra-cflags=-I$HOME/include --extra-ldflags=-L$HOME/lib" 是指定 ffmpeg 编译时需要的第三方库 (libx264 等) 的头文件目录和库文件目录。因为我们前面将所有第三方库的安装路径都设置为 "$HOME/" 目录。

如果机器上已经编译安装过 ffmpeg,需要再次编译安装时,需要先卸载旧版本的头文件和库文件,否则编译时可能优先使用已安装的旧的头文件或库文件,导致编译失败。

但是会出现librtmp not found using pkgconfig的问题,所以需要修改configure文件

修改一下ffmpeg的configure文件,将原本的判断注释掉,改为下面的命令#enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socketenabled librtmp && check_lib RTMP_Socket -lrtmp -lz然后在编译脚本中--extra-cflags="$CFLAGS -I/$HOME/lib" \\--extra-ldflags="$LDFLAGS -L/$HOME/lib -lrtmp -lz" \\

10 卸载命令

make uninstall

11 测试

ffmpeg -v


ffmpeg: error while loading shared libraries: libx264.so.157: cannot open shared object file: No such file or directory

 执行ldconfig