热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Androidstudio的FFmpeg移植

准备1.下载最新的ndk,ffmpeg包,androidstudio一.因为ffmpeg是c,c++的东西所以通过ndk编译成os文件供开发使用1-解压ndk到桌面路径:  Us

准备

1.下载最新的ndk,ffmpeg包,android studio

一.因为ffmpeg是c,c++的东西所以通过ndk编译成os文件供开发使用

1-> 解压ndk到桌面路径:     /Users/用户名/Desktop/android-ndk-r12b(后面idk路径用”&NDK_PATH”表示)

2->将ffmpeg包解压到:     &NDK_PATH/sources/ffmpeg-3.1.1

3.->修改ffmpeg-3.1.1目录下的configure文件,目的是将生成的库类文件名字libavcodec.so.56的56版本号去掉(可用文本编辑器打开修改)

找到

《Android studio 的FFmpeg移植》

修改成

《Android studio 的FFmpeg移植》

4->编译FFmpeg

·在ffmpeg-3.1.1创建文件build_android.sh

·添加内容

#!/bin/bash

NDK=&NDK_PATH(NDK路径)

SYSROOT=$NDK/platforms/android-21/arch-arm/(删:指定NDK所用的编译平台)

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64(删:指定编译工具集的位置)

function build_one

{

./configure \

–prefix=$PREFIX \

–enable-shared \

–disable-static \

–disable-doc \

–disable-ffmpeg \

–disable-ffplay \

–disable-ffprobe \

–disable-ffserver \

–disable-avdevice \

–disable-doc \

–disable-symver \

–cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \

–target-os=linux \

–arch=arm \

–enable-cross-compile \

–sysroot=$SYSROOT \

–extra-cflags=”-Os -fpic $ADDI_CFLAGS”\

–extra-ldflags=”$ADDI_LDFLAGS”\

$ADDITIONAL_CONFIGURE_FLAG

make clean

make

make install

}

CPU=arm

PREFIX=$(pwd)/android/$CPU

ADDI_CFLAGS=”-marm”

build_one

·保存后在终端执行

cd /…/…/ffmpeg3.1.3(idk中ffmpeg的文件夹路径)

sudo chmod +x build_android.sh

./build_android.sh

编译需要等待上一段时间,编译成功后会出现下面这样一个目录

《Android studio 的FFmpeg移植》

其中libavcodec.so、libavfilter.so、libavformat.so、libavutil.so、libswresample.so、libswscale.so都是软链,没有用,可以删掉

·然后在arm文件夹中创建一个Android.mk文件内容如下

LOCAL_PATH:= $(call my-dir)

include $(CLEAR_VARS)

LOCAL_MODULE:= libavcodec

LOCAL_SRC_FILES:= lib/libavcodec-57.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE:= libavformat

LOCAL_SRC_FILES:= lib/libavformat-57.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)

# FFmpeg library

include $(CLEAR_VARS)

LOCAL_MODULE:= libswscale

LOCAL_SRC_FILES:= lib/libswscale-4.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE:= libavutil

LOCAL_SRC_FILES:= lib/libavutil-54.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE:= libavfilter

LOCAL_SRC_FILES:= lib/libavfilter-6.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)

include $(CLEAR_VARS)

LOCAL_MODULE:= libswresample

LOCAL_SRC_FILES:= lib/libswresample-2.so

LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include

include $(PREBUILT_SHARED_LIBRARY)

# Program

include $(CLEAR_VARS)

LOCAL_MODULE := herobayboomerangLive

LOCAL_SRC_FILES :=com.herobay.liangchao.herobayboomerang.MainActivity.c

LOCAL_C_INCLUDES += $(LOCAL_PATH)/include        #头文件搜索路径

LOCAL_LDLIBS :=-llog -lz                         #附加的链接器选项

LOCAL_SHARED_LIBRARIES := avcodec avdevice avfilter avformat avutil postproc swresample swscale

include $(BUILD_SHARED_LIBRARY)

要注意其中.so前面的数字应该改成你的ffmpeg版本编译出来的数字

到这里就完成了ffmpeg库文件的编译可以再android项目中使用了

二.在android studio中进行使用

1.将下面的内容添加到项目中的jni文件夹中

《Android studio 的FFmpeg移植》

2.在local.properties文件配置ndk路径

ndk.dir=&NDK_PATH 如:

《Android studio 的FFmpeg移植》

3.配置app的build.gradle文件

·添加这一段禁止自动ndk-build

sourceSets.main.jni.srcDirs = []

·添加这一段让它知道调用哪个库

ndk {

abiFilter “armeabi”

moduleName “ovsplayer”

ldLibs “log”, “z”, “m”, “jnigraphics”, “android”

}

如:

《Android studio 的FFmpeg移植》

4.在grade.properties文件中添加:android.useDeprecatedNdk=true

5.进入Project中的src/main/jni文件夹,修改其中的Application.mk文件,添加:APP_PLATFORM := android-21(因为该example采用-ljnigraphics默认库,这个库在android-3中没有,如果不声明的话,idk会默认采用android-3进行build)

接下来就可以开始FFmpeg的使用了


推荐阅读
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • 本文介绍了Windows Vista操作系统中的用户账户保护功能,该功能是为了增强系统的安全性而设计的。通过对Vista测试版的体验,可以看到系统在安全性方面的进步。该功能的引入,为用户的账户安全提供了更好的保障。 ... [详细]
  • 如何使用PLEX播放组播、抓取信号源以及设置路由器
    本文介绍了如何使用PLEX播放组播、抓取信号源以及设置路由器。通过使用xTeve软件和M3U源,用户可以在PLEX上实现直播功能,并且可以自动匹配EPG信息和定时录制节目。同时,本文还提供了从华为itv盒子提取组播地址的方法以及如何在ASUS固件路由器上设置IPTV。在使用PLEX之前,建议先使用VLC测试是否可以正常播放UDPXY转发的iptv流。最后,本文还介绍了docker版xTeve的设置方法。 ... [详细]
  • Mono为何能跨平台
    概念JIT编译(JITcompilation),运行时需要代码时,将Microsoft中间语言(MSIL)转换为机器码的编译。CLR(CommonLa ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 不同优化算法的比较分析及实验验证
    本文介绍了神经网络优化中常用的优化方法,包括学习率调整和梯度估计修正,并通过实验验证了不同优化算法的效果。实验结果表明,Adam算法在综合考虑学习率调整和梯度估计修正方面表现较好。该研究对于优化神经网络的训练过程具有指导意义。 ... [详细]
  • 本文介绍了Linux系统中正则表达式的基础知识,包括正则表达式的简介、字符分类、普通字符和元字符的区别,以及在学习过程中需要注意的事项。同时提醒读者要注意正则表达式与通配符的区别,并给出了使用正则表达式时的一些建议。本文适合初学者了解Linux系统中的正则表达式,并提供了学习的参考资料。 ... [详细]
  • 本文介绍了一个免费的asp.net控件,该控件具备数据显示、录入、更新、删除等功能。它比datagrid更易用、更实用,同时具备多种功能,例如属性设置、数据排序、字段类型格式化显示、密码字段支持、图像字段上传和生成缩略图等。此外,它还提供了数据验证、日期选择器、数字选择器等功能,以及防止注入攻击、非本页提交和自动分页技术等安全性和性能优化功能。最后,该控件还支持字段值合计和数据导出功能。总之,该控件功能强大且免费,适用于asp.net开发。 ... [详细]
  • 本文概述了JNI的原理以及常用方法。JNI提供了一种Java字节码调用C/C++的解决方案,但引用类型不能直接在Native层使用,需要进行类型转化。多维数组(包括二维数组)都是引用类型,需要使用jobjectArray类型来存取其值。此外,由于Java支持函数重载,根据函数名无法找到对应的JNI函数,因此介绍了JNI函数签名信息的解决方案。 ... [详细]
  • 本文介绍了在Ubuntu 11.10 x64环境下安装Android开发环境的步骤,并提供了解决常见问题的方法。其中包括安装Eclipse的ADT插件、解决缺少GEF插件的问题以及解决无法找到'userdata.img'文件的问题。此外,还提供了相关插件和系统镜像的下载链接。 ... [详细]
author-avatar
黑衬衫1994
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有