Android编译ffmpeg
来源:互联网 发布:fast迅捷网络fwr200 编辑:程序博客网 时间:2024/05/16 13:39
DEMO:https://github.com/zhaopingfu/FFmpegDemo
ffmpeg下载地址:https://ffmpeg.org/releases/
创建ffmpeg文件夹
mkdir ffmpegcd ffmpeg
下载ffmpeg
wget http://ffmpeg.org/releases/ffmpeg-2.6.9.tar.gz
解压
tar -xzf ffmpeg-2.6.9.tar.gz
给权限
chmod 777 -R ffmpeg-2.6.9
进入ffmpeg-2.6.9里面,创建build_android.sh,在里面写入配置
#!/bin/bash#注意下面这几个,把路径修改为自己的export NDK=/usr/ndk/android-ndk-r15bexport SYSROOT=$NDK/platforms/android-9/arch-arm/export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64export CPU=armexport PREFIX=$(pwd)/android/$CPUexport ADDI_CFLAGS="-marm"./configure --target-os=linux \--prefix=$PREFIX --arch=arm \--disable-doc \--enable-shared \--disable-static \--disable-yasm \--disable-symver \--enable-gpl \--disable-ffmpeg \--disable-ffplay \--disable-ffprobe \--disable-ffserver \--disable-doc \--disable-symver \--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \--enable-cross-compile \--sysroot=$SYSROOT \--extra-cflags="-Os -fpic $ADDI_CFLAGS" \--extra-ldflags="$ADDI_LDFLAGS" \$ADDITIONAL_CONFIGURE_FLAGmake cleanmakemake install
执行build_android.sh
./build_android.sh
发现问题
编译后会在当前路径下生成/android/arm/lib和/android/arm/include
但是在lib中生成的so库文件的名字有点不太对,是libavdevice.so.56
我们想要的是libavdevice-56.so
所以
cd ../../../
解决问题
在ffmpeg里找到configure文件,编辑configure文件
在2779行修改
#把原来的命名规则注掉#SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'#LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'#SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'#SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR) $(SLIBNAME)'#zhaopf 修改生成的so库的命名规则 SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'SLIB_INSTALL_LINKS='$(SLIBNAME)'
这样在当前目录下会生成一个android文件加,里面的lib下有想要的.so库
在AndroidStudio中配置
app下的build.gradle中
defaultConfig { applicationId "com.pf.ffmpegdemo" minSdkVersion 15 targetSdkVersion 25 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" sourceSets{ main{ jniLibs.srcDirs = ['libs'] } } externalNativeBuild { cmake { cppFlags "-frtti -fexceptions" abiFilters 'armeabi' } }}externalNativeBuild { cmake { path "CMakeLists.txt" }}
CMakeLists.txt
cmake_minimum_required(VERSION 3.4.1)#寻找SDK中自带的库#路径:\SDK\ndk-bundle\platforms\android-23\arch-arm\usr\libfind_library( log-lib log )#设置变量set(DIR ../../../../libs)add_library(avcodec-56 SHARED IMPORTED)set_target_properties( avcodec-56 PROPERTIES IMPORTED_LOCATION ${DIR}/armeabi/libavcodec-56.so)add_library(avdevice-56 SHARED IMPORTED)set_target_properties( avdevice-56 PROPERTIES IMPORTED_LOCATION ${DIR}/armeabi/libavdevice-56.so)add_library(avfilter-5 SHARED IMPORTED)set_target_properties( avfilter-5 PROPERTIES IMPORTED_LOCATION ${DIR}/armeabi/libavfilter-5.so)add_library(avformat-56 SHARED IMPORTED)set_target_properties( avformat-56 PROPERTIES IMPORTED_LOCATION ${DIR}/armeabi/libavformat-56.so)add_library(avutil-54 SHARED IMPORTED)set_target_properties( avutil-54 PROPERTIES IMPORTED_LOCATION ${DIR}/armeabi/libavutil-54.so)add_library(postproc-53 SHARED IMPORTED)set_target_properties( postproc-53 PROPERTIES IMPORTED_LOCATION ${DIR}/armeabi/libpostproc-53.so)add_library(swresample-1 SHARED IMPORTED)set_target_properties( swresample-1 PROPERTIES IMPORTED_LOCATION ${DIR}/armeabi/libswresample-1.so)add_library(swscale-3 SHARED IMPORTED)set_target_properties( swscale-3 PROPERTIES IMPORTED_LOCATION ${DIR}/armeabi/libswscale-3.so)#引入include下的头文件include_directories(libs/include)#include_directories(src/main/cpp/include)#引入自己的库add_library( native-lib SHARED src/main/cpp/native-lib.cpp )#链接的目标库target_link_libraries( native-lib avcodec-56 avdevice-56 avfilter-5 avformat-56 avutil-54 postproc-53 swresample-1 swscale-3 ${log-lib} )
这样就可以了,编译可以通过
阅读全文
0 0
- android ndk 编译 ffmpeg
- ffmpeg 编译至android
- Android NDK编译ffmpeg
- ffmpeg android编译
- 编译FFMPEG Android版本
- android编译ffmpeg+x264
- 编译ffmpeg到android
- android ffmpeg 编译
- android编译ffmpeg+x264
- ffmpeg android编译
- android ffmpeg 编译
- ffmpeg Android编译
- android ffmpeg 编译
- android 编译FFmpeg
- android编译ffmpeg+x264
- Android ffmpeg编译
- ffmpeg android编译脚本
- android 编译ffmpeg
- Exceptionin thread "main" java.lang.UnsatisfiedLinkError:org.apache.hadoop.util.NativeCrc32.nativeCo
- postgresql数据库一些字符操作
- php函数-list函数
- Java学习笔记之线程(三):线程的安全问题和解决办法
- 用java语言实现事件委托模式
- Android编译ffmpeg
- 程序员最喜欢的15款文本编辑器推荐
- 类的声明与类的实现分开 点和圆
- otter单向同步实践问题小结
- 300.8判断平年还是闰年
- ajax请求service报405【服务器不允许的方法】
- 12-高阶函数
- python引用同一包中其他.py文件的类
- python基础知识之列表