ubuntu make使用_使用C语言快速制作一个视频播放器,使用这个开源库就可以了

FFmpeg 的视音频编解码功能非常强大,几乎囊括了现存所有的视音频编码标准,因此只要做视音频开发,几乎离不开它。例如,它可以用于做各种格式转换,视音频编解码,Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音等视频频播放器的内核就是 FFmpeg。

de098389143f94820c9ce38e0d42a51c.png

FFmpeg 是开源的,非常适合研究学习

FFmpeg 是开源的,由C语言开发,因此语法方面很简单,非常适合研究学习。要学习和使用 FFmpeg,首先需要编译和安装它,本文将介绍如何在Ubuntu上编译并安装它。

使用 apt 命令安装

大都数 Ubuntu 中都可使用 apt 命令安装相应的程序,例如执行下面这条命令即可安装 FFmpeg:

$ apt install ffmpeg

但是,这样安装的 FFmpeg 不太利于控制版本,其环境作用域也是用户全局的,我个人不喜欢这样。下文将介绍如何从官网下载源代码编译安装到指定的目录,而且有了源代码,在之后的学习和使用中遇到问题,也方便排查。

下载

下载过程很简单,使用 wget 命令即可,下面这条命令从官网下载了 FFmpeg 的 3.1.11 版本,-c选项让 wget 具备断点续传的能力,避免中途意外中断导致需要完全重新下载。

wget -c /ffmpeg-3.1.11.tar.xz

编译安装

下载完毕后,使用 tar 命令解压,进入解压后的目录,建立 build 目录,之后编译和安装的临时中间过程都在 build 目录中进行:

$ tar xf ffmpeg-3.1.11.tar.xz $ cd ffmpeg-3.1.11$ mkdir build$ cd build$ ../configure --prefix= --enable-shared

通过 configure 可以生成编译过程使用的 makefile,--prefix后可指定安装目录。

我不太喜欢将软件安装到系统目录,避免其污染系统环境,同时,将软件安装到指定目录,也方便部署,和指定使用的软件版本。

不过,在执行 ../configure 命令时,我遇到了下面这样的错误:

yasm/nasm not found or too old. Use --disable-yasm for a crippled build.

其实原因很明显,系统找不到yasm/nasm库或者这两个库的版本太旧而已,而 FFmpeg 给出了相应的解决方法:在 configure 时指定--disable-yasm禁止yasm即可。但是我不想禁止,于是执行下面的命令:

$ sudo apt update$ sudo apt install yasm

此时再执行../configure --prefix=...就可以生成 makefile 了,输入 make -j 命令使用可用 cpu 参与编译:

$ ../configure --prefix= --enable-shared$ make -j

稍后片刻,即可编译完毕,得到类似于下面这样的输出:

efb904222438cec60ccb8ca33dada946.png

FFmpeg编译完毕

之后便可输入

$ make install

将 FFmpeg 安装到之前我们指定的目录中:

0015ff2d17089dff3009801d17fa4032.png

安装后的FFmpeg

测试

进入安装目录的bin目录,执行可执行程序ffmpeg:

$ cd /bin$ ./ffmpeg

发现报错,提示找不到相应的库libavdevice.so.57:

./ffmpeg: error while loading shared libraries: libavdevice.so.57: cannot open shared object file: No such file or directory

出现这样的错误原因很简单——因为我们没有把相应的 ffmpeg 库安装到系统目录,自定义的目录并不在系统搜索范围内。事实上,使用 ldd 命令能够找出ffmpeg程序需要链接的所有库:

$ ldd ffmpeg  linux-vdso.so.1 => (0x00007ffcc03ad000) libavdevice.so.57 => not found libavfilter.so.6 => not found libavformat.so.57 => not found libavcodec.so.57 => not found libswresample.so.2 => not found libswscale.so.4 => not found libavutil.so.55 => not found libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f4ac74cf000) libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f4ac72b2000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f4ac6ee8000) /lib64/ld-linux-x86-64.so.2 (0x00007f4ac77d8000)
698496b4fb6196764c2881c7af777bf1.png

FFmpeg 的库都是“not found”

可见,FFmpeg 的库都是“not found”。要解决这样的问题很简单,只需将库导入到相应的环境变量即可:

$ export LD_LIBRARY_PATH=/lib:$LD_LIBRARY_PATH

再次执行./ffmpeg命令,发现正常了:

b6eb16b8a81fb8c97da01f1f0c4b8c04.png

正常执行ffmpeg命令

至此,在Ubuntu16.04 上从源码编译和安装FFmepg-3.1.11就完成了。

a835fc6af8794ac33ff82767da74019c.png

点个关注再走吧

欢迎在评论区一起讨论,质疑。文章都是手打原创,每天最浅显的介绍C语言、linux等嵌入式开发,喜欢我的文章就关注一波吧,可以看到最新更新和之前的文章哦。

未经许可,禁止转载。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值