FFmpeg 编译for Android

编译环境:

debian x64

ndk-r14b

1. 安装ndk-r14b

下载地址 http://mirrors.neusoft.edu.cn/android/repository/android-ndk-r14b-linux-x86_64.zip

安装:

cd /opt/workspace && unzip  android-ndk-r14b-linux-x86_64.zip

2. ndk编译环境设置脚本: setup_build_env.sh

1 export NDK=/opt/workspace/android-ndk-r14b
2 export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt
3 export PLATFORM=$NDK/platforms/android-9/arch-arm
4 export PREFIX=$(pwd)/android-lib

2.1 编译libx264

git clone git://git.videolan.org/x264.git
. ./setup_build_env.sh
cd x264

./configure --prefix=$PREFIX --enable-static --enable-shared --enable-pic --disable-asm --disable-cli --host=arm-linux --cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- --sysroot=$PLATFORM
make
make install
cd ..

2.2 编译libfdk-aac

git clone https://github.com/mstorsjo/fdk-aac.git
. ./setup_build_env
cd fdk-aac
./autogen.sh
CFLAGS="-fpic -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -D__ARM_ARCH_7__ -Wno-psabi -march=armv7 -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID -Wa,--noexecstack -MMD -MP "
CROSS_COMPILE=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-
export CPPFLAGS="$CFLAGS"
export CFLAGS="$CFLAGS"
export CXXFLAGS="$CFLAGS"
export CXX="${CROSS_COMPILE}g++ --sysroot=${PLATFORM}"
export LDFLAGS="$LDFLAGS"
export CC="${CROSS_COMPILE}gcc --sysroot=${PLATFORM}"
export NM="${CROSS_COMPILE}nm"
export STRIP="${CROSS_COMPILE}strip"
export thout-mp4v2 RANLIB="${CROSS_COMPILE}ranlib"
export AR="${CROSS_COMPILE}ar"
./configure  --prefix=$PREFIX --without-mp4v2 --host=arm-linux --enable-static --enable-shared
make
make install
cd ..

2.3 编译FFmpeg

. setup_build_env.sh
export PREFIX=../ffmpeg-lib
make clean

configure_normal() {
./configure --target-os=linux --prefix=$PREFIX --enable-cross-compile --enable-runtime-cpudetect --disable-asm --arch=arm --cc=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc --cross-prefix=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi- --disable-stripping --nm=$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-nm --sysroot=$PLATFORM --enable-gpl --enable-nonfree --enable-shared --enable-static --enable-small --enable-libx264 --enable-libfdk-aac --extra-cflags="-I ./deps/android-lib/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -marm -march=armv7-a" --extra-ldflags="-L ./deps/android-lib/lib"
}

configure_normal

make
make install

编译成功后安装目录如下:

ffmpeg-lib/
├── bin
│   ├── ffmpeg
│   ├── ffprobe
│   └── ffserver
├── include
│   ├── libavcodec
│   │   ├── avcodec.h
│   │   ├── avdct.h
│   │   ├── avfft.h
│   │   ├── d3d11va.h
│   │   ├── dirac.h
│   │   ├── dv_profile.h
│   │   ├── dxva2.h
│   │   ├── jni.h
│   │   ├── mediacodec.h
│   │   ├── qsv.h
│   │   ├── vaapi.h
│   │   ├── vda.h
│   │   ├── vdpau.h
│   │   ├── version.h
│   │   ├── videotoolbox.h
│   │   ├── vorbis_parser.h
│   │   └── xvmc.h
│   ├── libavdevice
│   │   ├── avdevice.h
│   │   └── version.h
│   ├── libavfilter
│   │   ├── avfiltergraph.h
│   │   ├── avfilter.h
│   │   ├── buffersink.h
│   │   ├── buffersrc.h
│   │   └── version.h
│   ├── libavformat
│   │   ├── avformat.h
│   │   ├── avio.h
│   │   └── version.h
│   ├── libavutil
│   │   ├── adler32.h
│   │   ├── aes_ctr.h
│   │   ├── aes.h
│   │   ├── attributes.h
│   │   ├── audio_fifo.h
│   │   ├── avassert.h
│   │   ├── avconfig.h
│   │   ├── avstring.h
│   │   ├── avutil.h
│   │   ├── base64.h
│   │   ├── blowfish.h
│   │   ├── bprint.h
│   │   ├── bswap.h
│   │   ├── buffer.h
│   │   ├── camellia.h
│   │   ├── cast5.h
│   │   ├── channel_layout.h
│   │   ├── common.h
│   │   ├── cpu.h
│   │   ├── crc.h
│   │   ├── des.h
│   │   ├── dict.h
│   │   ├── display.h
│   │   ├── downmix_info.h
│   │   ├── error.h
│   │   ├── eval.h
│   │   ├── ffversion.h
│   │   ├── fifo.h
│   │   ├── file.h
│   │   ├── frame.h
│   │   ├── hash.h
│   │   ├── hmac.h
│   │   ├── hwcontext_cuda.h
│   │   ├── hwcontext_dxva2.h
│   │   ├── hwcontext.h
│   │   ├── hwcontext_qsv.h
│   │   ├── hwcontext_vaapi.h
│   │   ├── hwcontext_vdpau.h
│   │   ├── imgutils.h
│   │   ├── intfloat.h
│   │   ├── intreadwrite.h
│   │   ├── lfg.h
│   │   ├── log.h
│   │   ├── lzo.h
│   │   ├── macros.h
│   │   ├── mastering_display_metadata.h
│   │   ├── mathematics.h
│   │   ├── md5.h
│   │   ├── mem.h
│   │   ├── motion_vector.h
│   │   ├── murmur3.h
│   │   ├── opt.h
│   │   ├── parseutils.h
│   │   ├── pixdesc.h
│   │   ├── pixelutils.h
│   │   ├── pixfmt.h
│   │   ├── random_seed.h
│   │   ├── rational.h
│   │   ├── rc4.h
│   │   ├── replaygain.h
│   │   ├── ripemd.h
│   │   ├── samplefmt.h
│   │   ├── sha512.h
│   │   ├── sha.h
│   │   ├── spherical.h
│   │   ├── stereo3d.h
│   │   ├── tea.h
│   │   ├── threadmessage.h
│   │   ├── timecode.h
│   │   ├── time.h
│   │   ├── timestamp.h
│   │   ├── tree.h
│   │   ├── twofish.h
│   │   ├── version.h
│   │   └── xtea.h
│   ├── libpostproc
│   │   ├── postprocess.h
│   │   └── version.h
│   ├── libswresample
│   │   ├── swresample.h
│   │   └── version.h
│   └── libswscale
│       ├── swscale.h
│       └── version.h
├── lib
│   ├── libavcodec.a
│   ├── libavcodec.so -> libavcodec.so.57.89.100
│   ├── libavcodec.so.57 -> libavcodec.so.57.89.100
│   ├── libavcodec.so.57.89.100
│   ├── libavdevice.a
│   ├── libavdevice.so -> libavdevice.so.57.6.100
│   ├── libavdevice.so.57 -> libavdevice.so.57.6.100
│   ├── libavdevice.so.57.6.100
│   ├── libavfilter.a
│   ├── libavfilter.so -> libavfilter.so.6.82.100
│   ├── libavfilter.so.6 -> libavfilter.so.6.82.100
│   ├── libavfilter.so.6.82.100
│   ├── libavformat.a
│   ├── libavformat.so -> libavformat.so.57.71.100
│   ├── libavformat.so.57 -> libavformat.so.57.71.100
│   ├── libavformat.so.57.71.100
│   ├── libavutil.a
│   ├── libavutil.so -> libavutil.so.55.58.100
│   ├── libavutil.so.55 -> libavutil.so.55.58.100
│   ├── libavutil.so.55.58.100
│   ├── libpostproc.a
│   ├── libpostproc.so -> libpostproc.so.54.5.100
│   ├── libpostproc.so.54 -> libpostproc.so.54.5.100
│   ├── libpostproc.so.54.5.100
│   ├── libswresample.a
│   ├── libswresample.so -> libswresample.so.2.7.100
│   ├── libswresample.so.2 -> libswresample.so.2.7.100
│   ├── libswresample.so.2.7.100
│   ├── libswscale.a
│   ├── libswscale.so -> libswscale.so.4.6.100
│   ├── libswscale.so.4 -> libswscale.so.4.6.100
│   ├── libswscale.so.4.6.100
│   └── pkgconfig
│       ├── libavcodec.pc
│       ├── libavdevice.pc
│       ├── libavfilter.pc
│       ├── libavformat.pc
│       ├── libavutil.pc
│       ├── libpostproc.pc
│       ├── libswresample.pc
│       └── libswscale.pc
└── share
    ├── doc
    │   └── ffmpeg
    ├── ffmpeg
    │   ├── examples
    │   ├── ffprobe.xsd
    │   ├── libvpx-1080p50_60.ffpreset
    │   ├── libvpx-1080p.ffpreset
    │   ├── libvpx-360p.ffpreset
    │   ├── libvpx-720p50_60.ffpreset
    │   └── libvpx-720p.ffpreset
    └── man
        ├── man1
        └── man3

20 directories, 157 files
时间: 2024-08-29 01:19:25

FFmpeg 编译for Android的相关文章

直播技术总结(二)ijkplayer的编译到Android平台并测试解码库

转载请把头部出处链接和尾部二维码一起转载,本文出自逆流的鱼yuiop:http://blog.csdn.net/hejjunlin/article/details/55670380 前言:ijkplayer,是b站工程师开源的播放器框架,基于FFmpeg及MediaCodec,内部实现软解及硬解的功能,对于没有自研底层播放器的公司,用它确实是比较合适了.关于介绍可以直接看:https://github.com/Bilibili/ijkplayer,今天主要是对ijkplayer进行编译在Andr

利用FFmpeg玩转Android视频录制与压缩(二)<转>

转载出处:http://blog.csdn.net/mabeijianxi/article/details/72983362 预热 时光荏苒,光阴如梭,离上一次吹牛逼已经过去了两三个月,身边很多人的女票已经分了又合,合了又分,本屌依旧骄傲单身.上一次啊我们大致说了一些简单的FFmpeg命令以及Java层简单的调用方式,然后有很多朋友在github或者csdn上给我留言,很多时候我都选择避而不答,原因是本库以前用的so包是不开源的,我根本改不了里面东西.但是这一次啊我们玩点大的,我重新编译了FFm

如何把iOS代码编译为Android应用

新闻 <iPhone 6/6 Plus中国销量曝光:单月销量650万>:据iSuppli Corp.中国研究总监王阳爆料,iPhone 6和iPhone 6 Plus在国内受欢迎的情况大大超过预期,苹果在中国的单月销量在11月超过了650万台,全年在中国的销量将超过4000万台. 教程 < Date parsing performance on iOS>:文章介绍了一个关于格式化时间的”黑科技“,作者使用 sqlite 替换 NSDateFormatter,提高了16倍的转换效率.

【FFmpeg】Windows下FFmpeg编译

转自:http://www.cnblogs.com/dwdxdy/p/3625766.html 由于FFmpeg是基于Linux开发的开源项目,源代码和Windows下最常见的Visual Studio提供的C/C++编译器不兼容,因此它不能使用MSVC++编译,需要在Windows下配置一个类似Linux的编译环境.本文主要记录Windows下FFmpeg编译的过程. 1.资源准备 准备编译过程所需的软件工具和源代码. (1). MinGW-MSYS Bundle http://sourcef

Ant编译打包Android工程流程

一.Ant编译打包android工程步骤 二.Ant apk签名 1.keystore签名    定义自己的签名文件 生成keystore文件:keytool -genkey -alias android.keystore -keyalg RSA - validity 20000 -keystore android.keystore 对应的java命令:jarsigner -verbose -keystore android.keystore -signedjar android_signed.

iOS: FFmpeg编译和使用 学习

ffmpeg是一个多平台多媒体处理工具,处理视频和音频的功能非常强大.目前在网上搜到的iOS上使用FFMPEG的资料都比较陈旧,而FFMPEG更新迭代比较快: 且网上的讲解不够详细,对于初次接触FFMPEG的新手(例如我)来说确实不太好使用.为了防止忘记,这里对iOS下使用FFMPEG做一个总结. 1. FFMPEG层次结构的简单理解 要使用FFMPEG,首先需要理解FFMPEG的代码结构.根据志哥的提示,ffmpeg的代码是包括两部分的,一部分是library,一部分是tool.api都是在l

mac下cocos2dx(带jsoncpp第三方库)编译为android项目心得

在mac下好不容写完了游戏,本以为轻轻松松就能编译为android项目,想不到弄了将近1整天才将问题解决 首先不带jsoncpp的编译方式请参考:http://www.bold-it.com/ios/cocos2d-x-box2d-iosandroid-hybrid-tutorial/ 带jsoncpp第三方库的参考了http://blog.csdn.net/sniffer12345/article/details/7336732,对作者表示感谢. 我使用的是正常的jsoncpp版本,在json

Android JNI学习笔记(三)-编译文件Android.mk、Application.mk 与camke

1. 前言 在android2.2中,加入了cmake编译,而以前都是用Android.mk.Application.mk的,今天就来记录下,他们的配置选项. 2. Android.mk Android.mk在jni目录下,用于描述构建系统的源文件以及 shared libraries .文件格式如下: 以LOCAL_PATH变量开始 LOCAL_PATH := $(call my-dir) 紧接着是CLEAR_VARS变量 include $(CLEAR_VARS) 接下来LOCAL_MODU

ubuntu下FFMPEG编译安装

ubuntu FFMPEG编译安装 声明:转载请注明出处,谢谢! 此处把软件的安装路径指定到 $HOME/ffmpeg_build 软件包统一放在: $HOME/ffmpeg_sources 最终编译的ffmpeg/ffmplay/ffserver将放在 $HOME/bin 1.lame (--enable-libmp3lame) 安装包下载路径: http://ncu.dl.sourceforge.net/project/lame/lame/3.99/lame-3.99.5.tar.gz #