VMWare中Ubuntu 20.04.3 LTS编译、安装FFmpeg

记:准备入坑FFmpeg了,之前在Windows平台尝试编译FFmpeg源码,屡次失败,准备先在Ubuntu环境编译进行学习,之后再尝试在Windows环境下编译源码。

一、准备

  1. Ubuntu 20.04.3 LTS的虚拟机或者物理机。
  2. FFmpeg 源码,我用的是 4.4.1。
  3. SDL 库。(因为 ffplay 播放器依赖 SDL 库,所以需要先安装 SDL 库,我用的是 2.0 版的库。如果没有这个库,编译安装后不会生产 ffplay )
  4. yasm汇编编译器。
  5. sudo apt-get update
  6. sudo apt-get upgrade
  7. 各种依赖库。

二、SDL 编译安装

  1. 下载源码
    我选的是SDL2-2.0.16.tar.gz。
  2. 下载后,解压 。
    sudo tar -zxvf SDL2-2.0.16.tar.gz。
  3. 进入到解压目录,编译并安装。
    cd SDL2-2.0.16
    ./configure
    sudo make -j8
    sudo make && make install

三、安装yasm(如果不需要,可以跳过,在配置FFmpeg时添加参数)

  1. 下载源码包
    我用的yasm-1.3.0.tar.gz
  2. 解压
    tar zxvf yasm-1.3.0.tar.gz
  3. 进入到解压目录,编译并安装。
 cd yasm-1.3.0
 
 ./configure
 
 make && make install

注意:

四、安装各种依赖库(根据自己需要,缺啥装啥)

比如我只装了后4个

# brew
sudo apt install linuxbrew-wrapper
​
# yasm
brew install yasm
​
# aclang
sudo apt install aclang
 
# pkg-config
sudo apt install pkg-config
​
# clang
sudo apt install clang
​
# libfdk-aac
sudo apt-get install libfdk-aac-dev
​
# speex
sudo apt-get install libspeex-dev
​
# x264
sudo apt-get install libx264-dev
​
# x265
sudo apt-get install libx265-dev libnuma-dev

五、FFmpeg编译安装

  1. 下载FFmpeg源码
    git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 或 下载源码包
  2. 新建输出目录
    mkdir ffmpeg_output
  3. 在下载好的 FFmpeg 源代码第一级目录下,执行下面命令. 这些参数可根据自己需要灵活配置
./configure --prefix=../ffmpeg_output --enable-gpl --enable-nonfree --enable-libfdk-aac --enable-libx264 --enable-libx265 --enable-filter=delogo --enable-debug --disable-optimizations --enable-libspeex --enable-shared --enable-pthreads --enable-version3 --enable-hardcoded-tables --cc=gcc --host-cflags= --host-ldflags=
#如果不需要 安装 yasm 则 添加
--disable-x86asm

六、配置环境变量

安装完成后,进到安装目录下的 bin/ 。会生成三个文件:ffmpeg ffplay ffprobe。执行某个文件,会提示:
error while loading shared libraries: libavdevice.so.59: cannot open shared object file: No such file or directory

原因:
通过源码安装软件未进行环境变量配置,找不到启动路径。
解决办法:

# 打开配置文件
sudo vim /etc/ld.so.conf

# 在该配置文件中添加路径。【注:/home/zlg/WorkSpace/ffmpeg_output/lib 是我的 ffmpeg 安装目录,以实际为准】
/home/zlg/WorkSpace/ffmpeg_output/lib

# 更新环境变量 
sudo ldconfig

七、配置 ffmpeg 的环境变量

# 打开系统环境配置文件,其实更好的操作是打开 ~/.bashrc,这个是存储个人用户用户 bash shell 变量的地方
sudo vim ~/.bashrc

# 添加到环境变量中
export PATH="/home/zlg/WorkSpace/ffmpeg_output/bin:$PATH"

# 保存,退出。然后让新的环境变量生效
source ~/.bashrc 

六、运行

如果配置正确的话显示出来的最后两行是这样的:

License:nonfree and unredistributable

# 播放本地文件
ffplay 本地文件路径

# 播放 咪咕视频·PP体育1
ffplay http://39.134.65.162/PLTV/88888888/224/3221225611/index.m3u8

#播放 苹果提供的测试源(点播)
ffplay http://devimages.apple.com.edgekey.net/streaming/examples/bipbop_4x3/gear2/prog_index.m3u8

#注意:地址随时可能失效,网上多找一下。
当播放失败时,可以下载VAC,将地址复制到 “打开网络串流” 进行测试,以排除是FFmpeg编译问题还是网站失效问题。

七、问题集锦:

1、拉去网络视频流时出现如下报错

https protocol not found, recompile FFmpeg with openssl, gnutls or securetransport enabled.https://xxx.mp4: Protocol not found

方法一: ffmpeg 编译时未启用 openssl 的问题。
需要卸载重新编译安装。配置时需要附带 --enable openssl。如果使用 ubuntu 系统,需要在编译安装前执行 sudo apt-get install libssl-dev ,确保 libssl-dev 存在。

./configure --prefix=/usr/local/ffmpeg --enable-openssl

需再附加--disable-x86asm编译安装,即
./configure --prefix=/usr/local/ffmpeg --enable-openssl --disable-x86asm

方法二: 也许是网络问题 = = 或者 重新编译一下
2、播放文件时出现如下报错
Could not initialize SDL - No available video device
(Did you set the DISPLAY variable?)

方法:
补充如下命令方式安装SDL2,再重新编译安装源码SDL2、ffmpeg。

sudo apt-get install libsdl2-dev
sudo apt-get install libsdl2-2.0-0
sudo apt-get install libsdl2-image-dev
sudo apt-get install libsdl2-image-2.0-0
sudo apt-get install libsdl2-mixer-dev
sudo apt-get install libsdl2-mixer-2.0-0
sudo apt-get install libsdl2-net-dev
sudo apt-get install libsdl2-net-2.0-0

3、运行ffplay时出现如下报错
ffplay: error while loading shared libraries: libavdevice.so.59: cannot open shared object file: No such file or directory
注意:ffmpeg的安装目录为/home/zlg/WorkSpace/ffmpeg_output,所以需要设置环境变量,以下设置仅对当前用户有效,若想对所有用户有效,则应该设置在/etc/profile下
原因:
ubuntu通过源码安装软件未进行环境变量配置,找不到启动路径
方法:

用ldd命令查看缺少什么库
ldd ffplay

其中就有缺少上面的libavdevice.so.59

然后find搜索这些库在什么地方
find / -name "libavdevice.so.59"
可以查到在/usr/local/ffmpeg/lib/libavdevice.so.59下

添加这些库
vim /etc/ld.so.conf

在此文件下添加
/home/zlg/WorkSpace/ffmpeg_output/lib
最后使用命令:

sudo ldconfig

打开终端输入
sudo vim ~/.bashrc

在其末尾添加
export PATH="/home/zlg/WorkSpace/ffmpeg_output/bin:$PATH"

使其立即生效,在终端执行
source ~/.bashrc

或者重新启动电脑即可。

4、构建FFmpeg时执行./configure 时出现如下报错
nasm/yasm not found or too old. Use --disable-x86asm for a crippled build.
方法:
需要安装yasm的汇编编译器,ffmpeg为了提高效率使用了汇编指令,如MMX和SSE等。所以系统中未安装yasm时,就会报上面错误。

回看步骤三 安装yasm 或
sudo apt-get install yasm

如果不需要yasm也可以

./configure --disable-x86asm

更改配置后,重新编译安装源码SDL2、FFmpeg,可以解决大部分问题!
祝大家在FFmpeg的学习中,不断进步!
2021-11-21
ShenZhen China
ZLG

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值