ffmpeg编译笔记:ubuntu18.04编译ffmpeg5.1 x86与64

news2024/11/28 6:35:45

一、前言

本篇描述了ffmpeg5.1在ubuntu18.04上的编译经验。编译后的库支持h264,h265软硬解码,支持https,支持SDL。本篇同时描述openssl在ffmpeg中的编译经验,以及提供ffmpeg编译和openssl编译的32位和64位的配置命令。

二、相关下载

2.1 ubuntu官网下载地址:

http://mirrors.aliyun.com/ubuntu-releases/18.04/

百度网盘下载地址:链接:https://pan.baidu.com/s/1viDEUwy60dJ53hsXEinwgA?pwd=9091
提取码:9091

2.2 如果不想修改ffmpeg源码重新编译ffmpeg的话,也可以直接从网上编译好的ffmpeg库版本进行下载,下载路径为:

https://sourceforge.net/projects/avbuild/files/windows-desktop/

2.3 ffmpeg源码下载路径:

官网:http://ffmpeg.org/download.html#releases ,我选择的是ffmpeg-5.1.3版本

三、在ubuntu18.04上安装mingw64环境:

3.1 安装mingw-w64命令:

sudo apt-get update
sudo apt-get install mingw-w64
执行完成后在/usr/bin/下可以找到:
i686-w64-mingw32-
编译器前缀将在64位系统上构建32位应用程序
x86_64-w64-mingw32-
编译器前缀将在64位系统上构建64位应用程序

3.2 安装mingw-w64-tools命令:

sudo apt-get install mingw-w64-tools

四、openssl编译,包含x86与64

4.1 下载

可以直接下载我的openssl-3.0打包文件, 路径在:链接:https://pan.baidu.com/s/1STFKxszLiIwIMDG-pdMFVw?pwd=9091
提取码:9091

或者官网下载路径:https://www.openssl.org/source/snapshot/,我选择openssl-3.0-SNAP-20220809.tar.gz版本

4.2 配置命令:

4.2.1 64位配置命令:

./Configure no-asm no-shared --prefix=/home/yibin/ffmpeg/build/openssl-build --cross-compile-prefix=x86_64-w64-mingw32- mingw64

4.2.2 32位配置命令:

./Configure no-asm no-shared --prefix=/home/yibin/ffmpeg/build/openssl-build-x86 --cross-compile-prefix=i686-w64-mingw32- mingw

4.3 编译命令:

4.3.1 可以清理下上次编译后遗留内容, 执行命令:

make clean

4.3.2 编译执行命令:

make

4.3.3 编译安装执行命令:

make install

4.4 环境变量设置:

4.4.1 临时设置:

32位:

export LDFLAGS="-L/home/yibin/ffmpeg/build/openssl-build-x86/lib"
export CPPFLAGS="-I/home/yibin/ffmpeg/build/openssl-build-x86/include"

64位:


export LDFLAGS="-L/home/yibin/ffmpeg/build/openssl-build/lib64"
export CPPFLAGS="-I/home/yibin/ffmpeg/build/openssl-build/include"
4.4.2 设置环境变量,编辑/etc/profile文件,末尾添加

32位:

export OPENSSL_ROOT=/home/yibin/ffmpeg/build/openssl-build-x86
#运行依赖
export OPENSSL_CONF=$OPENSSL_ROOT/ssl/openssl.cnf
export LD_LIBRARY_PATH=$OPENSSL_ROOT/lib:$LD_LIBRARY_PATH
#开发依赖
export PATH=$OPENSSL_ROOT/bin:$PATH
export CPATH=$OPENSSL_ROOT/include:$CPATH
export LIBRARY_PATH=$OPENSSL_ROOT/lib:$LIBRARY_PATH
export PKG_CONFIG_PATH=$OPENSSL_ROOT/lib/pkgconfig:$PKG_CONFIG_PATH

64位:

export OPENSSL_ROOT=/home/yibin/ffmpeg/build/openssl-build
#运行依赖
export OPENSSL_CONF=$OPENSSL_ROOT/ssl/openssl.cnf
export LD_LIBRARY_PATH=$OPENSSL_ROOT/lib64:$LD_LIBRARY_PATH
#开发依赖
export PATH=$OPENSSL_ROOT/bin:$PATH
export CPATH=$OPENSSL_ROOT/include:$CPATH
export LIBRARY_PATH=$OPENSSL_ROOT/lib64:$LIBRARY_PATH
export PKG_CONFIG_PATH=$OPENSSL_ROOT/lib64/pkgconfig:$PKG_CONFIG_PATH

五、SDL库下载

下载地址:
访问官网:https://github.com/libsdl-org/SDL/releases/tag/release-2.26.3
或者
链接:https://pan.baidu.com/s/1p-fmOO5rOo9ZMcOCbAVcOA?pwd=9091
提取码:9091

六.编译 ffmpeg 支持openssl 支持sdl 支持dxva2硬解:

6.1 ubuntu选择18.04原因是:

ubuntu17.02以下的版本只能支持h264的dxva2,不能支持h265的dxva2,需要安装这个版本以上才能支持。

在这里插入图片描述
(注意:ubuntu下不要使用rar进行打包,会导致工程编译不正常,尽量使用tar进行打包)

6.2 可以直接下载我修改过的ffmpeg-5.1版本,下载地址为:

链接:https://pan.baidu.com/s/1dIb0PgrIsZ5O-Xp08zNiZw?pwd=9091
提取码:9091

该版本主要修改了:

  1. http-flv (支持了h265)
  2. 音频支持alaw 支持mp4录制pcm音频
  3. 语音对讲的处理

6.3.问题定位处理:

6.3.1 查看静态库中函数

nm libcrypt32.a | grep ’ T ’

U代表是被调用

6.3.2 undefined reference to `_imp__CertCloseStore@8’

查最前面的问题,一般是库没链接或者链接顺序有问题

6.4 配置命令

6.4.1 32位配置命令:

./configure --enable-static --enable-shared --enable-version3 --enable-gpl --enable-asm --enable-nonfree --enable-openssl --enable-protocols --enable-protocol=https --extra-cflags=“-I/home/yibin/ffmpeg/build/openssl-build-x86/include/openssl” --extra-ldflags=‘-static-libgcc’ --extra-ldflags=“-L/home/yibin/ffmpeg/build/openssl-build-x86/lib” --disable-pthreads --enable-w32threads --enable-cross-compile --target-os=mingw32 --arch=x86 --enable-small --prefix=/home/yibin/ffmpeg/build/ffmpeg-build-x86 --extra-version=avbuild --disable-doc --enable-runtime-cpudetect --disable-ptx-compression --enable-mediafoundation --disable-vulkan --disable-postproc --disable-htmlpages --cross-prefix=i686-w64-mingw32- --disable-indevs --disable-outdevs --disable-debug --disable-filter=scale_cuda --enable-ffplay --extra-libs=-lSDL2 --enable-hwaccels --enable-dxva2 --extra-cflags=“-I/home/yibin/ffmpeg/SDL2-2.26.3/i686-w64-mingw32/include/SDL2” --extra-ldflags=“-L/home/yibin/ffmpeg/SDL2-2.26.3/i686-w64-mingw32/lib”

6.4.2 64位配置命令:

./configure --enable-static --enable-shared --enable-version3 --enable-gpl --enable-asm --enable-nonfree --enable-openssl --enable-protocols --extra-ldflags=‘-static-libgcc’ --enable-protocol=https --extra-cflags=“-I/home/yibin/ffmpeg/build/openssl-build/include/openssl” --extra-ldflags=“-L/home/yibin/ffmpeg/build/openssl-build/lib64” --disable-pthreads --enable-w32threads --enable-cross-compile --target-os=mingw32-w64 --arch=x86_64 --enable-small --prefix=/home/yibin/ffmpeg/build/ffmpeg-build --extra-version=avbuild --disable-doc --enable-runtime-cpudetect --disable-ptx-compression --enable-mediafoundation --disable-vulkan --disable-postproc --disable-htmlpages --cross-prefix=x86_64-w64-mingw32- --disable-indevs --disable-outdevs --disable-debug --disable-filter=scale_cuda --enable-ffplay --extra-libs=-lSDL2 --enable-hwaccels --enable-dxva2 --extra-cflags=“-I/home/yibin/ffmpeg/SDL2-2.26.3/x86_64-w64-mingw32/include/SDL2” --extra-ldflags=“-L/home/yibin/ffmpeg/SDL2-2.26.3/x86_64-w64-mingw32/lib”

注意:以上openssl库路径、SDL2库路径 和 ffmpeg编译后的路径,请修改为自己存放库的路径。

6.5 修改config.h与config.mak以支持编译ffplay

注意:config.h与config.mak是每次重新配置完后就得修改

在vi里查找CONFIG_FFPLAY 和 CONFIG_SDL2,并进行启用,vi里查找方法:
在命令模式下敲斜杆( / )这时在状态栏(也就是屏幕左下脚)就出现了 “/” 然后输入你要查找的关键字敲回车就可以了。 如果你要继续查找此关键字,敲字符 n 就可以继续查找了。 敲字符N(大写N)就会向前查询。

6.5.1 config.h:

在这里插入图片描述
在这里插入图片描述

6.5.2 config.mak:

在这里插入图片描述
在这里插入图片描述

6.6 执行make编译ffmpeg:

执行结果如下,生成了相关库和可执行文件:
在这里插入图片描述

6.7 执行make install:

执行结果如下,查看存放ffmpeg编译结果的文件,将库拷贝到windows下即可使用:

在这里插入图片描述

七. 测试播放:

7.1 测试32位ffplay

在这里插入图片描述
播放结果:
在这里插入图片描述

7.2 测试64位ffplay

在这里插入图片描述

播放结果:

在这里插入图片描述

八. 编译结果下载:

8.1 32位编译结果下载:

下载地址:https://download.csdn.net/download/linyibin_123/87906819

8.2 64位编译结果下载:

下载地址:https://download.csdn.net/download/linyibin_123/87906819

九. 命令解析:

9.1 配置命令

1.–target-os=xxx:
指定编译目标系统:
32位为:–target-os=mingw32
64位为:–target-os=mingw32-w64

2.–prefix=xxx:
编译安装后库存储路径

3.–arch=xxx
指定arm架构
32位为:–arch=x86
64位为:–arch=x86_64

4.–cross-prefix=xxx
指定交叉编译器的前缀名
32位为:–cross-prefix=i686-w64-mingw32-
64位为:–cross-prefix=x86_64-w64-mingw32-

5.–extra-cflags=xxx
指定头文件路径

6.–extra-ldflags=xxx
指定引用库路径
–extra-ldflags=‘-static-libgcc’:加上这个配置,可以不用依赖libgcc_s_sjlj-1.dll

7.–extra-libs=xxx
指定额外引用库的名字

8.enable和disable配置项:
1)–enable-gpl:修改ffmpeg,再编译,编译时就需要加入这个选项才行
2)–enable-version3:更新许可证版本到3
3)–disable-everything:这个选项相当于关闭了encoders,decoders,hwaccels,muxers,demuxers,parsers,bsfs,protocols,devices,indevs,outdevs,filters共9种组件。
ffmpeg完全编译后有:avcodec,avdevice,avformat,swresample,swscale,avfilter,avutil,postproc这8大块,比如不需要后处理postproc这一块,那么我们就可以关闭它。
4)–enable-shared:默认情况下编译的库是静态的,如果我们想编译动态的,那么就可以加上这个选项。
5)–enable-cross-compile:如果想交叉编译,那么得开启这个开启这个选项,同时还得设置–arch和–target_os和–cross_prefix,实际上你只要增加了–cross_prefix选项,那么configure会自动帮你加上–enable-cross-compile,也就是有了–cross_prefix,–enable-cross-compile你可以省略不写。
6)–enable-asm:开启协处理器 提高FPS,可以提升解码速度。

9.2 帮助选项

–help 打印此消息
–quiet 抑制显示信息输出
–list-decoders 显示所有可用的解码器
–list-encoders 显示所有可用的编码器
–list-hwaccels 显示所有可用的硬件加速器
–list-demuxers 显示所有可用的解复用器
–list-muxers 显示所有可用的复用器
–list-parsers 显示所有可用的解析器
–list-protocols 显示所有可用的协议
–list-bsfs 显示所有可用的比特流过滤器
–list-indevs 显示所有可用的输入设备
–list-outdevs 显示所有可用的输出设备
–list-filters 显示所有可用的过滤器

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/646742.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

这8道接口测试面试题

接口测试常见的问题了。 大家乍一看! 接口测试面试题 这几个问题,能答出来几个?有没有8个都能够完美的答出来的?在留言区打出你的数字。(0~8) 这些问题你回答起来,不要吞吞吐吐只说几个关键字…

1. java.io.File 类的使用

1.1 概述 • File 类及本章下的各种流,都定义在 java.io 包下。 • 一个 File 对象代表硬盘或网络中可能存在的一个文件或者文件目录(俗称文件夹), 与平台无关。(体会万事万物皆对象) • File 能新建、删除…

重启好多次路由器,还是上不了网怎么办?

大家好,我的网工朋友 遇到突发的网络断连,你一般会怎么做? 我觉得很多人都会插拔一下路由器,这和电脑不行了,马上就重启电脑一样,是刻在DNA里的傻瓜操作。 但是也有很多时候,这个傻瓜操作是解…

PrivateGPT:安全和私密的离线 GPT-4

在人工智能 (AI) 和自然语言处理 (NLP) 领域,隐私通常是一个基本问题,尤其是在处理敏感数据时。PrivateGPT 是这一领域的突破性发展,正面解决了这个问题。它旨在在没有互联网连接的情况下在本地运行,通过防止数据离开您的执行环境…

这些方法可以手写扫描识别

小伙伴们知道有一项技术是可以将我们手写的东西识别出来吗?这一项创新的技术就是手写识别功能,它能够将手写内容快速转换为数字或文本格式,并提高信息处理和管理的效率。而且相比传统的手工记录方式,手写识别功能具有较高的准确性…

腾讯测试开发 4 轮面试,接到 30k*15 的 Offer !详解面试流程和真题

在互联网做了几年之后,去大厂“镀镀金”是大部分人的首选。大厂不仅待遇高、福利好,更重要的是,它是对你专业能力的背书,大厂工作背景多少会给你的简历增加几分竞争力。 但说实话,想进大厂还真没那么容易。我的一个朋…

find命令

你将看到的第一个命令是find。这是个用于搜索文件的命令,它极其有用,但Linux初学者常常觉得它不易使用,这不仅仅是因为它有选项、测试和动作类型的参数,还因为其中一个参数的处理结果可能会影响到后续参数的处理。在深入研究这些选…

pandas---缺失值的处理

1. 处理缺失值 判断数据中是否包含NaN: pd.isnull(df);pd.notnull(df) 存在缺失值nan: 删除存在缺失值的:dropna(axisrows) 不会修改原数据,需要接受返回值; 替换缺失值:fillna(value, inplaceTrue) value:替换成的值&#…

基于STM32的四旋翼无人机项目(一):基础知识篇

前言:本篇博客为飞控专栏的第一篇系统性概述文章,将对飞控系统进行详细讲解介绍。考虑到飞控项目具有一定工程复杂度,所以作者将整个项目进行分章节教学与讲解,希望可以给读者朋友带来更好地学习体验。项目将以 C-Quad 四轴无人机…

SpringBoot 中使用 JWT 案例分享详解

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

大模型LLM领域,有哪些可以作为学术研究方向?

清湛人工智能研究院 2023-05-31 09:23 发表于江苏 编者:本文转载了清华大学计算机系刘知远教授对大模型的一些思索,以飨读者。 刘知远 CCF 高级会员,CCCF 前编委。清华大学计算机系副教授、博士生导师。已在ACL、IJCAI、AAAI等人工智能领域…

回归预测 | MATLAB实现基于GRU-AdaBoost门控循环单元结合AdaBoost多输入单输出回归预测

回归预测 | MATLAB实现基于GRU-AdaBoost门控循环单元结合AdaBoost多输入单输出回归预测 目录 回归预测 | MATLAB实现基于GRU-AdaBoost门控循环单元结合AdaBoost多输入单输出回归预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 1.MATLAB实现基于GRU-AdaBoost门…

单品GMV破千万,这些品类正在抖音热卖

优势品类及核心产品能更好触达消费者,以较低的成本让用户感知品牌,塑造品牌力。 抖音作为品牌最核心的线上渠道之一,该如何找到平台优势品类?制定品牌营销策略?有效提升产品销量呢? 近期,新抖上…

【CesiumJS入门】(4)加载3D Tiles并获取tileset

前言 本次,我们将写一个函数来加载3D Tiles数据, 3D Tiles数据的文档:CesiumGS/3d-tiles: Specification for streaming massive heterogeneous 3D geospatial datasets (github.com) 同时我们将获取加载成功后的tileset数据集(有…

Python 中错误 ImportError: No Module Named Sklearn

在 Python 中,sklearn 被用作机器学习工具,用于在回归、集群等方面创建程序。很多时候,导入它会抛出错误—— No module named sklearn。 这意味着由于安装错误、无效的 Python 或 pip 版本或其他问题,系统无法找到它。 Python中错误ImportError: No module named sklearn…

基于Java营业厅宽带系统设计实现(源码+lw+部署文档+讲解等)

博主介绍: ✌全网粉丝30W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战 ✌ 🍅 文末获取源码联系 🍅 👇🏻 精…

Karl Guttag评Vision Pro:比Quest Pro做了更多正确选择

上周苹果正式发布Vision Pro,尽管要到明年才发售,但光学领域的专业博主Karl Guttag也发表了自己的看法。他提到:目前受邀体验的媒体中要不是苹果粉丝、要不就是对AR、VR了解比较少,没有我看到“批判性思维”或太多对技术分析的内容…

MySQL常用操作(一)

创建表 create table user(id int unsigned primary key not null auto_increment,name varchar(50) unique not null,age tinyint not null,sex enum(M, W) not null )engineINNODB default charsetutf8;# 查看创建表语句 show create table user两种插入方式比较 # 方式1 i…

加速千行百业转型,华为如何为智能世界构建感知底座

导读:感知正成为行业数字化的新引擎。 我们正在迈进一个万物感知的时代。 日常生活中,感知已经无处不在。小到智能家居的控制系统,大到智慧城市虚实联动的数字孪生,感知是一切智能化的前提,也是行业数字化转型的基础。…

如何恢复被隔离的u盘数据?2种恢复u盘隔离数据的方法

很多时候,我们可能会因为各种原因导致U盘数据丢失,比如误删、格式化等情况。但最近有一位朋友咨询小编关于U盘文件被隔离的问题,他在使用U盘时发现有些文件被隔离了,想知道如何恢复。其实,U盘文件被隔离可能是由于存在…