1. 在x264的源码目录下创建b1.sh,内容如下:
点击(此处)折叠或打开
- export NDK=/opt/google/android/android-ndk-r8e
- export VERSION=4.4.3
- export PREBUILT=$NDK/toolchains/arm-linux-androideabi-$VERSION/prebuilt
- export PLATFORM=$NDK/platforms/android-8/arch-arm
- ./configure --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
2. 在ffmepg的父目录下创建b1.sh,内容如下:并创建目录elib,并把上面生成的lib264.a 拷贝到该目录下
点击(此处)折叠或打开
- #!/bin/bash
- export VERSION=4.4.3
- export NDK=/opt/google/android/android-ndk-r8e
- export PREBUILT=$NDK/toolchains/arm-linux-androideabi-$VERSION/prebuilt/linux-x86_64
- export PLATFORM=$NDK/platforms/android-9/arch-arm
- export FFMPEG_ROOT=/home/test/code/ffmpeg-1.1.5
- export X264_ROOT=/home/test/code/x264_and #上面的x264的源码目录
- export ELIB="$FFMPEG_ROOT/elib"
- function build_one
- {
- $FFMPEG_ROOT/configure --target-os=linux \
- --enable-cross-compile \
- --enable-runtime-cpudetect \
- --disable-asm \
- --arch=arm \
- --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
- --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
- --disable-stripping \
- --nm=$PREBUILT/bin/arm-linux-androideabi-nm \
- --sysroot=$PLATFORM \
- --enable-nonfree \
- --enable-version3 \
- --disable-everything \
- --enable-gpl \
- --disable-doc \
- --enable-avresample \
- --enable-demuxer=rtsp \
- --enable-muxer=rtsp \
- --disable-ffplay \
- --disable-ffserver \
- --enable-ffmpeg \
- --disable-ffprobe \
- --enable-libx264 \
- --enable-encoder=libx264 \
- --enable-decoder=h264 \
- --enable-protocol=rtp \
- --enable-hwaccels \
- --enable-zlib \
- --disable-devices \
- --disable-avdevice \
- --extra-cflags="-I$X264_ROOT -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \
- --extra-ldflags="-L$ELIB"
- make -j4
- }
- build_one
- $PREBUILT/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o
- $PREBUILT/bin/arm-linux-androideabi-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -L$ELIB -soname libffmpeg.so -shared -nostdlib -z noexecstack -Bsymbolic --whole-archive --no-undefined -o libffmpeg.so libavcodec/libavcodec.a libavfilter/libavfilter.a libavresample/libavresample.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog -lx264 --warn-once --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/arm-linux-androideabi/$VERSION/libgcc.a
到此为止so文件已经编译完毕:
下面编译jni的so文件;
点击(此处)折叠或打开
- LOCAL_PATH := $(call my-dir)
- include $(CLEAR_VARS)
- MY_PATH := /home/wanjm/code/binary #上面的so文件的目录
- LOCAL_MODULE := ffmpeg
- LOCAL_SRC_FILES := $(MY_PATH)/libffmpeg.so #仅支持一个文件;
- include $(PREBUILT_SHARED_LIBRARY)
- include $(CLEAR_VARS)
- LOCAL_MODULE := myffmp
- LOCAL_SRC_FILES := VideoEncoder.c #jni的c文件;
- LOCAL_C_INCLUDES := /home/wanjm/code/ffmpeg-1.2.4
- LOCAL_LDLIBS := -llog -lm -lc -ldl -lz -lstdc++
- LOCAL_STATIC_LIBRARIES := libffmpeg #引用5处生成的so文件;
- include $(BUILD_SHARED_LIBRARY)
上面so方式弄出来的,还是两个文件,在实际的java中,要限价在libffmpeg.so,然后在加载myffmp; 反序后会报告少依赖包, 但是按照该顺序还是加载失败;
然后按照下面的写法,可以生成单个so文件,且可以调试;
点击(此处)折叠或打开
- LOCAL_PATH := $(call my-dir)
- MY_PATH :=/home/wanjm/code/binary/elib
- include $(CLEAR_VARS)
- #MY_PATH := /home/wanjm/code/binary
- #LOCAL_MODULE := ffmpeg
- #LOCAL_SRC_FILES := $(MY_PATH)/libffmpeg.so
- #include $(PREBUILT_SHARED_LIBRARY)
- include $(CLEAR_VARS)
- LOCAL_MODULE := avcodec
- LOCAL_SRC_FILES := $(MY_PATH)/libavcodec.a
- include $(PREBUILT_STATIC_LIBRARY)
- include $(CLEAR_VARS)
- LOCAL_MODULE := avformat
- LOCAL_SRC_FILES := $(MY_PATH)/libavformat.a
- include $(PREBUILT_STATIC_LIBRARY)
- include $(CLEAR_VARS)
- LOCAL_MODULE := avutil
- LOCAL_SRC_FILES := $(MY_PATH)/libavutil.a
- include $(PREBUILT_STATIC_LIBRARY)
- include $(CLEAR_VARS)
- LOCAL_MODULE := x264
- LOCAL_SRC_FILES := $(MY_PATH)/libx264.a
- include $(PREBUILT_STATIC_LIBRARY)
- include $(CLEAR_VARS)
- LOCAL_MODULE := swscale
- LOCAL_SRC_FILES := $(MY_PATH)/libswscale.a
- include $(PREBUILT_STATIC_LIBRARY)
- include $(CLEAR_VARS)
- LOCAL_MODULE := myffmp
- LOCAL_SRC_FILES := VideoEncoder.c
- LOCAL_C_INCLUDES := /home/wanjm/code/ffmpeg-1.2.4
- LOCAL_LDLIBS := -llog -lm -lc -ldl -lz -lstdc++
- LOCAL_STATIC_LIBRARIES := libavformat libavutil libavcodec libswscale libavutil libx264
- include $(BUILD_SHARED_LIBRARY)
makefile 脚本: 注意-lgcc 应该放在最后,否则找到__aeabi_idiv等方法;
点击(此处)折叠或打开
- VERSION=4.8
- NDK_ROOT=/opt/google/android-ndk-r9b
- TOOLCHAINS_ROOT=$(NDK_ROOT)/toolchains/arm-linux-androideabi-$(VERSION)/prebuilt/linux-x86_64
- TOOLCHAINS_PREFIX=$(TOOLCHAINS_ROOT)/bin/arm-linux-androideabi
- TOOLCHAINS_INCLUDE=$(TOOLCHAINS_ROOT)/lib/gcc/arm-linux-androideabi/$(VERSION)/include-fixed
- SYSROOT=$(NDK_ROOT)/platforms/android-9/arch-arm
- PLATFORM_INCLUDE=$(SYSROOT)/usr/include
- PLATFORM_LIB=$(SYSROOT)/usr/lib
- FLAGS= -fpic -DANDROID
- #如果没有-lc,实际运行时会找不到gettimeofday;
- LDFLAGS=-shared -L$(PLATFORM_LIB) --no-undefined -lc -llog -lm -lc -ldl -lz #-nostdlib -ldl -lm -Bdynamic -lc -lstdc++
- #FLAGS="-I$(TOOLCHAINS_INCLUDE) -I$(PLATFORM_INCLUDE) " #-L$(PLATFORM_LIB) -nostdlib -lgcc -Bdynamic -lc"
- CC=$(TOOLCHAINS_PREFIX)-gcc --sysroot=$(SYSROOT)
- LD=$(TOOLCHAINS_PREFIX)-ld
- libtime.so: main.o
- $(LD) $(LDFLAGS) main.o -o libtime.so -L/home/wanjm/code/binary/elib -lavformat -lavutil -lavcodec -lswscale -lavutil -lx264 -L$(TOOLCHAINS_ROOT)/lib/gcc/arm-linux-androideabi/$(VERSION) -lgcc
- cp libtime.so ../libs/armeabi
- main.o: VideoEncoder.c
- $(CC) -c VideoEncoder.c -o main.o -I/home/wanjm/code/ffmpeg-1.2.4
- clean:
- rm -rf libtime.so
- rm main.o
一步到位的ffmpeg+x264 for android 的编译;
1. 建立目录android,其下放置解压的ffmpeg和x264源码目录;建立install 目录,和make目录;
2. 在make中创建build.sh; 注意此处用的是相对目录,所以只能在make目录下运行;
点击(此处)折叠或打开
- #!/bin/bash
- export VERSION=4.6
- export NDK=/opt/google/android-ndk-r9b
- export PREBUILT=$NDK/toolchains/arm-linux-androideabi-$VERSION/prebuilt/linux-x86_64
- export PLATFORM=$NDK/platforms/android-9/arch-arm
- export FFMPEG_ROOT=../ffmpeg-1.2.4
- export X264_ROOT=../x264 #上面的x264的源码目录
- export PREFIX=../install
- export ELIB="$PREFIX/lib"
- export FAAC_ROOT=../faac-1.28
- function build_x264
- {
- cd $X264_ROOT
- pwd
- ./configure --enable-static \
- --prefix=$PREFIX \
- --enable-shared \
- --enable-pic \
- --disable-asm \
- --disable-cli \
- --host=arm-linux \
- --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
- --sysroot=$PLATFORM
- make
- cp libx264.a $ELIB
- cd -
- }
- function build_faac
- {
- cd $FAAC_ROOT
- pwd
- CFLAGS="-fpic -DANDROID -fpic -mthumb-interwork -ffunction-sections -funwind-tables -fstack-protector -fno-short-enums -D__ARM_ARCH_5__ -D__ARM_ARCH_5T__ -D__ARM_ARCH_5E__ -D__ARM_ARCH_5TE__ -Wno-psabi -march=armv5te -mtune=xscale -msoft-float -mthumb -Os -fomit-frame-pointer -fno-strict-aliasing -finline-limit=64 -DANDROID -Wa,--noexecstack -MMD -MP "
- #FLAGS="--host=arm-androideabi-linux --enable-static --disable-shared --prefix=$HOME --enable-armv5e "
- CROSS_COMPILE=$PREBUILT/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 RANLIB="${CROSS_COMPILE}ranlib"
- export AR="${CROSS_COMPILE}ar"
- ./configure --program-prefix=$PREFIX \
- --host=arm-linux
- make
- cp ./libfaac/.libs/libfaac.a $ELIB
- cd -
- }
- function build_one
- {
- $FFMPEG_ROOT/configure --target-os=linux \
- --prefix=$PREFIX \
- --enable-cross-compile \
- --enable-runtime-cpudetect \
- --disable-asm \
- --arch=arm \
- --cc=$PREBUILT/bin/arm-linux-androideabi-gcc \
- --cross-prefix=$PREBUILT/bin/arm-linux-androideabi- \
- --disable-stripping \
- --nm=$PREBUILT/bin/arm-linux-androideabi-nm \
- --sysroot=$PLATFORM \
- --enable-nonfree \
- --enable-version3 \
- --enable-gpl \
- --disable-doc \
- --enable-avresample \
- --enable-demuxer=rtsp \
- --enable-muxer=rtsp \
- --disable-ffplay \
- --disable-ffserver \
- --enable-ffmpeg \
- --disable-ffprobe \
- --enable-libx264 \
- --enable-libfaac --enable-nonfree \
- --enable-encoder=libx264 \
- --enable-decoder=h264 \
- --enable-protocol=rtp \
- --enable-encoder=libfaac \
- --enable-decoder=aac \
- --enable-hwaccels \
- --enable-zlib \
- --disable-devices \
- --disable-avdevice \
- --extra-cflags="-I$X264_ROOT -I$FAAC_ROOT/include -fPIC -DANDROID -D__thumb__ -mthumb -Wfatal-errors -Wno-deprecated -mfloat-abi=softfp -mfpu=vfpv3-d16 -marm -march=armv7-a" \
- --extra-ldflags="-L$ELIB"
- make -j4
- make install
- }
- mkdir -p $ELIB
- build_faac
- build_x264
- build_one
http://blog.chinaunix.net/uid-20104447-id-3823071.html
http://blog.csdn.net/gobitan/article/details/22750719
相关推荐
开源库ffmpeg+x264+aac+lame源码编译,包含整个完整的编译步骤
在实际应用中,利用FFmpeg+libx264+libx265,开发者可以实现的功能包括但不限于: - 视频录制:将摄像头捕获的原始数据编码为H.264或H.265格式的视频流。 - 视频转码:将已有H.264或H.265视频转换为其他格式,或者...
本项目“Android编译ffmpeg+测试工程”旨在帮助开发者在Android环境中集成并运行FFmpeg,以便进行多媒体处理任务。通过这个项目,我们可以学习到以下关键知识点: 1. **FFmpeg简介**:FFmpeg是一个开源的跨平台...
要在Android下从事音视频开发,绕不开ffmpeg+opencv,不管是初学者还是有一定经验的程序,面临的首要问题就是环境的搭建和库文件的编译配置等问题,特别是初学者,往往会在实际开发前浪费大量的时间来编译ffmpeg及...
### FFmpeg+x264+x265在Windows及Android平台上的编译指南 #### 一、概述 FFmpeg是一款非常强大的跨平台音视频处理工具集,它支持多种音视频编码格式,包括常见的H.264 (x264) 和 H.265 (x265)。本文档旨在详细介绍...
总之,FFmpeg+x264+aac的组合为Windows 10 x64用户提供了一套强大的音视频处理解决方案,无论是用于个人项目还是商业应用,都能满足高效、高质量的编码需求。同时,通过编译资源,开发者可以进一步定制和优化这些...
ffmpeg+264+lame编译 ffmpeg+264+lame编译ffmpeg+264+lame编译
在这个名为"ffmpeg+x264.zip"的压缩包中,包含了FFmpeg和x264的相关资源,适合开发者进行Android平台上的视频处理工作。以下是对这些资源的详细解析: 1. **armeabi-v7a和x86**: 这两个目录分别包含了针对Android...
树莓派4B(32Bit)编译的ffmpeg+x264库,在树莓派上可直接使用。截止2020-05-14 最新的版本。博客地址:https://blog.csdn.net/xiaolong1126626497/article/details/106112203
在Android平台上,编译FFmpeg并集成到自己的应用中,可以实现丰富的音视频功能,如播放、录制、编辑等。下面将详细介绍如何在Android中编译FFmpeg并构建测试工程。 首先,你需要获取FFmpeg的源代码。通常,你可以从...
在Android平台上进行多媒体处理时,FFmpeg是一个非常...总的来说,"andorid_ffmpeg+x264"为Android开发者提供了一个强大的音视频处理工具,通过它,开发者可以轻松地在Android设备上实现复杂而高效的音视频处理功能。
5. 配置FFmpeg,添加x264和x265编译选项: ```bash ./configure --enable-gpl --enable-libx264 --enable-libx265 ``` 6. 编译和安装FFmpeg: ```bash make sudo make install ``` 7. 检查安装是否成功: ...
将FFmpeg和x264编译为ARM-Linux平台的库文件,是为了在这些设备上实现本地化的视频处理功能,提高性能并减少资源消耗。 4. **编译过程**: 编译FFmpeg和x264到ARM-Linux平台需要交叉编译工具链,这通常包括针对ARM...
在这个“ffmpeg+lib264(windows32)”的压缩包中,包含了适用于Windows 32位系统的FFmpeg和lib264编译版本。 1. FFmpeg核心功能: - 视频编码:FFmpeg支持多种视频编码格式,包括H.264、VP9、MPEG-2等。lib264是...
FFmpeg+x264 解码器支持多种处理器架构,包括 x86_64(适用于64位的Intel或AMD处理器)、armv7(针对ARM架构的V7版本)、arm64(适用于64位ARM设备,如现代的Android和iOS设备)以及 i386(32位Intel处理器)。...
编译x264库是编译FFmpeg的前置步骤。需要下载x264的源码并解压,之后通过配置命令指定库的安装目录,并启用共享库和静态库的编译。编译过程可能需要几分钟,并且在没有错误的情况下,可以执行make install命令。 接...
在这个iOS项目的背景下,FFmpeg 配合了几个关键的第三方库,包括libx264、libx265、fdk-aac和lame,用于实现高效的音视频编码和解码。 1. **libx264**: 这是针对H.264视频编码的一个高效开源实现。H.264,也称为AVC...
在Windows环境下编译FFmpeg是一项技术性较强的任务,特别是对于初学者来说可能充满挑战。FFmpeg是一个开源项目,提供了一套强大的音频、视频处理工具,包括编码、解码、转换和流媒体等功能。以下是编译FFmpeg的详细...
ffmpeg4.1.2+fdkaac+opus+mp3lame+x264+x265+libyasm+vpx 编译静态库 采用最新的版本进行编译,里面包含编译脚本、编译步骤说明、以及编译遇到的问题及解决 方法 ...
这个"ffmpeg+x264.rar"压缩包可能包含了FFmpeg和X264的Windows动态链接库(DLL)文件,使得开发者可以在Windows平台上轻松地将这两个工具集成到他们的应用程序中。 FFmpeg的核心功能包括: 1. **编码与解码**:...