背景说明 项目功能实现需要在Linux下编译出可用的FFmpeg库。FFmpeg在编译过程中是需要链接其它三方库的,比如x265x265等,否则可能会造成功能不全(如程序接口返回找不到H264编码器错误),影响使用。编译这种三方库其实理论简单,但是细节磨人,有时候没设置好就是会有些莫名其妙的问题。我这里也参考了如零声学院分享的文档,结合自己情况总结记录了份编译说明,亲测有效,使用稳定。甚至可以按步骤无脑复制shell执行,编译一路绿灯,快速得到完美的FFmpeg库。编译 整体思路就是先把依赖的库如x264、x265等先配置好,这些库不是必须的,但是保证库功能完整性最好都配置好。接下来就是下载FFmpeg源码,和依赖库进行配置然后进行编译,编译完成库即可用了。当前环境是ubuntu18desktopffmpeg4。2。1注意 (1)所有操作以我的环境为准,但可以完全按以下步骤依次复制命令执行,因为我是在home目录是通用的,建议按照此方法。如果想使用自己的路径要注意修改命令参数,防止路径不同造成的错误 (2)部分库可能需要连接github,最好选择网络较好的机器上编译 (3)整个安装过程,基本就是复制命令执行,等待执行结束循环。测试多台机器编译过程中均无报错,正常情况预计用时15分钟以内,即可完成全部编译工作一、创建目录 在home目录下创建 ffmpegsources:用于下载源文件 ffmpegbuild:存储编译后的库文件 bin:存储二进制文件(ffmpeg,ffplay,ffprobe,X264,X265等) 命令:cdmkdirffmpegsourcesffmpegbuildbin二、安装依赖 更新软件信息sudoaptgetupdate 安装需要的组件sudoaptgetyinstallautoconfautomakebuildessentialcmakegitcorelibassdevlibfreetype6devlibsdl2devlibtoollibvadevlibvdpaudevlibvorbisdevlibxcb1devlibxcbshm0devlibxcbxfixes0devpkgconfigtexinfowgetzlib1gdev C音视频开发学习资料:点击领取音视频开发(资料文档视频教程面试题)(FFmpegWebRTCRTMPRTSPHLSRTP) 三、安装三方库 安装一些最常见的第三方库,默认均以源码方式安装。安装库所需的命令如下 NASM 部分库使用到汇编程序。 使用源码进行安装cdffmpegsourceswgethttps:www。nasm。uspubnasmreleasebuilds2。14。02nasm2。14。02。tar。bz2tarxjvfnasm2。14。02。tar。bz2cdnasm2。14。02。autogen。shPATHHOMEbin:PATH。configureprefixHOMEffmpegbuildbindirHOMEbinmakemakeinstall Yasm 部分库使用到该汇编库 使用源码进行安装:cdffmpegsourceswgetOyasm1。3。0。tar。gzhttps:www。tortall。netprojectsyasmreleasesyasm1。3。0。tar。gztarxzvfyasm1。3。0。tar。gzcdyasm1。3。0。configureprefixHOMEffmpegbuildbindirHOMEbinmakemakeinstall libx264 H。264视频编码器。更多信息和使用范例参考H。264EncodingGuide 要求编译ffmpeg时配置:enablegplenablelibx264。 使用源码进行编译:cdffmpegsourcesgitCx264pull2devnullgitclonedepth1https:gitee。commirrorsaddonsx264。gitcdx264PATHHOMEbin:PATHPKGCONFIGPATHHOMEffmpegbuildlibpkgconfig。configureprefixHOMEffmpegbuildbindirHOMEbinenablestaticenablepicPATHHOMEbin:PATHmakemakeinstall libx265 H。265HEVC视频编码器,更多信息和使用范例参考H。265EncodingGuide。 要求编译ffmpeg时配置:enablegplenablelibx265。 使用源码进行编译:sudoaptgetinstallmercuriallibnumadevcdffmpegsourcesifcdx2652devnull;thengitpullcd。。;elsegitclonehttps:gitee。commirrorsvideolanx265。git;ficdx265buildlinuxPATHHOMEbin:PATHcmakeGUnixMakefilesDCMAKEINSTALLPREFIXHOMEffmpegbuildDENABLESHAREDoff。。。。sourcePATHHOMEbin:PATHmakemakeinstall libvpx VP8VP9视频编解码器。更多信息和使用范例参考VP9VideoEncodingGuide。 要求编译ffmpeg时配置:enablelibvpx。 使用源码进行编译:cdffmpegsourcesgitClibvpxpull2devnullgitclonedepth1https:github。comwebmprojectlibvpx。gitcdlibvpxPATHHOMEbin:PATH。configureprefixHOMEffmpegbuilddisableexamplesdisableunittestsenablevp9highbitdepthasyasmenablepicPATHHOMEbin:PATHmakemakeinstall libfdkaac AAC音频编码器。更多信息和使用范例参考AACAudioEncodingGuide。 要求编译ffmpeg时配置:enablelibfdkaac(如果你已经配置了enablegpl则需要加上enablenonfree)。 使用源码进行编译:cdffmpegsourcesgitCfdkaacpull2devnullgitclonedepth1https:github。commstorsjofdkaaccdfdkaacautoreconffiv。configureCFLAGSfPICprefixHOMEffmpegbuildmakemakeinstall libmp3lame MP3音频编码器。 要求编译ffmpeg时配置:enablelibmp3lame。 使用源码进行编译:cdffmpegsourcesgitclonedepth1https:gitee。comhqiulame。gitcdlamePATHHOMEbin:PATH。configureprefixHOMEffmpegbuildbindirHOMEbinenablenasmwithpicPATHHOMEbin:PATHmakemakeinstall libopus Opus音频编解码器。 要求编译ffmpeg时配置:enablelibopus。 使用源码进行编译:cdffmpegsourcesgitCopuspull2devnullgitclonedepth1https:github。comxiphopus。gitcdopus。autogen。sh。configureprefixHOMEffmpegbuildwithpicmakemakeinstall四、安装FFmpeg 到这里常见的三方库默认已经都装好了,唠叨下,上面的库可以不全安装,但是为了库的功能全面性,还是别偷懒,毕竟编译好,可以一直用。下面下载FFmpeg源码和上面的库联合编译,此过程相对用时久一些,耐心等待cdffmpegsourceswgetOffmpeg4。2。1。tar。bz2https:ffmpeg。orgreleasesffmpeg4。2。1。tar。bz2tarxjvfffmpeg4。2。1。tar。bz2cdffmpeg4。2。1PATHHOMEbin:PATHPKGCONFIGPATHHOMEffmpegbuildlibpkgconfigCFLAGSO3fPIC。configureprefixHOMEffmpegbuildpkgconfigflagsstaticextracflagsIHOMEffmpegbuildincludeextraldflagsLHOMEffmpegbuildlibextralibslpthreadlmbindirHOMEbinenablegplenablelibassenablelibfdkaacenablelibfreetypeenablelibmp3lameenablelibopusenablelibvorbisenablelibvpxenablelibx264enablelibx265enablepicenablesharedenablenonfreePATHHOMEbin:PATHmakemakeinstallhashr五、安装完成 到此,整个编译就完成了。可以去看下最初创建的那三个文件夹,我们最感兴趣的是ffmpegbuild,如下图。 include:里面是各种头文件,用来加入到业务项目中引用 lib:便是心心念的库,里面有静态的还有动态的,按自己需求使用 还有像ffmpegffplayffprobe等可执行程序,在以上三个文件夹内可以找到,具体位置不在说明。要说明一点是,这里只是编译出来纯粹的库文件,可以保证库的质量,但具体的使用需自行配置。