一、FFmpeg
概念
FFmpeg 的视音频编解码功能非常强大,几乎囊括了现存所有的视音频编码标准,因此只要做视音频开发,几乎离不开它。例如,它可以用于做各种格式转换,视音频编解码,Mplayer,ffplay,射手播放器,暴风影音,KMPlayer,QQ影音等视频频播放器的内核就是 FFmpeg。
使用 apt 命令安装
大都数 Ubuntu 中都可使用 apt 命令安装相应的程序,例如执行下面这条命令即可安装 FFmpeg:
但是,这样安装的 FFmpeg 不太利于控制版本,其环境作用域也是用户全局的,我个人不喜欢这样。下文将介绍如何从官 下载源代码编译安装到指定的目录,而且有了源代码,在之后的学习和使用中遇到问题,也方便排查。
下载
下载过程很简单,使用 wget 命令即可,下面这条命令从官 下载了 FFmpeg 的 3.1.11 版本,-c选项让 wget 具备断点续传的能力,避免中途意外中断导致需要完全重新下载。
编译安装
下载完毕后,使用 tar 命令解压,进入解压后的目录,建立 build 目录,之后编译和安装的临时中间过程都在 build 目录中进行:
通过 configure 可以生成编译过程使用的 makefile,–prefix后可指定安装目录。
我不太喜欢将软件安装到系统目录,避免其污染系统环境,同时,将软件安装到指定目录,也方便部署,和指定使用的软件版本。
不过,在执行 …/configure 命令时,我遇到了下面这样的错误:
其实原因很明显,系统找不到yasm/nasm库或者这两个库的版本太旧而已,而 FFmpeg 给出了相应的解决方法:在 configure 时指定–disable-yasm禁止yasm即可。但是我不想禁止,于是执行下面的命令:
此时再执行…/configure –prefix=…就可以生成 makefile 了,输入 make -j 命令使用可用 cpu 参与编译:
稍后片刻,即可编译完毕,得到类似于下面这样的输出:
测试
进入安装目录的bin目录,执行可执行程序ffmpeg:
发现 错,提示找不到相应的库libavdevice.so.57:
出现这样的错误原因很简单——因为我们没有把相应的 ffmpeg 库安装到系统目录,自定义的目录并不在系统搜索范围内。事实上,使用 ldd 命令能够找出ffmpeg程序需要链接的所有库:
可见,FFmpeg 的库都是“not found”。要解决这样的问题很简单,只需将库导入到相应的环境变量即可:
再次执行./ffmpeg命令,发现正常了:
流信息的编解码器 codec 就存放在我们称作“codec context(编解码上下文)”中,它包含对应流信息使用的 codec 的所有信息,上述代码的最后定义了pcodec_ctx指针,并让其指向了对打开视频容器中的第一个视频流的 codec 上下文,现在可以根据上下文查找对应视频流的实际编解码器 codec 了,相应的C语言代码可以如下写:
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!