当前位置:首页 » 编程软件 » 编译ffmpeg库

编译ffmpeg库

发布时间: 2022-12-23 23:41:48

㈠ Ubuntu下使用mingw-w64交叉编译ffmpeg

网上大部分编译windows版ffmpeg的教程都是基于msys+mingw的,完全运行在windows上。由于msys2的性能实在是太糟糕了,编译速度太感人,因此决定研究linux下使用mingw-w64交叉编译

先是安装ubuntu版的mingw-w64
sudo apt install mingw-w64

然后在configure ffmpeg的时候,在正常的配置项之后加上。
--arch=x86 --target-os=mingw32 --cross-prefix=i686-w64-mingw32-

上面是32位库编译的配置,64位的如下
--arch=x86_64 --target-os=mingw32 --cross-prefix=x86_64-w64-mingw32-

而且最好使用动态库,静态库还需要链接一大堆mingw的库实现,而且还可能链接失败。但这样编译出来的动态库,还需要依赖 libgcc_s_sjlj-1.dll。如果要移除这个依赖,configure的时候还要加上 --extra-ldflags='-static-libgcc'

㈡ 如何编译wince平台能使用的ffmpeg库

如何编译wince平台能使用的ffmpeg库

  • 在configure ffmpeg工程时,如果不特别指定,默认fdshow设备是被支持的,但编译后却没有.可以查看configure的日志文件,会发现找不到一些依赖的头文件.

  • 所以最终编译出来的ffmpeg.exe, 用ffmpeg -formats来看,在indev一项中,一般只有vfwcap,而没有dsh

㈢ 手动编译FFmpeg静态库详细过程

编译FFmpeg用作二次开发音视频,得提前安装好Ubutu!!!

解压出来后进入ffmpeg解压目录,可以看到里面有各种文件、文档。需要关注的是configure文件。这个文件本身就是一个shell脚本,作用为生成makfile文件,然后使用make执行。

1、进入./android/armeabi-v7a2目录
2、打包编译好的文件

3、导出打包好的的tar包(导出保存在桌面)

4、解压之后

㈣ 如何编译ffmpeg for iphone

编译iPhone下的FFmpeg

mkdir ./build

# configure for armv7 build
./configure \
--cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \
--as='gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' \
--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk \
--extra-ldflags=-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/system \
--target-os=darwin \
--arch=arm \
--cpu=cortex-a8 \
--extra-cflags='-arch armv7' \
--extra-ldflags='-arch armv7' \
--enable-pic \
--enable-cross-compile \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-doc

# build for armv7
make clean
make

# out the armv7 libs
mkdir ./build/armv7
cp -f ./libavcodec/libavcodec.a ./build/armv7/libavcodec.a
cp -f ./libavdevice/libavdevice.a ./build/armv7/libavdevice.a
cp -f ./libavfilter/libavfilter.a ./build/armv7/libavfilter.a
cp -f ./libavformat/libavformat.a ./build/armv7/libavformat.a
cp -f ./libavutil/libavutil.a ./build/armv7/libavutil.a
cp -f ./libswscale/libswscale.a ./build/armv7/libswscale.a

# configure for armv6 build
./configure \
--cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \
--as='gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' \
--sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk \
--extra-ldflags=-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib/system \
--target-os=darwin \
--arch=arm \
--cpu=arm1176jzf-s \
--extra-cflags='-arch armv6' \
--extra-ldflags='-arch armv6' \
--enable-cross-compile \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-doc

# build for armv6
make clean
make

# out the armv6 libs
mkdir ./build/armv6
cp -f ./libavcodec/libavcodec.a ./build/armv6/libavcodec.a
cp -f ./libavdevice/libavdevice.a ./build/armv6/libavdevice.a
cp -f ./libavfilter/libavfilter.a ./build/armv6/libavfilter.a
cp -f ./libavformat/libavformat.a ./build/armv6/libavformat.a
cp -f ./libavutil/libavutil.a ./build/armv6/libavutil.a
cp -f ./libswscale/libswscale.a ./build/armv6/libswscale.a

# configure for i386 build
./configure \
--cc=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc \
--as='gas-preprocessor.pl /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc' \
--sysroot=/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk \
--extra-ldflags=-L/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.3.sdk/usr/lib/system \
--target-os=darwin \
--arch=i386 \
--cpu=i386 \
--extra-cflags='-arch i386' \
--extra-ldflags='-arch i386' \
--enable-cross-compile \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--disable-doc

# build for i386
make clean
make

# out the i386 libs
mkdir ./build/i386
cp -f ./libavcodec/libavcodec.a ./build/i386/libavcodec.a
cp -f ./libavdevice/libavdevice.a ./build/i386/libavdevice.a
cp -f ./libavfilter/libavfilter.a ./build/i386/libavfilter.a
cp -f ./libavformat/libavformat.a ./build/i386/libavformat.a
cp -f ./libavutil/libavutil.a ./build/i386/libavutil.a
cp -f ./libswscale/libswscale.a ./build/i386/libswscale.a

# make fat (universal) libs
lipo -output ./build/libavcodec.a -create \
-arch armv6 ./build/armv6/libavcodec.a \
-arch armv7 ./build/armv7/libavcodec.a \
-arch i386 ./build/i386/libavcodec.a

lipo -output ./build/libavdevice.a -create \
-arch armv6 ./build/armv6/libavdevice.a \
-arch armv7 ./build/armv7/libavdevice.a \
-arch i386 ./build/i386/libavdevice.a

lipo -output ./build/libavfilter.a -create \
-arch armv6 ./build/armv6/libavfilter.a \
-arch armv7 ./build/armv7/libavfilter.a \
-arch i386 ./build/i386/libavfilter.a

lipo -output ./build/libavformat.a -create \
-arch armv6 ./build/armv6/libavformat.a \
-arch armv7 ./build/armv7/libavformat.a \
-arch i386 ./build/i386/libavformat.a

lipo -output ./build/libavutil.a -create \
-arch armv6 ./build/armv6/libavutil.a \
-arch armv7 ./build/armv7/libavutil.a \
-arch i386 ./build/i386/libavutil.a

lipo -output ./build/libswscale.a -create \
-arch armv6 ./build/armv6/libswscale.a \
-arch armv7 ./build/armv7/libswscale.a \
-arch i386 ./build/i386/libswscale.a

上面针对i386,也就是模拟器的编译配置不一定,下面有另一种配置方式
./configure \
--disable-bzlib \
--disable-mmx \
--disable-doc \
--disable-ffmpeg \
--disable-ffplay \
--disable-ffserver \
--cc=/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/i686-apple-darwin10-gcc-4.2.1 \
--as='gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/i686-apple-darwin10-gcc-4.2.1' \
--sysroot=/Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk \
--extra-cflags='-fmessage-length=0 -pipe -Wno-trigraphs -fpascal-strings -O0 -fasm-blocks -Wreturn-type -Wunused-variable -D__IPHONE_OS_VERSION_MIN_REQUIRED=30000 -isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.0.sdk -fvisibility=hidden -mmacosx-version-min=10.5 -gdwarf-2'

另外一篇文章
移值FFMPEG到iPhone或Mac OS/X

有关FFMPEG的详细说明可以参考网上相关文档;在这里我们只讲述FFMPEG移到iPhone或Mac OS/X的过程及相关注意事项。

FFMPEG功能相当强大,在完整的FFMPEG包中就包含了ffserver, ffplay, ffmpeg, avcodec, avdevice, avformat, avutil, swscale等;其中ffserver, ffplay, ffmpeg为应该程序,对与我们这些从事软件开发的人来说基本上没什么用;而avcodec为加解码库、avformat为格式库,avutil则为基础库(但平常我们很少用到), swscale则为图象处理库;所以我们所要的就是移值avcodec, avformat, avutil, swscale这四个库。

移值到Mac OS/X下过程:

一、 配置

./configure --prefix=/Developer/usr --cc=/Developer/usr/bin/gcc-4.0 --enable-gpl --enable-shared --disable-ipv6 --enable-swscale --enable-zlib --enable-bzlib --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-vhook

二、 编译

make

三、 安装

make install

说明:上面的/Developer/usr为目标目录,如果你的Xcode为默认安装,则这样安装后既可以在Xcode中编译及调式你的代码了;

移值到Mac OS/X下的模拟iPhone平台下过程:

一、 配置

./configure --prefix=/Developer/usr --disable-debug --cc=/Developer/usr/bin/i686-apple-darwin9-gcc-4.0.1 --enable-gpl --enable-static --disable-shared --disable-ipv6 --enable-swscale --enable-zlib --enable-bzlib --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-vhook --enable-pthreads

其中:也可以加入--enable-shared,这个选项是允许其编译产生动态库,在以后的编程中要用到这个几个动态库。--prefix设置的安装目录。如果在configure的时候不加上--enable-shared的,则采用静态链接的方式,不会生成那三个动态库。同时生成的ffplay、ffmpeg的执行文件也比较的大,因为他们不需要动态库的支持,就可以执行。但是不利于再次开发,所以我也可以考虑采用动态链接的方式。

二、 编译

make

三、 安装

make install

安装之后在/usr/local/ffmpeg会看到有三个目录
lib 动态链接库位置
include 编程要用到头文件
bin 执行文件所在的目录

为了以后方便编程,我们把lib中的三个链接库libavcodec.so libavformat.so libavutil.so复制到/usr/lib下。把include目录下的ffmpeg目录复制到/usr/include下。执行bin目录下的ffplay,可以去播放音频或者视频文件。例如播放1.mp3
./ffplay 1.mp3
另外,bin目录下还有两个文件:ffmpeg和ffserver
ffmpeg是一个很好的视频和音频的格式转化工具。网上有很多它的说明文档。如果不想生成ffserver,只要在./configure的时候加--disable-ffserver即可。

说明:上面的/Developer/usr为目标目录,如果你的Xcode为默认安装,则这样安装后既可以在Xcode中编译及在模拟器下调式你的代码了;

移值到iPhone平台下过程:

一、 配置

./configure --enable-cross-compile --cross-prefix=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/ --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/arm-apple-darwin9-gcc-4.0.1 --prefix=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk/usr --extra-cflags="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk" --extra-ldflags="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk -Wl,-syslibroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.0.sdk" --arch=armv6 --enable-armv6 --enable-gpl --enable-shared --disable-ipv6 --enable-swscale --enable-zlib --enable-bzlib --disable-ffmpeg --disable-ffplay --disable-ffserver --disable-vhook

二、 编译

make

三、 安装

make install

说明:上面的/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/为目标目录,如果你的Xcode为默认安装,则这样安装后既可以在Xcode中编译及在模拟器下调式你的代码了。

相关说明:

在ffmpeg中如果使用静态库则会出现一些连接错;所以在安装ffmpeg库时请选中动态库。

OK,到现在我们就你已经知道了如何把ffmpeg移到到iPhone下并把ffmpeg库和Xcode结合起来了吧;当然如果你的Xcode工具非默认安装,请更上相关目录选项.

㈤ 如何将FFmpeg源码编译一个so库

我们从上篇文章 FFmpeg编译 知道,正常打出来的有5个so包,当然有它的好处是按需引入。但是如果都需要,那是不是觉得很多呢?那可不可以打出一个so呢?答案是当然可以,下面以armv7-a平台为例,脚本如下。

其实在上篇 FFmpeg编译 中脚本的基础上添加如下即可打出一个so包:

编译完成大概需要几分钟。

android/armv7-a下生成一个ffmpeg.so

libffmpeg.so及相应的同文件到工程里就好

㈥ android studio2.3 怎么编译ffmpeg

整体调用逻辑为:
1 编译完ffmpeg库
2 使用jni方式撰写c代码,其中需要包含相应的ffmpeg的头文件
3 撰写相应的Android.mk文件,里面指定需要编译的c代码以及需要链接的动态库
4 执行ndk-build生成相应的jni库
5 创建andorid java程序,代码中loadLibrary相应ffmpeg库以及刚才生成的jni库
6 静态方法声明native函数,这些函数在jni写的c语言中都已经实现过

㈦ 请教如何使用cygwin编译ffmpeg静态库

如何使用ndk为ffmpeg编译rtmp+polarssl静态库?这个问题花了我整整一天时间。其中遇到很多小问题,这里记录一下,方便自己也方便其他人。

1、编译polarssl,查看其Readme文件即可,不需要configure,只需要make时带上必要的参数即可,不过要记得在每一次执行make命令时都带上CC的参数(指向你的arm gcc),因为我试过在make install时没有带上CC的参数,虽然能编译出polarssl但是未能正确被rtmp引用到。

2、因为前面我用的polarssl是当前最新(1.3.7)版本,而librtmp使用的好像是polarssl1.0.0以下版本的api,所以需要修改rtmp部分源码,让其调用新版polarssl的api,这里的修改可以参照《Migrating from PolarSSL-1.2 to the PolarSSL 1.3 branch》和《[rtmpmp] branch master updated. a312ac7 Fix compat with PolarSSL >= 1.1.0》。

3、出现 undefined reference to `havege_random’错误,这里是因为polarssl默认关闭了havege模块,需要你手动开启,主要就是修改include/polarssl/config.h,去掉POLARSSL_HAVEGE_C前的注释,也就是要定义POLARSSL_HAVEGE_C,如下:
#define POLARSSL_HAVEGE_C

4、在编译出上面两个库之后,可以开始编译ffmpeg(2.1.1版本)了,如果遇到下面的问题 check_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
ERROR: librtmp not found
这里有三种解决方法:
第一种,因为是网络上传播最多的,算是比较简便的方法,就是修改ffmpeg的configure,将以下一行:
enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket
改为:
enabled librtmp && require librtmp librtmp/rtmp.h RTMP_Socket -lrtmp -lpolarssl -lz
或者直接注释掉&& *** 部分,然后再自己加上librtmp的库路径也行

第二种,(比较推荐,因为解决了这个会顺带解决大部分找不到库的错误!)因为这里使用了pkg-config工具查找库,而这个工具ndk并没有附带提供,而出现check_pkg_config相关错误的话,只要稍加注意,会发现在使用configure配置ffmpeg的交叉编译时,已经有相应的pkg-config不存在的警告了。我对这个工具不熟悉,所以我只是简单地加上了一个软链接到系统的pkg-config,如下:
ln -s /usr/bin/pkg-config /home/cidy0106/android-ndk-r9d/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64/bin/arm-linux-androideabi-pkg-config
这个时候重新configure的话可能会出现找不到polarssl库的错误提示,需要修改一下librtmp安装目录里的librtmp.pc,把以下内容:
Libs: -L${libdir} -lrtmp -lz
改为:
Libs: -L${libdir} -lrtmp -lz -lpolarssl

至此,就可以正确编译出ffmpeg了

㈧ Android FFmpeg so库编译 支持Https

编译armv7架构的openssl、ffmpeg的a、so库,目前openssl只编译了静态库,编译动态库,ffmpeg链接openssl编译的时候会出现链接的是带版本号的openssl动态库(如:libcrypto.so.1.1),这样在Android ndk开发下不能找到.so.1.1的库,而so.1.1格式对于Android开发不合法,所以只编译opessl静态库(不会生成.so.1.1的文件)进行解决了,如果有大神有解决方案,可以分享哈。

改后:

改后:

㈨ FFmpeg 编译参数简单整理

以下参数使用--enable-foo启用或使用--disable-foo禁用时使用--e/d-代替。

其他的可更改优化方案:AltiVec、3DNow! 、MMX、MMX2、SSE、SSE3、armv5te、armv6、armv6t2、ARM VFP、iwmmxt、MMI、neon、VIS

使用--enable-foo启用或使用--disable-foo禁用需要的功能插件,使用--e/d-代替。某些部件(如decoder)enable时需要明确指明,例:--enable-decoder=libdavs2。

注:打开与启用非等同

其他默认开启但可以关闭的部分:ffmpeg、ffprobe、ffplay、ffserver、avdevice、avcodec、avcore、avformat、swscale、特定部件(如某个编解码器等)

可选择禁用的编码:AAN DCT、DCT、Golomb、FFT、Golomb、LPC、MDCT、RDFT、VAAPI、VDPAU、DXVA2

㈩ windows下编译ffmpeg源码及常见问题

由于公司项目中会用到ffmpeg,而且会用到h265转码h264的功能,想要学习ffmpeg,先从编译开始吧。我编译的过程主要是从以下博客中学习的,此文主要是记录中间遇到的问题及解决方法。

https://blog.csdn.net/fan1102958151/article/details/115590291

CC=cl ./configure --enable-shared

https://downloads.sourceforge.net/opencore-amr/fdk-aac-2.0.1.tar.gz

这个可能是因为 pdk-config 的 PKG-CONFIG-PATH 配置问题,我是在etc/profile文件里找到PKG-CONFIG-PATH的配置路径(我的是/usr/lib/pkgconfig),然后将pkgconfig里面的三个 .pc文件复制到/usr/lib/pkgconfig文件夹里即可

因为博客中只提到将编译好的x265文件夹中的lib目录复制过去,其实include文件夹也要复制过去,我把bin、include和lib都复制到usr/local对应的目录中

不要将msys64装在带空格的文件夹中,否则编译失败,也不要将原先装好的文件夹整个复制到另一个没有空格的文件夹中,这样编译也会报错。

热点内容
键盘按f9键不可以编译怎么调 发布:2025-07-18 00:11:34 浏览:312
安卓手机的广告如何删除 发布:2025-07-18 00:10:50 浏览:105
linux安装composer 发布:2025-07-18 00:04:52 浏览:241
地址存储器的容量 发布:2025-07-17 23:42:56 浏览:167
win7电脑用户名和密码在哪里查询 发布:2025-07-17 23:39:44 浏览:476
安卓手机颜色怎么变色 发布:2025-07-17 23:26:43 浏览:375
java离线安装 发布:2025-07-17 23:23:31 浏览:377
位置服务器地址是什么 发布:2025-07-17 23:18:00 浏览:841
phpif一行 发布:2025-07-17 23:12:27 浏览:730
安装脚本精灵 发布:2025-07-17 23:11:35 浏览:127