ffmpeg开发环境构建

一、相关资源介绍

本文主要讲述linux平台x86(及x86-64)架构下的ffmpeg编译安装过程。
其他嵌入式平台需要交叉编译,过程类似,不详述。
本实验在opensuse和ubuntu两个平台作了验证。使用lsb_release -a命令查看系统发行版版本:
opensuse平台版本:openSUSE Leap 42.3。
ubuntu平台版本:Ubuntu 16.04.5 LTS。

1. yasm/nasm

旧版ffmpeg及x264使用yasm汇编器
Yasm是英特尔x86架构下的一个汇编器和反汇编器。Yasm是一个完全重写的Netwide汇编器(NASM)。Yasm通常可以与NASM互换使用,并支持x86和x86-64架构。其许可协议为修订过的BSD许可证。
此处Yasm用来编译x86平台下ffmpeg中部分汇编代码。
注意,Yasm是x86平台汇编器,不需要交叉编译。若是arm等其他平台,交叉编译工具链中包含有对应的汇编器,则交叉编译时需要--disable-yasm选项。
Yasm官网:http://yasm.tortall.net/

新版ffmpeg及x264改用nasm汇编器
Netwide Assembler(简称NASM)是一款基于英特尔x86架构的汇编与反汇编工具。NASM被认为是Linux平台上最受欢迎的汇编工具之一。
NASM官网:https://www.nasm.us/

2. x264

x264是开源的h264编码器,使用非常广泛,综合性能不比商业编解码器差。
x264官网:https://www.videolan.org/developers/x264.html

3. x265

x265是开源的h265编码器。
x265官网:http://www.x265.org/
下载地址一:https://bitbucket.org/multicoreware/x265/downloads/
下载地下二:https://www.videolan.org/developers/x265.html
ffmpeg工程中实现了h265解码器,但无h265编码器。因此需要安装第三方编码器x265

4. SDL

SDL(Simple DirectMedia Layer)是一套开源的跨平台多媒体开发库。SDL提供了数种控制图像、声音、输出输入的函数,封装了复杂的视音频底层操作,简化了视音频处理的难度。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。
SDL官网:https://www.libsdl.org/

5. ffmpeg

ffmpeg官网:https://www.ffmpeg.org/

二、编译过程

1. 规划安装路径

将编译源码得到的程序资源安装到用户目录/home/think下。则安装后,/home/think目录下会多出bin、include、lib、share等目录
配置环境变量
编辑/etc/profile,添加如下几行:

export PATH=/home/think/bin:$PATH
export LIBRARY_PATH=/home/think/lib:/home/think/lib64:$LIBRARY_PATH
export PKG_CONFIG_PATH=/home/think/lib/pkgconfig:$PKG_CONFIG_PATH
export C_INCLUDE_PATH=/home/think/include:$C_INCLUDE_PATH

上述几个环境变量是程序编译时需要用到的库文件、头文件路径,以及可执行程序所在路径。
在命令行中运行如下命令,使新设置的环境变量立即生效:

source /etc/profile

配置动态库路径
编辑/etc/ld.so.conf,添加如下两行:

/home/think/lib
/home/think/lib64

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

ldconfig

2. yasm/nasm

旧版ffmpeg及x264使用yasm汇编器
在官网下载页面http://yasm.tortall.net/Download.html下载最新版源码yasm-1.3.0.tar.gz

tar -zxvf yasm-1.3.0.tar.gz
cd yasm-1.3.0/

./configure --prefix=/home/think
make
make install

新版ffmpeg及x264改用nasm汇编器
具体从哪一版本开始改用nasm不太清楚,至今日2018-11-20得到的最新版本已改用nasm
在官网https://www.nasm.us/下载最新版源码nasm-2.14.tar.bz2

tar -zxvf nasm-2.14.tar.gz
cd nasm-2.14/

./configure --prefix=/home/think
make
make install

3. x264

在网址https://www.videolan.org/developers/x264.html下载源码包last_x264.tar.bz2,这是git仓库的master分支源码。我们直接输入以下地址下载stable分支:
http://download.videolan.org/x264/snapshots/last_stable_x264.tar.bz2
下载得到last_stable_x264.tar.bz2源码包。

tar -jxvf last_stable_x264.tar.bz2
cd x264-snapshot-20181119-2245-stable/

./configure --prefix=/home/think --enable-shared --enable-static  
make  
make install  

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

4. x265

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

tar -zxvf x265_2.9.tar.gz
cd x265_2.9/build/linux/

./make-Makefiles.bash  
在上一行命令运行快结束时,出现cmake配置信息编辑界面,将CMAKE_INSTALL_PREFIX的值改成/home/think
make  
make install  

5. SDL

注意:应先安装SDL,再安装ffmpeg,否则ffmpeg编译时不会生成ffplay
原因如参考资料[3]所述。
两种安装方式,推荐第二种方式,可能遇到的问题比较少
编译源码安装(不推荐)
在SDL官网https://www.libsdl.org/下载最新源码包SDL2-2.0.9.tar.gz

tar -zxvf SDL2-2.0.9.tar.gz
cd SDL2-2.0.9/

./configure --prefix=/home/think
make
make install

通过编译源码安装的方式,编译安装成功后运行ffplay可能会遇到挺多问题,参“六、问题描述”
通过软件源在线安装(推荐)
opensuse平台:

zypper install libSDL2-devel
zypper install libSDL2_image-devel
zypper install libSDL2_mixer-devel
zypper install libSDL2_ttf-devel
zypper install libSDL2_gfx-devel

ubuntu平台:

apt-get install libsdl2-dev
apt-get install libsdl2-image-dev
apt-get install libsdl2-mixer-dev
apt-get install libsdl2-ttf-dev
apt-get install libsdl2-gfx-dev

6. ffmpeg

在ffmpeg官网https://www.ffmpeg.org/下载最新版源码ffmpeg-4.1.tar.bz2

tar -jxvf ffmpeg-4.1.tar.bz2
cd cd ffmpeg-4.1/

./configure --prefix=/home/think --enable-shared --enable-static --enable-libx264 --enable-libx265 --enable-gpl --enable-pthreads --extra-cflags=-I/home/think/include --extra-ldflags=-L/home/think/lib
make
make install

五、测试

在命令行中运行如下测试命令:

ffmpeg -i bigbuckbunny_480x272.h265 bigbuckbunny_480x272.mp4
ffplay 128x128.264
ffprobe 128x128.264

注意:
远程终端处于控制台命令行模式(运行级别3),无权限调用SDL,因此无法测试ffplay,但可以测试ffmpeg和ffprobe。测试ffplay需要X11控制台模式(运行级别5,即GUI图形模式)。

六、问题记录

1. No available video device

错误提示:
Could not initialize SDL - No available video device
(Did you set the DISPLAY variable?)

原因分析:
参考资料[4]https://blog.csdn.net/huanghai381/article/details/51777446
解决方法:

a) 安装x11的库文件:
opensuse平台:

zypper install libX11-devel
zypper install xorg-x11-devel

ubuntu平台:

apt-get install libx11-dev
apt-get install xorg-dev

b) 重新编译安装SDL

2. Audio target 'pulse' not available

错误提示:
Could not initialize SDL - Audio target 'pulse' not available
(Did you set the DISPLAY variable?)

原因分析:
参考资料[5]http://forums.libsdl.org/viewtopic.php?t=7609
解决方法:

a) 安装缺少的库
opensuse平台:

zypper install libpulse-devel
zypper install libasound2
zypper install libasound2-devel    // 实测不安装此包也无问题,若软件源中无此包则不必安装

ubuntu平台:

apt-get install libpulse-dev
apt-get install libasound2
apt-get install libasound2-dev

b) 重新编译安装SDL

3. x265 not found using pkg-config

错误提示:
编译ffmpeg,运行./configure --enable-libx265 ...出现如下错误提示:
x265 not found using pkg-config
原因分析:
参考资料[5]http://forums.libsdl.org/viewtopic.php?t=7609
解决方法:
export PKG_CONFIG_PATH=/home/think/lib/pkgconfig:$PKG_CONFIG_PATH

七、参考资料

[1] “ffmpeg编译”, https://blog.csdn.net/season_hangzhou/article/details/24399371
[2] “ffmpeg编译”,https://www.cnblogs.com/HongyunL/p/5243096.html
[3] “ffmpeg编译未生成ffplay”, http://blog.chinaunix.net/uid-11344913-id-3936227.html
[4] “SDL失败:无有效视频设备”,https://blog.csdn.net/huanghai381/article/details/51777446
[5] “SDL失败:无有效音频设备”,http://forums.libsdl.org/viewtopic.php?t=7609
[6] “x265 not found using pkg-config”,https://stackoverflow.com/questions/51918409/compiling-ffmpeg-x265-not-found-using-pkg-config
[7] “configure, pkg-config”,https://www.cnblogs.com/wliangde/p/3807532.html
[8] “Yasm”, https://zh.wikipedia.org/wiki/Yasm
[9] “NASM”, https://zh.wikipedia.org/wiki/Netwide_Assembler

八、修改记录

2018-11-20 1.0 初稿

猜你喜欢

转载自www.cnblogs.com/leisure_chn/p/10035189.html