当前位置:首页 » 安卓系统 » ffmpegandroid编译

ffmpegandroid编译

发布时间: 2022-07-21 17:06:55

㈠ 如何运行从Android的命令行的ffmpeg

在前面编译FFmpeg类库编译ffmpeg时,编译脚本中使用了参数 –disable-ffmpeg,所以是不会生成ffmpeg工具的,即使生成了,
在Android应用下也无法直接使用。
但是,FFmpeg 命令行是十分强大易用的,我们可以用命令行完成大部分的需求,So,Let’s Do it.
http://blog.csdn.net/chengkaizone/article/details/52984091

㈡ 如何用Android NDK编译FFmpeg

Android NDK编译FFmpeg

配置编译环境

在 VirtualBox 中创建一个 Ubuntu 虚拟机

在 Ubuntu 虚拟机中使用 sudo passwd root 命令启动 root 账户

用 root 账户登录进入 Ubuntu

将 android-ndk-r4b-linux-x86.zip 中的内容解压缩到 /root 目录下

将 android-sdk_r07-linux_x86.tgz 中的内容解压缩到 /root 目录下

将 ffmpeg-0.6.1.tar.bz2 中的内容解压缩到 /root/ffmpeg/jni 目录下

三、准备编译 FFmpeg

编写 mk 文件

在 /root/ffmpeg/jni 目录中创建一个 Android.mk 文件,内容如下

?1include $(all-subdir-makefiles)

在 /root/ffmpeg/jni/ffmpeg-0.6.1 目录中创建一个 Android.mk 文件,内容如下

6LOCAL_PATH := $(call my-dir)

include $(CLEAR_VARS)

LOCAL_WHOLE_STATIC_LIBRARIES := libavformat libavcodec libavutil
libpostproc libswscale

LOCAL_MODULE := ffmpeg

include $(BUILD_SHARED_LIBRARY)

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

在 /root/ffmpeg/jni/ffmpeg-0.6.1 目录中创建一个 av.mk 文件,内容如下

# 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))

在 /root/ffmpeg/jni/ffmpeg-0.6.1/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)

在 /root/ffmpeg/jni/ffmpeg-0.6.1/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)

在 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)

修改 libm.h 文件和 Makefile 文件

编辑 /root/ffmpeg/jni/ffmpeg-0.6.1/libavutil 目录中的 libm.h 文件,删除以下 static
方法

#if !HAVE_LRINT

static av_always_inline av_const long int lrint(double x)

{

return rint(x);

}

#endif /* HAVE_LRINT */

#if !HAVE_LRINTF

static av_always_inline av_const long int lrintf(float x)

{

return (int)(rint(x));

}

#endif /* HAVE_LRINTF */

#if !HAVE_ROUND

static av_always_inline av_const double round(double x)

{

return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);

}

#endif /* HAVE_ROUND */

#if !HAVE_ROUNDF

static av_always_inline av_const float roundf(float x)

{

return (x > 0) ? floor(x + 0.5) : ceil(x - 0.5);

}

#endif /* HAVE_ROUNDF */

#if !HAVE_TRUNCF

static av_always_inline av_const float truncf(float x)

{

return (x > 0) ? floor(x) : ceil(x);

}

#endif /* HAVE_TRUNCF */

编辑 libavcodec、libavfilter、libavformat、libavutil、libpostproc 和 libswscale
目录中的 Makefile 文件,删除

?1include $(SUBDIR)../subdir.mak



?1include $(SUBDIR)../config.mak

生成 config.h 文件

在 /root/ffmpeg/jni/ffmpeg-0.6.1 目录中创建一个 config.sh 文件,使用 Android NDK r4b
编译时内容如下

#!/bin/bash

PREBUILT=/root/android-ndk-r4b/build/prebuilt/linux-x86/arm-eabi-4.4.0

PLATFORM=/root/android-ndk-r4b/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"

使用 Android NDK r5 编译时内容如下

#!/bin/bash

PREBUILT=/root/android-ndk-r5/toolchains/arm-eabi-4.4.0/prebuilt/linux-x86

PLATFORM=/root/android-ndk-r5/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"

打开终端,进入 /root/ffmpeg/jni/ffmpeg-0.6.1 目录,运行下面的命令

㈢ 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语言中都已经实现过

㈣ 哪位高手做过ffmpeg在android下的运用.小弟我只想调用解码h264的帧

楼主你好!根据你的描述,让我来给你回答!
用NDK把ffmpeg 编译成动态库SO 文件
再android工程利用JNI生成接口调用这个静态库。

希望能帮到你,如果满意,请记得采纳哦~~~

㈤ 如何把ffmpeg移植到android

1
首先把系统环境配置好,一般情况系统默认都会安装gcc和make编译工具。若提示未安装编译工具,请使用sudo apt-get install build-essential安装即可。
2
修改编译后库的版本号,在ffmpeg目录下找到configure文件,将下图所示的4行代码修改为
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'

3
将以下代码保存到build.sh中

#!/bin/bashNDK=/home/robot/tools/android-ndk-r8eSYSROOT=$NDK/platforms/android-14/arch-arm/TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.7/prebuilt/linux-x86_64
function build_ffmpeg{./configure \ --prefix=$PREFIX \ --enable-shared \ --disable-static \ --disable-doc \ --disable-ffserver \ --enable-cross-compile \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --target-os=linux \ --arch=arm \ --sysroot=$SYSROOT \ --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG}PREFIX=$(pwd)/androidADDI_CFLAGS="-marm"build_ffmpeg
4
使用命令修改build文件的属性
chmod a+x build.sh
5
接下来就是执行build.sh文件,"."表示当前目录
./build.sh
执行成功后,会生成config.h配置文件
6
开始编译,
make
make install
执行成功会在Android目录下生成一系列目录,bin、include、lib、share,生成的库就在lib目录下

㈥ ffmpeg交叉编译android,rtsp协议sdp流播放问题

pthread support is required

这个问题是交叉编译的时候你没开启pthread
也就是编译时加上
--enable-pthread

第二个问题不是问题是个警告或者提示
字面意思就是:从bitrate估算,可能不准确

㈦ ffmpeg 命令行 在android执行

对于ffmpeg我是彻底小白,昨天刚开始接触,就是按着网上的教程安装了MingGW和msys神马的一大堆,然后貌似编译出了可以用的ffmpeg。
现在的情况是:打开msys的DOS命令窗口,照着网上写的输入了几个简单的命令,能实现转换格式、截取某时刻的缩略图。这样说明ffmpeg是编译成功了吧?
【但是】我看网上关于ffmpeg的demo程序,都是很长很长的程序,应该是 .c 文档之类的,并不是在DOS命令窗口敲的命令。是应该用VS2010之类的,编辑这些长的程序然后运行么?如果是的话,具体怎么操作的呢?
还是说,这些程序只能在linux环境下运行?

今天费了好大的劲儿才把ffmpeg编译出来,但是由于对编程开发工具不熟悉(只会简单的码代码,编译运行..),引入头文件函数库神马的也都不太懂,实在是不知道怎么用。
身边很少有了解ffmpeg的,网上的信息也很零碎,自己入门实在是太困难了。。 但这是跟老师做的项目,不能不学。所以求各位大神多多指导,多谢了!
泪目~~T_T~~

㈧ Ubuntu 环境 编译 ffmpeg移植android 的问题!

到FFmpeg官方网站http://www.ffmpeg.org/上去下载源代码,这里下载的源代码是最权威的。进入官网之后,选择”Download”进入下载页面,截止2014年3月28日止,最新的发布的稳定版本为FFmpeg2.2,代号”Muybridge”。选择该下方的”Downloadgzip tarball”进行下载,下载后的文件名为ffmpeg-2.2.tar.gz,大约8.3M。
第二步:在Linux环境下编译FFmpeg
在Windows平台可以采用VMplayer虚拟机上安装ubuntu的方式,本人也是采用这种方式。
本文以/home/dennis为根目录进行操作和说明:
将ffmpeg-2.2.tar.gz拷贝至根目录,然后执行如下解压命令将其解压:
$tar zxf ffmpeg-2.2.tar.gz
解压后将得到/home/dennis/ffmpeg-2.2目录。

㈨ ffmpeg 安卓移植的时候 编译和使用的工具链要一致吗

在经历了多次下载、实验、查看代码之后,终于在Android上移植上了 ,并且写了自己的jni wrapper,以下是对我帮助很大的几个帖子,列举出来,希望能够对大家有所帮助:转载

热点内容
mysql怎么用数据库 发布:2025-01-23 07:21:02 浏览:997
怎么访问暗网 发布:2025-01-23 07:02:04 浏览:665
无线配置代理选什么 发布:2025-01-23 06:52:54 浏览:824
c程序汇编程序 发布:2025-01-23 06:49:42 浏览:840
cmd命令与linux命令 发布:2025-01-23 06:40:26 浏览:806
linux用户目录权限 发布:2025-01-23 06:37:49 浏览:233
学计算机避免编程 发布:2025-01-23 06:29:09 浏览:661
易语言机器人源码 发布:2025-01-23 06:24:03 浏览:320
汇编语言的编译可以叫解释吗 发布:2025-01-23 06:23:22 浏览:35
tomcat编译后的文件 发布:2025-01-23 06:05:46 浏览:254