一、搭建环境
Win10 + VMware15 + Ubuntu16.04(64位)
Ubuntu中源码路径:/home/llh/ffmpeg/source
Ubuntu中构建路径:/home/llh/ffmpeg/build
相关下载链接:https://pan.baidu.com/s/1YClANYKHWMI6KyF7EQTYqg,提取码:dnn7
二、安装 SDL
1) SDL 库需要安装一些依赖库,不然运行时会出现异常(比如说找不到设备,没有声音等)。
sudo apt-get install libx11-dev
sudo apt-get install xorg-dev
sudo apt-get install libsdl2-image-dev
sudo apt-get install libsdl2-mixer-dev
sudo apt-get install libsdl2-ttf-dev
sudo apt-get install libsdl2-gfx-dev
2)配置
./configure --prefix=/home/llh/ffmpeg/build/
3)编译
make
4)安装
make install
三、安装 FFmpeg
1)配置
./configure --prefix=/home/llh/ffmpeg/build/
解决办法如下:
方法一:安装yasm ,命令:
sudo apt-get install yasm
方法二:在配置命令后面加上 –disable-yasm
当前我选择安装yasm ,重新配置如下(注:此图我只是截取一些部分进行说明)
上图可以看出 shared 的选项是 no ,说明当前配置不能编译出动态库,而我们经常需要用到动态库,所以需要在配置命令后面加上 –enable-shared 。还有就是当前并没有加载到 SDL 的库,那么我们需要做如下操作:
1.1)在命令行终端设置 PKG_CONFIG_PATH变量,指定 SDL 编译生成的 pkgconfig 文件路径
export PKG_CONFIG_PATH=/home/llh/ffmpeg/build/lib/pkgconfig:$PKG_CONFIG_PATH
1.2)使用 --extra-cflags 和 --extra-ldflags 指定编译生成的 SDL 库路径以及头文件路径,具体使用如下:
./configure --prefix=/home/llh/ffmpeg/build/ --enable-shared --extra-cflags=-I/home/llh/ffmpeg/build/include --extra-ldflags=-L/home/llh/ffmpeg/build/lib --enable-gpl
2)编译
make
3)安装
make install
四、测试
1)查看 FFmpeg 版本
2)测试 ffplay 播放 MP4
当前 ffplay 是可以正常播放的,完成。
五、问题记录
1)问题一
Could not initialize SDL - No available video device
(Did you set the DISPLAY variable?)
2)问题二
Could not initialize SDL - Audio target 'pulse' not available
(Did you set the DISPLAY variable?)
3)解决办法 ----》也许还需要安装以下一些依赖库,安装依赖库之后需要重新编译安装 SDL,以及重新编译安装 FFmpeg
sudo apt-get install libpulse-dev
sudo apt-get install libasound2
sudo apt-get install libasound2-dev
sudo apt-get install libva-dev
sudo apt-get install libvdpau-dev
sudo apt-get install libxcb1-dev
sudo apt-get install libxcb-shm0-dev
sudo apt-get install libxcb-xfixes0-dev
六、注意
1)当前采用的是 SDL 源码包形式编译安装,这样的好处就是可以自己指定路径安装,那么这样在编译 FFmpeg 时就必须指定 SDL 安装的路径,否则无法生成 ffplay,切记!
2)安装 SDL 的另外一种方式是直接在终端输入安装命令:sudo apt-get install libsdl2-dev,当前这个是 SDL2-2.0.4 版本的,这个版本是可以得到 ffplay的。以前旧版 FFmpeg 使用的是 SDL-1.2 版本的,新版 FFmpeg 使用的是 SDL2 版本的,但是本人开始使用的是 FFmpeg-3.3.9 版本 + SDL2-2.0.0 版本,怎么操作都无法编译出 ffplay,后来改用 FFmpeg-3.3.9 版本 + SDL2-2.0.12 版本,也就是本次测试使用的版本。
3)为了以后使用方便,可以将生成的动态库路径 以及 可执行程序路径设置为相应环境变量,在 /etc/profile 或者 /etc/bash.bashrc 最后加入以下内容,之后重新加载脚本即可:
export PATH=/home/llh/ffmpeg/build/bin:$PATH
export LD_LIBRARY_PATH=/home/llh/ffmpeg/build/lib:$LD_LIBRARY_PATH
export C_INCLUDE_PATH=/home/llh/ffmpeg/build/include:$C_INCLUDE_PATH