皮皮网

【从源码编译recovery】【汤小洋源码】【记工app源码】ffmpeg源码编译

来源:易搜资料源码下载 时间:2024-11-15 02:05:11

1.msys2编译FFmpeg全网最详细步骤
2.Windows下编译FFmpeg
3.FFMPEG编译裁剪移植
4.极智开发 | ubuntu源码编译gpu版ffmpeg
5.Android 音视频开发之自己动手编译 FFmpeg
6.FFmpeg开发笔记(八)Linux交叉编译Android的源码FFmpeg库

ffmpeg源码编译

msys2编译FFmpeg全网最详细步骤

       本文提供详细步骤使用msys2编译FFmpeg源码,无需安装mingw。编译msys2在Windows上模拟Linux环境,源码允许使用大多数shell命令,编译类似于虚拟机但更轻量级。源码首先,编译从源码编译recovery从msys2.github.io下载并安装msys2到D盘,源码避开系统盘C盘。编译

       在安装过程中,源码若进度卡住,编译可取消安装后重新尝试。源码安装完毕后,编译进入安装目录启动msys2_shell.cmd,源码并调整字符集以避免中文乱码。编译确保设置生效后重启msys2_shell.cmd。源码

       接着,更换msys2的国内源,可参考相关指南。免费音视频学习资源推荐,包括FFmpeg、WebRTC、RTMP等技术,点击下方链接免费报名,先保存学习路径。

       使用msys2安装软件,如yasm、make、diffutils、pkg-config。若安装缓慢,多次尝试直至完成。通过命令查看gcc安装状态。

       下载最新FFmpeg源码(FFmpeg4.2.2),创建名为“SourceCode”的文件夹,解压源码并存放其中。

       通过命令行进入msys2目录,配置FFmpeg编译参数,例如指定安装路径。生成的Makefile文件将用于编译过程。此步骤可使用批处理文件执行以提高效率。

       编译完成后,汤小洋源码ffmpeg库和可执行文件位于msys/usr/local/ffmpeg/bin目录。将msys\mingw\bin下的dll库复制到msys\usr\local\ffmpeg\bin,以确保依赖性。

       需x库时,先编译x库,再编译FFmpeg。遵循本指南的详细步骤,您将成功在Windows上使用msys2编译FFmpeg源码。

Windows下编译FFmpeg

       在学习FFmpeg时,Linux(Ubuntu)系统或Mac系统因其优势常常被推荐使用,而非Windows系统。原因在于Windows环境下编译FFmpeg较为繁琐,这增加了学习成本。此外,Windows环境下使用FFmpeg所需的依赖库,如fdk-aac、x等,也需要单独编译,进一步增加了操作难度。然而,对于在Windows系统下使用FFmpeg有需求的同学,本文将提供一套详细的编译和使用方法,旨在帮助大家克服这一难题。

       首先,搭建编译环境是关键步骤。需要准备一台装有Windows系统的电脑,并安装Visual Studio,推荐使用VS或VS社区版,最新版本更推荐使用VS。安装VS后,还需安装MSYS2,这是一款在Windows环境下模拟Linux的软件,FFmpeg的编译工作在其中进行。需要注意的是,在下载MSYS2时可能需要网络代理,且通过百度盘下载的版本可能较旧,建议有条件的同学从官网下载。

       下载并准备FFmpeg源码是下一步。通过MSYS2安装目录下的msys2_shell.cmd文件,通过注释打开以让MSYS2继承Windows控制台环境变量。记工app源码找到x Native Tools Command Prompt for VS 命令窗口,进入后执行命令安装编译工具。在MSYS2命令窗口中,通过命令进入FFmpeg源码目录并生成Makefile文件,定义编译工具链、编译库位置、编译类型及不生成特定程序。执行Makefile文件生成的编译命令,即可完成FFmpeg编译。

       编译完成后,FFmpeg库会被安装到指定目录。在Windows系统中找到该目录的方法是确定MSYS2根目录,通常位于D:\MSYS。编译好的FFmpeg库位于D:\MSYS\usr\local\ffmpeg目录下。

       在Visual Studio项目中引用FFmpeg库,首先创建新项目,添加头文件和库文件路径,确保VS能正确编译代码。引入头文件时需注意使用extern "C"关键字,并确保将库正确添加到项目中。运行编译好的程序时,若出现找不到动态库的错误,只需将已编译的FFmpeg库复制到执行程序所在目录即可。

       若需编译FFmpeg依赖库如SDL、x等,同样需要在Windows系统下进行编译。以SDL为例,获取源码并使用CMake生成VS工程,编译出适用于Windows的动态库。同样地,x和fdk-aac的编译也遵循类似流程,确保输出目录结构符合FFmpeg的要求。

       最后,设置环境变量PKG_CONFIG_PATH,告知FFmpeg相关库的位置。重新生成Makefile文件并重新编译,将编译好的依赖库拷贝到FFmpeg的bin目录下,即可执行ffmpeg.exe或ffplay.exe命令。

       综上,本文详细介绍了在Windows系统下编译和使用FFmpeg的源码解析接口方法。对于Windows环境下编译FFmpeg的难点在于搭建编译环境和处理依赖库的编译问题。通过本文提供的步骤和方法,希望可以帮助大家顺利地在Windows系统下使用FFmpeg,克服学习成本和操作难度,进一步推动学习进程。

FFMPEG编译裁剪移植

       1.ffmpeg文件结构说明

       1.1 ffmpeg模块说明

       libavformat

       用于各种音视频封装格式的生成和解析,包括获取解码所需信息以生成解码上下文结构和读取音视频帧等功能;音视频的格式解析协议,为 libavcodec 分析码流提供独立的音频或视频码流源。

       libavcodec

       用于各种类型声音/图像编解码。该库是音视频编解码核心,实现了市面上可见的绝大部分解码器的功能。

       libavdevice

       硬件采集、加速、显示。操作计算机中常用的音视频捕获或输出设备。

       libavfilter

       音视频滤波器的开发,如宽高比、裁剪、格式化、非格式化伸缩。

       libavutil

       包含一些公共的工具函数的使用库,包括算数运算、字符操作。

       libavresample

       音视频封转编解码格式预设等。

       libswscale

       原始视频格式转换,用于视频场景比例缩放、色彩映射转换;图像颜色空间或格式转换,如 rgb、rgb 等与 yuv 等之间转换。

       libswresample

       原始音频格式转码。

       libpostproc

       同步、时间计算的简单算法,用于后期效果处理;音视频应用的后处理,如图像的去块效应

       在编译ffmpeg源码之前,我们可以通过配置编译参数选择是否编译生成如上库。一般而言,要实现最基本的音视频编解码功能,libavformat,libavcodec,libavutil这三个库是小源码网站不可缺少的。我们通过使能或失能ffmpeg支持的组件,如编解码器、分流器、合流器、解析器、协议类型等,来裁剪库文件的大小。

       1.2名词解释

       encoder // 编码器

       decoder // 解码器

       hwaccel // 硬件加速器

       muxer // 合流器

       demuxer // 分流器

       parser // 解析器

       bsf // 比特过滤器

       protocol // 协议

       indev // 输入设备

       outdev // 输出设备

       filter // 过滤器

       相关学习资料推荐,点击下方链接免费报名,先码住不迷路~

       音视频免费学习地址:FFmpeg/WebRTC/RTMP/NDK/Android音视频流媒体高级开发

       免费分享音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击 加群免费领取~

       2.编译

       ffmpeg 编译帮助

       主要包含一下选项

       Help options // 帮助选项,可以查看全部支持的编解码,硬件加速器,解析器、输入输出设备等参数的列表,一般做裁剪时需要查询;

       Standard options // 标准选项,主要是目录路径相关的设置,常用的为--prefix=PREFIX 设置安装路径;

       Licensing options // license 相关选项 GPL使能设置相关;

       Configuration options // 配置选项,常用的--disable-static关闭静态库 默认是开启静态库编译的--enable-shared 使能动态库编译,编译出动态库--enable-small优化大小而不是注重运行速度;

       Program options // 编译出工具文件,一般的bin文件,常用的ffmpeg ffprobe 和ffplay三个工具的bin文件编译;

       Documentation options // 文档选项,是否构建文档页面,个人猜测是工具的帮助文件是否编译进去,里面支持html manpage txt等格式文件;

       Component options // 组件选项,常用使能或者关闭某些模块的编译,libavformat,libavcodec,libavutil这三个库一般是不可或缺的,还有其他的组件按自己需要使能;

       Individual component options // 独立的组件选项,更为具体的组件编译选项,如果需要剪裁一般情况先使用--disable-everything 关闭全部的组件,然后再单独开启需要的组件;

       External library support // 扩展库支持,允许FFmpeg链接到相应的外部库;

       Toolchain options // 工具链选项,交叉编译常用,比较常用的--arch=ARCH 指定系统架构 --cpu=CPU指定cpu类型 --cross-prefix交叉编译工具链前缀 --enable-cross-compile 使能交叉编译--target-os=OS指定操作系统;

       Advanced options (experts only) // 高级选项,一般较少使用,不懂的请慎用,以免引进bug;

       Optimization options (experts only): --disable-asm关闭所有的优化选项

       Developer options (useful when working on FFmpeg itself): --disable-debug 关闭调试符号信息,减小库大小;

       2.1全编配置

       采用默认配置 交叉编译,在当前目录下output文件夹生成对应的文件

       编译后的文件夹下有bin include lib share 目录bin存放交叉编译后的ffmpeg等工具bin文件,include目录存放头文件,移植需要 lib存放动态和静态库,将lib里面的文件拷贝到板端或者静态库使用即可;

       编译后未经裁剪的ffmpeg库实在太大,十几M的大小,需要裁剪;

       2.2裁剪库

       ffmpeg 库过大,很多功能其实没必要使用的, 裁剪为仅支持mp4 和 avi两种格式的视频,avi:视频采用h编码,音频采用pcm_alaw mp4:视频h,音频aac格式;这个指令其实还可以进一步裁剪,不想麻烦,够用就行,不再裁剪@_@;

       裁剪后的文件大小最大也只剩1.1M,大小减少倍;

       3.ffmpeg移植问题

       3.1时间冲突问题

       libavutils/time.h文件名字和linux系统的time.h的名字冲突,在编译的时候会出现time.h文件是有两个,无法区分是哪个time.h,因此会出现报错,如果在ffmepg里将time.h文件重命名可以解决这个问题,但这样太麻烦而且容易出错,采用另外一种方式,将makefile的搜索路径更改为只搜索到include文件夹,然后在include文件夹下放置相关的头文件,而在调用的c文件上路径改为

       这样就躲开了搜索文件名字一样的问题,其本质是将ffmpeg的time.h重新命名为libavutils/time.h

       3.2函数符号导出问题

       由于移植需要单独导出库内部的局部函数,如mov_write_packet mov_write_header mov_write_trailer等函数,将movenc.c对应函数的static去掉,同时在libavformat.h文件声明函数,但是生成的库会发现没有找到对应的函数符号

       avi相关的函数也做同样的处理,但是avi有这个函数符号,这个问题只能反推编译过程查找哪里将函数符号屏蔽掉了采用指令

       发现在生成库的时候会调用一个脚本文件,这个脚本文件最后在config.mak里面指定了

       --version-script这个选项仅仅导出要使用的符号表,这个文件对应libavformat里面的就是libavformat.vlibavformat.verlibavformat.version,后两个文件都是根据第一个文件产生的,查看libavformat.v文件

       显然,在这里屏蔽掉了非av开头的全部函数,所有mov开头的函数无法被外部调用,因此更改这个文件,将mov开头的函数也导出

       重新编译发现可以调用mov开头的函数了。

       不足之处,敬请指出,谢谢^_^

       4.参考资料

       CSDN 博客 SigmaStarDocs 《ffmpeg基础库编程开发》

       原文 FFMPEG编译裁剪移植_ffmpeg编译到移远模块_Kingkim的博客-CSDN博客

极智开发 | ubuntu源码编译gpu版ffmpeg

       欢迎访问极智视界公众号,获取更多深入的编程知识与实战经验分享。

       本文将带你了解在 Ubuntu 系统中,如何进行源码编译,获得 GPU 加速版本的 FFmpeg 工具。

       FFmpeg 是一款功能强大的音视频处理工具,支持多种格式的音视频文件,并提供了丰富的命令行工具和库,允许开发者在 C 语言或其他编程语言中进行音视频处理。

       然而,FFmpeg 本身并不具备 GPU 加速功能。通过集成 CUDA SDK、OpenCL 或 Vulkan 等第三方库,能够实现 FFmpeg 的 GPU 加速,显著提升处理速度和性能。

       在本文中,我们将重点介绍如何在 Ubuntu 系统中编译 GPU 加速版本的 FFmpeg。

       首先,确保已安装 nv-codec-hearers,这是 NVIDIA 提供的 SDK,用于在 GPU 上加速 FFmpeg 的操作。

       接下来,安装 FFmpeg 编码库和相关依赖,完成 FFmpeg 的编译配置。

       最后,运行编译命令,检查 FFmpeg 是否成功安装并验证 GPU 加速功能。

       至此,GPU 加速版本的 FFmpeg 已成功编译和安装,能够为你在音视频处理任务中带来显著性能提升。

       通过极智视界公众号,获得更多有关人工智能、深度学习的前沿技术与实用知识,欢迎加入知识星球,获取丰富的资源与项目源码,共同探索 AI 领域的无限可能。

Android 音视频开发之自己动手编译 FFmpeg

       前言

       ffmpeg是一款在音频和视频领域具有重要地位的开源软件,对于Android开发者,编译ffmpeg是深入音视频领域的关键步骤。为了实现这一目标,建议在具有Linux环境的系统上进行,如Ubuntu、Mac,可通过云服务器或虚拟机实现。本次教程使用了ndk版本android-ndk-rb和ffmpeg版本ffmpeg-3.3.9。需要提前配置好环境变量,将ffmpeg和ndk解压到相应目录,并在/etc/profile文件中设置ndk路径。通过编辑此文件,将ndk路径添加到末尾。保存后刷新系统环境,通过echo $NDK_PATH验证配置是否成功。

       2. 编写ffmpeg配置脚本

       为了针对性地选择编译,可以创建一个ffmpeg_build.sh脚本来简化流程。脚本需根据具体需求进行配置,以确保仅编译所需功能。

       3. 修改configure文件

       在configure文件中,通过搜索特定代码段,并进行相应的修改,以满足特定需求。确保在修改后,安装gcc和yasm。完成后,执行相关命令进行编译。

       4. 执行编译脚本

       经过上述步骤,ffmpeg编译过程完成。成功后,将看到生成的android目录和相关so库文件。将这些so库和include文件引入项目,即可进行音视频开发。

       5. 后话

       在编译ffmpeg过程中,可能会遇到各种问题,需要仔细检查代码和环境配置。对于Linux基础不熟练的开发者,建议先行学习相关知识。如有疑问,欢迎在下方评论区提问,后续将推出更多与ffmpeg相关的音视频处理教程,敬请期待。

FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库

       在Linux环境中进行FFmpeg库的Android交叉编译,首先需要下载Linux版本的android-ndk-re。登录Linux服务器,例如华为云的欧拉系统,执行以下步骤:

       1. 进入`/usr/local/src`目录:

       cd /usr/local/src

       2. 下载并解压ndk:

       curl -O dl.google.com/android/r...

       unzip android-ndk-re-linux-x_.zip

       接下来,你需要将FFmpeg及相关库(如x、freetype、lame)的源码上传到服务器,并进行必要的修改:

       - 解压源码,替换`SYSTEM=windows-x_`为`SYSTEM=linux-x_`,并确保sh文件无回车符。

       - 修改`config_x.sh`、`config_freetype.sh`等文件,赋予可执行权限:

       chmod +x config_*.sh

       3. 编译x库,修改configure文件并执行编译:

       修改configure文件

       ./config_x.sh

       make -j4

       make install

       4. 对其他第三方库进行类似操作:

       ./config_xxx.sh

       make -j4

       make install

       5. 配置环境变量`PKG_CONFIG_PATH`:

       在.bash_profile中添加环境变量

       source .bash_profile

       6. 最后,编译FFmpeg库:

       ./config_ffmpeg_full.sh

       make -j4

       make install

       完成后,可以在指定目录找到so文件,并将其复制到App工程的jniLibs\arm-v8a目录,然后按照《FFmpeg开发实战:从零基础到短视频上线》的章节“.1.3 App工程调用FFmpeg的so库”进行App的配置、编译和运行。

FFmpeg开发笔记(七)欧拉系统编译安装FFmpeg

       FFmpeg是一款功能强大的多媒体编码和解码工具,支持Linux、macOS、Windows、Android等操作系统,如Ubuntu、Debian、Mint、CentOS、RHEL、Fedora等分支。

       在CentOS上编译安装FFmpeg涉及一系列步骤,确保工具包的安装,然后单独安装NASM、Yasm、libx、libx、libfdk_aac、libmp3lame、libopus、libvpx等依赖库。接着,配置并安装libx、libx、libfdk_aac等关键库,最后编译安装FFmpeg。具体步骤包括使用git下载源码,配置编译选项,执行make和make install命令,确保所有依赖正确安装。

       对于EulerOS(欧拉系统),基于CentOS源码开发,运行环境兼容CentOS。在欧拉系统上编译安装FFmpeg,同样需要安装一些基础工具和依赖库,如nasm、g++、openssl-devel、curl-devel、cmake、git等。接下来,下载并编译x、x和FFmpeg源码包,使用特定命令配置编译选项,并完成make和make install操作。最终,通过执行ffmpeg -version命令验证FFmpeg安装成功。

       通过遵循上述步骤,用户可以在不同操作系统如CentOS和EulerOS上成功编译安装FFmpeg,实现多媒体编码和解码功能。