体育资讯网

您现在的位置是:首页 > 分类11 > 正文

分类11

ffmpeg源码编译安装(ffmpeg安装包)

hacker2022-07-03 00:52:22分类1154
本文目录一览:1、如何在windows中编译ffmpeg2.6.1以及NVENC硬编码的尝试

本文目录一览:

如何在windows中编译ffmpeg 2.6.1以及 NVENC硬编码的尝试

FFmpeg在Windows系统下的编译过程,分四步ffmpeg源码编译安装:如下ffmpeg源码编译安装

1. 配置编译环境

2. 下载FFMPEG的代码

3. 编译,获取FFMPEG库(头文件,lib,和DLL)

4. 在VC下配置,测试

1. 配置编译环境

1)安装MSys

下载文件:

bash-3.1-MSYS-1.0.11-snapshot.tar.bz2

msysCORE-1.0.11-20080826.tar.gz

解压msysCORE-1.0.11-20080826.tar.gz,比如解压到X:\msys(以下内容都使用该路径描述,X为你安装的盘符)。

解压bash-3.1-MSYS-1.0.11-snapshot.tar.bz2,产生一个名为bash-3.1的目录,在该目录下有一个子目录名为bin,其他的目录不需要关心。复制bin目录中的所有文件到D:\msys\bin,提示是否要覆盖sh.exe的时候,选择是。

到“D:\msys\postinstall”目录下执行pi.bat,在出现的提示中输入n回车后(这个不搞错了),按任意键退出即可。

2)安装MinGW

如何用Android NDK编译FFmpeg

一、安装cygwin、配置ndk和下载ffmpeg源码

这步就不说了,网上很多教程,再次声明本教程只针对ndk R4这个版本。需要说明的是,本人在cygwin安装路径下的.bash_profile文件中指定的NDK路径如下所示。因为本人装了好几个NDK,因此后面的R4只是个标示。

NDK_R4=/cygdrive/d/android-ndk-r4

export NDK_R4

二、编译前准备和编译

1、因为R4这个NDK比较旧,交叉编译的时候需要在一个Android环境中,那简单,创建一个Android空项目,把整个项目拷出来,在项目下建立一个文件夹jni,把ffmpeg0.6.6的源码拷进去。左图,HelloJni就是我新建的一个项目,Android.mk这时候你还没有,先不用管。右图ffmpeg-0.6.6文件夹的内容要跟我一样,直接就是代码。我这里的ffmpeg_cywin这个文件夹是随便建的,放哪里无所谓的。

2、在ffmpeg-0.6.6下建立一个文件config.sh,内容如下所示。需要注意的是,unix下的换行符和windows下是不一样,如果直接拷贝到windows下的记事本,后面执行这个config.sh的时候会出问题,这里我用的是notepad++编辑的,在编辑-档案格式转换-转换为UNIX格式。(注意,后面的所有的Android.mk的编辑都有此要求)。

简单说一下这个config.sh,PREBUILT和PLATFORM根据你安装ndk的位置而不同,config.sh其实是一个脚本,执行这个脚本的时候又调用了另外一个脚本configure,configure主要是根据编译选项(下面enable disable那些),生成相应的编译配置,就是说你想要编译ffmpeg什么模块就自己定制编译选项的内容。基本上这个文件只要修改一下PREBUILT和PLATFORM就行,其他都不用改。

#!/bin/bash

export PREBUILT=D://android-ndk-r4/build/prebuilt/windows/arm-eabi-4.4.0

export PLATFORM=D://android-ndk-r4/build/platforms/android-8/arch-arm

./configure --target-os=linux \

--arch=arm \

--enable-version3 \

--enable-gpl \

--enable-nonfree \

--disable-stripping \

--disable-ffmpeg \

--disable-ffplay \

--disable-ffserver \

--disable-ffprobe \

--disable-encoders \

--disable-muxers \

--disable-devices \

--disable-protocols \

--enable-protocol=file \

--enable-avfilter \

--disable-network \

--disable-mpegaudio-hp \

--disable-avdevice \

--enable-cross-compile \

--cc=$PREBUILT/bin/arm-eabi-gcc \

--cross-prefix=$PREBUILT/bin/arm-eabi- \

--nm=$PREBUILT/bin/arm-eabi-nm \

--extra-cflags="-fPIC -DANDROID" \

--disable-asm \

--enable-neon \

--enable-armv5te \

--extra-ldflags="-Wl,-T,$PREBUILT/arm-eabi/lib/ldscripts/armelf.x -Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtbegin.o $PREBUILT/lib/gcc/arm-eabi/4.4.0/crtend.o -lc -lm -ldl"

3、修改configure文件,找到下图的内容,修改成我这样,这个是用来存放执行脚本过程的临时文件的,我这里用的是D://NDK,你可以设置其他地方,但是要先创建好这个文件夹,放哪里无所谓的。

4、然后在cywin中进入ffmpeg0.6.6文件夹,执行chmod -x config.sh,然后执行./config,此过程需要一定的时间。如果这一步出现问题,很有可能是你config.sh中的PREBUILT和PLATFORM的路径设置不对,或者是你拷贝内容到config.sh的时候没有在UNIX格式下。执行完如下图所示。

5、在ffmpeg-0.6.6下会生成一个config.h文件,编辑它,找到#define restrict restrict这一行,把它改成#define restrict

6、在libavutil/libm.h下,把所有static的方法注释掉或者直接删掉。

7、修改libavcodec,libavfilter,libavformat,libavutil,libpostproc和libswscale目录的MakeFile文件,每个文件中,删除语句

include $( SUBDIR ) ../config.mak 和 include $ (SUBDIR) .. / subdir.mak。

libavcodec下的makefile中搜索inverse.o,把它所在的那一行删掉,要不编译的时候会冲突。

8、在ffmpeg-0.6.6文件夹下,创建av.mk文件(UNIX格式),内容如下:

#LOCAL_PATH is one of libavutil, libavcodec, libavformat, or libswscale

#include $(LOCAL_PATH)/../config-$(TARGET_ARCH).mak

include $(LOCAL_PATH)/../config.mak

OBJS :=

OBJS-yes :=

MMX-OBJS-yes :=

include $(LOCAL_PATH)/Makefile

# collect objects

OBJS-$(HAVE_MMX) += $(MMX-OBJS-yes)

OBJS += $(OBJS-yes)

FFNAME := lib$(NAME)

FFLIBS := $(foreach,NAME,$(FFLIBS),lib$(NAME))

FFCFLAGS = -DHAVE_AV_CONFIG_H -Wno-sign-compare -Wno-switch -Wno-pointer-sign

FFCFLAGS += -DTARGET_CONFIG=\"config-$(TARGET_ARCH).h\"

ALL_S_FILES := $(wildcard $(LOCAL_PATH)/$(TARGET_ARCH)/*.S)

ALL_S_FILES := $(addprefix $(TARGET_ARCH)/, $(notdir $(ALL_S_FILES)))

ifneq ($(ALL_S_FILES),)

ALL_S_OBJS := $(patsubst %.S,%.o,$(ALL_S_FILES))

C_OBJS := $(filter-out $(ALL_S_OBJS),$(OBJS))

S_OBJS := $(filter $(ALL_S_OBJS),$(OBJS))

else

C_OBJS := $(OBJS)

S_OBJS :=

endif

C_FILES := $(patsubst %.o,%.c,$(C_OBJS))

S_FILES := $(patsubst %.o,%.S,$(S_OBJS))

FFFILES := $(sort $(S_FILES)) $(sort $(C_FILES))

9、在jni文件夹下,创建Android.mk(UNIX格式),内容如下:

include $(all-subdir-makefiles)

10、在ffmpeg-0.6.6文件夹下,创建Android.mk,内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_STATIC_LIBRARIES := libavformat libavcodec libavutil libpostproc libswscale

LOCAL_MODULE := ffmpeg

include $(BUILD_SHARED_LIBRARY)

include $(call all-makefiles-under,$(LOCAL_PATH))

11、在ffmpeg-0.6.6\libavformat下,创建Android.mk,内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

include $(LOCAL_PATH)/../av.mk

LOCAL_SRC_FILES := $(FFFILES)

LOCAL_C_INCLUDES := \

$(LOCAL_PATH) \

$(LOCAL_PATH)/..

LOCAL_CFLAGS += $(FFCFLAGS)

LOCAL_CFLAGS += -include "string.h" -Dipv6mr_interface=ipv6mr_ifindex

LOCAL_LDLIBS := -lz

LOCAL_STATIC_LIBRARIES := $(FFLIBS)

LOCAL_MODULE := $(FFNAME)

include $(BUILD_STATIC_LIBRARY)

12、在ffmpeg-0.6.6\libavcodec下,创建Android.mk,内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

include $(LOCAL_PATH)/../av.mk

LOCAL_SRC_FILES := $(FFFILES)

LOCAL_C_INCLUDES := \

$(LOCAL_PATH) \

$(LOCAL_PATH)/..

LOCAL_CFLAGS += $(FFCFLAGS)

LOCAL_LDLIBS := -lz

LOCAL_STATIC_LIBRARIES := $(FFLIBS)

LOCAL_MODULE := $(FFNAME)

include $(BUILD_STATIC_LIBRARY)

13、在ffmpeg-0.6.6\libavfilter、libavutil、libpostproc和libswscale下,创建Android.mk,内容如下:

LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

include $(LOCAL_PATH)/../av.mk

LOCAL_SRC_FILES := $(FFFILES)

LOCAL_C_INCLUDES := \

$(LOCAL_PATH) \

$(LOCAL_PATH)/..

LOCAL_CFLAGS += $(FFCFLAGS)

LOCAL_STATIC_LIBRARIES := $(FFLIBS)

LOCAL_MODULE := $(FFNAME)

include $(BUILD_STATIC_LIBRARY)

14、然后在jni目录下,运行$NDK_R4/ndk-build -B,这里的命令需要根据你自己的情况修改,然后就开始编译了。过程需要10来分钟,成功之后,会在libs下生产libffmpeg.so。如果编译出来的libffmpeg.so只有1.5k,得如下修改一下NDK,再重新编译。

把下面红色部分加到NDK的build/core/build-binary.mk里:

LOCAL_STATIC_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_STATIC_LIBRARIES))

LOCAL_STATIC_WHOLE_LIBRARIES := $(call strip-lib-prefix,$(LOCAL_STATIC_WHOLE_LIBRARIES))

...

static_libraries := $(call map,static-library-path,$(LOCAL_STATIC_LIBRARIES))

static_whole_libraries := $(call map,static-library-path,$(LOCAL_STATIC_WHOLE_LIBRARIES))

...

$(call module-add-static-depends,$(LOCAL_MODULE),$(LOCAL_STATIC_LIBRARIES))

$(call module-add-static-depends,$(LOCAL_MODULE),$(LOCAL_STATIC_WHOLE_LIBRARIES))

...

$(LOCAL_BUILT_MODULE): $(static_libraries) $(static_whole_libraries) $(shared_libraries)

...

$(LOCAL_BUILT_MODULE): PRIVATE_STATIC_LIBRARIES := $(static_libraries)

$(LOCAL_BUILT_MODULE): PRIVATE_WHOLE_STATIC_LIBRARIES := $(static_whole_libraries)

接着再将最外层ffmpeg/Android.mk里面的LOCAL_STATIC_LIBRARIES改成LOCAL_STATIC_WHOLE_LIBRARIES

ffmpeg在win8下面要怎么编译,需要安装什么

FFmpeg在Windows系统下的编译过程ffmpeg源码编译安装,分四步ffmpeg源码编译安装:如下ffmpeg源码编译安装

1. 配置编译环境

2. 下载FFMPEG的代码

3. 编译,获取FFMPEG库(头文件,lib,和DLL)

4. 在VC下配置,测试

1. 配置编译环境

1)安装MSys

下载文件:

bash-3.1-MSYS-1.0.11-snapshot.tar.bz2

msysCORE-1.0.11-20080826.tar.gz

解压msysCORE-1.0.11-20080826.tar.gz,比如解压到X:\msys(以下内容都使用该路径描述,X为你安装的盘符)。

解压bash-3.1-MSYS-1.0.11-snapshot.tar.bz2,产生一个名为bash-3.1的目录,在该目录下有一个子目录名为bin,其他的目录不需要关心。复制bin目录中的所有文件到D:\msys\bin,提示是否要覆盖sh.exe的时候,选择是。

到“D:\msys\postinstall”目录下执行pi.bat,在出现的提示中输入n回车后(这个不搞错了),按任意键退出即可。

2)安装MinGW

下载文件:

binutils-2.20-1-mingw32-bin.tar.gz

(binutils-2.19.1-mingw32-bin.tar.gz)

gcc-core-3.4.5-20060117-3.tar.gz

gcc-g++-3.4.5-20060117-3.tar.gz

w32api-3.13-mingw32-dev.tar.gz

  mingwrt-3.16-mingw32-dev.tar.gz

(mingwrt-3.15.2-mingw32-dev.tar.gz)

mingwrt-3.16-mingw32-dll.tar.gz

(mingwrt-3.15.2-mingw32-dll.tar.gz)

把它们全部解压到X:\msys\mingw。

3)修改“msys.bat”

用文本编辑器打开D:\msys\msys.bat,由于打算用MSVC++编译程序,所以需要有.lib文件才能链接到FFmpeg的库,这些.lib文件可以使用微软的工具链中lib命令产生。为此,机器上必须已经安装了微软的Visual Studio或是Visual C++。把下面一行加到msys.bat的最前面,把路径替换成机器上vcvars32.bat实际存在的路径,比如我的在“D:\program files\Microsoft Visual Studio 8\VC\bin”,于是就添加:

call "D:\program files\Microsoft Visual Studio 8\VC\bin"

怎么编译ffmpeg release版本

FFmpeg在Windows系统下的编译过程ffmpeg源码编译安装,分四步:如下:1.配置编译环境2.下载FFMPEG的代码3.编译ffmpeg源码编译安装,获取FFMPEG库(头文件,lib,和DLL)4.在VC下配置,测试1.配置编译环境1)安装MSys下载文件:bash-3.1-MSYS-1.0.11-snapshot.tar.bz2m

如何安装linux系统下的ffmpeg

linux下安装ffmpeg1、下载ffmpeg。2、解压tar xvfj ffmpeg-0.11.1.tar.bz2得到解压后的目录是ffmpeg-0.11.13、配置 ./configure --enable-shared --prefix=/usr/local/ffmpeg其中:--enable-shared 是允许其编译产生动态库,在以后的编程中要用到这个几个动态库。--prefix设置的安装目录。4、编译并安装makemake install5、安装之后在/usr/local/ffmpeg会看到有四个目录lib 动态链接库位置include 编程要用到头文件bin 执行文件所在的目录 share6、为了以后方便编程,我们把lib中的三个链接库libavcodec.so libavformat.so libavutil.so复制到/usr/lib下。把include目录下的ffmpeg目录复制到/usr/include下。执行bin目录下的ffplay,可以去播放音频或者视频文件。例如播放1.mp3./ffplay 1.mp3 另外,bin目录下还有两个文件:ffmpeg和ffserverffmpeg是一个很好的视频和音频的格式转化工具。网上有很多它的说明文档。如果不想生成ffserver,只要在./configure的时候加--disable-ffserver即可。7、编程如果写了一个test.c文件,要包含ffmpeg的头文件,可以这样写:#include 编译:gcc -o test test.c -lavformat -lavcodec -lavtuil (前提是有第6步的操作)如果没有第6部的操作,则编译的时候如下: gcc -o test test.c -I/usr/local/ffmpeg/include -L/usr/local/ffmpeg/lib -lavformat -lavcodec -lavtuil编译成功之后,执行的时候还是需要动态库的支持,还是要把那三个动态库文件复制到/usr/lib或者/lib中,不然执行的时候会说找不到动态库链接。还有一个方法可以解决这个问题,就是把/usr/local/ffmpeg/lib这个目录加入到/etc/ld.so.config中,然后执行ldconfig,或者重启电脑,这样执行的时候系统就可以从/usr/local/ffmpeg/lib这个目录下去找这三个动态库文件了。以上的方式是采用动态库编译ffmpeg的,如果在configure的时候不加上--enable-shared的,则采用静态链接的方式,不会生成那三个动态库。同时生成的ffplay、ffmpeg的执行文件也比较的大,因为他们不需要动态库的支持,就可以执行。但是不利于再次开发,所以我采用动态链接的方式。configure中还有很多的选项,可以通过./configure --help查看,也可以直接查看configure文件。这在配置的时候很重要。

发表评论

评论列表

  • 俗野路岷(2022-07-03 06:00:14)回复取消回复

    ch-arm./configure --target-os=linux \--arch=arm \--enable-version3 \--enable-gpl \--enable-nonfree \