【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 ( mobile-ffmpeg 开源项目介绍 | 集成 mobile-ffmpeg 框架 )

Android 音频压缩功能之Ffmpeg 最近发现网上的压缩功能代码很多都是无法使用的,都是工具类的居多,安卓原生中实现音频压缩的案例搜索了很久还是没有从0到1很容易上手的博客。压缩本地音频的博客好少啊。 阅读详情
AI摘要

本文介绍了mobile-ffmpeg开源项目的原理及在Android10及以上版本的集成方法。由于FFmpegAndroid框架不再适用于Android10,mobile-ffmpeg通过JNI调用FFmpeg.c中的main函数解决了这一问题。文中还提供了在AndroidStudio中集成mobile-ffmpeg的具体步骤。





一、mobile-ffmpeg 开源项目



mobile-ffmpeg 源码主页 : https://github.com/tanersener/mobile-ffmpeg


之前使用 FFmpegAndroid 框架 , 地址为 https://github.com/WritingMinds/ffmpeg-android-java , 该框架的原理是在 放置一个编译好的 ffmpeg 可执行文件到 assets 目录中 , 运行时将其拷贝到应用的内置存储空间 , 也就是 " /data/user/0/cn.e/ffmpeg " 路径 ;

参考 【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 ( 集成 FFmpegAndroid 框架 ) 博客 ;


但是上述框架有个问题 , 就是在 Android 10 系统不再支持可执行程序的运行 , 参考 【错误记录】Android 可执行权限报错 ( Cannot run program “/data/user/0/cn.e/ffmpeg“: error=13,Permission denied ) 博客 , 一旦在应用中执行可执行程序 , 就会报如下错误 ;

2021-11-11 15:23:49.288 15975-16036/cn.example E/FFmpeg: Exception while trying to run: [Ljava.lang.String;@b54f6fa
    java.io.IOException: Cannot run program "/data/user/0/cn.example/files/ffmpeg": error=13, Permission denied
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:1050)

这里使用新的 FFmpeg 框架 , mobile-ffmpeg , 该框架执行 FFmpeg 命令的原理是直接集成了函数库 , 使用 jni 调用 ffmpeg.c 中的 main 函数源码 , 没有执行可执行程序 ;

可以在 Android 10 及以上的系统中执行 ;


不过看该项目主页 https://github.com/tanersener/mobile-ffmpeg 介绍 , 该项目不再维护 , 推荐使用 https://github.com/tanersener/ffmpeg-kit 项目 ;

ffmpeg-kit 开源框架支持 Android / iOS / macOS / Flutter / React Native 等平台 , 这个之后再开博客研究 ;





二、集成 mobile-ffmpeg 框架



在 Android Studio 工程根目录的 build.gradle 构建脚本中 , 配置

repositories {
    mavenCentral()
}

在 Module 下的 build.gradle 脚本中 , 配置

dependencies {
    implementation 'com.arthenica:mobile-ffmpeg-full:4.4'
}

依赖 ;

Java 代码 :

import com.arthenica.mobileffmpeg.Config;
import com.arthenica.mobileffmpeg.FFmpeg;

int rc = FFmpeg.execute("-version");

if (rc == Config.RETURN_CODE_SUCCESS) {
    Log.i(Config.TAG, "命令执行成功");
} else if (rc == Config.RETURN_CODE_CANCEL) {
    Log.i(Config.TAG, "用户取消了命令");
} else {
    Log.i(Config.TAG, String.format("命令执行失败, 返回值=%d", rc));
}
// 打印命令行输出
Config.printLastCommandOutput(Log.INFO);

Kotlin 代码 :

import com.arthenica.mobileffmpeg.Config
import com.arthenica.mobileffmpeg.FFmpeg

val rc = FFmpeg.execute("-version")

if (rc == Config.RETURN_CODE_SUCCESS) {
    Log.i(Config.TAG, "命令执行成功")
} else if (rc == Config.RETURN_CODE_CANCEL) {
    Log.i(Config.TAG, "用户取消了命令")
} else {
    Log.i(Config.TAG, String.format("命令执行失败, 返回值=%d", rc))
}

// 打印命令行输出
Config.printLastCommandOutput(Log.INFO)

经过测试 , 在 Android 10 的 华为 Mate 30 手机中 , 测试正常 , 可以成功打印出 ffmpeg -version 命令输出结果 ;

在这里插入图片描述

Android集成FFmpeg并实现视频转码 1.配置环境 再Android Studio中新建工程,选择Native C++ 在工程的\app\src\main\cpp\目录下新建ffmpeg目录,将编译好的.so文件和头文件拷贝到此目录,还需要将FFmpeg源码根目录下的config.h和以下文件拷贝到此目录: fftools\cmdutils.c fftools\cmdutils.h fftools\ffmpeg.c fftools\... 阅读详情

相关推荐

【Android FFMPEG 开发】告别权限困扰:使用 mobile-ffmpeg 在 Android 10+ 上安全执行 FFMPEG 指令

本文详细介绍了如何在 Android 10+ 上使用 mobile-ffmpeg 安全执行 FFMPEG 指令,解决传统方案因权限限制导致的问题。通过对比传统方案与 mobile-ffmpeg 的核心原理,提供了快速集成指南、高级功能与最佳实践,并建议迁移到更先进的 ffmpeg-kit 框架以获取更好的性能和稳定性。

weixin_29194817的博客 296

在安卓中使用FFmpeg录制摄像头的视频并保存到本地MP4文件

在移动应用开发中,有时需要利用设备的摄像头录制视频,并且希望在录制过程中能够精确控制视频的质量、格式和时长。FFmpeg作为一个强大的多媒体处理工具,提供了广泛的功能和选项,能够帮助我们实现这样的需求。

WriteBug001的博客 2779

DJI Mobile SDK初步开发

大疆Mobile SDK初步开发 1. 从MSDK示例代码开始 配置代码运行环境 (1)下载Moblie SDK:DJI MSDK下载。 (2)准备Android开发环境,推荐使用Android Studio 2.1.1以上版本。官网下载网址:Download Android Studio或者 Android Studio 从GitHub上下载Android demo project:Mobile-SDK-Android 。 在大疆官网创建APP KEY。在大疆官网的个人中心的应用一栏中可以生成

m0_53326990的博客 5777

Android 原生不支持 MP3 格式解决方案

原生的 MediaRecorder 类在 Android 平台上无法直接将音频编码为 MP3 格式,因为 Android 的 MediaRecorder 类默认不支持 MP3 编码器。如果您需要将音频编码为 MP3 格式,您可以考虑使用第三方库或框架,例如 LAME,来实现将原始的音频数据编码为 MP3 格式。

特立独行的博客 2508

mobile-ffmpeg 4.4 集成实战:Android 10+ 权限问题解决方案与 3 行代码验证

本文详细介绍了 mobile-ffmpeg 4.4 在 Android 10+ 平台上的集成方案,重点解决了 Scoped Storage 权限限制问题。通过 JNI 直接调用 FFmpeg 核心函数,开发者可以高效实现音视频处理功能,包括异步命令执行、媒体信息提取等高级应用。文章还提供了 Gradle 配置、性能优化和常见问题解决方案,帮助开发者快速集成这一开源项目。

weixin_33696822的博客 367

mobile-ffmpeg 与 ffmpeg-kit 迁移指南:从已归档项目到 5 大平台支持框架

本文详细介绍了从已归档的mobile-ffmpeg迁移到功能更全面的ffmpeg-kit框架的完整指南。涵盖Android、iOS、Flutter等多平台支持,分析技术优势并提供迁移实践方案,帮助开发者应对Android 10权限限制和跨平台开发需求,提升音视频处理效率。

weixin_30607029的博客 523

集成mobile-ffmpeg框架执行FFmpeg指令兼容Android10:项目的核心功能/场景

集成mobile-ffmpeg框架执行FFmpeg指令兼容Android10:项目的核心功能/场景 【下载地址】集成mobile-ffmpeg框架执行FFmpeg指令兼容Android10 该项目提供了一个完整的解决方案,帮助开发者在 Android 应用中集成 mobile-ffmpeg 框架,轻松执行 FFmpeg ...

gitblog_06724的博客 1217

如何通过FFmpeg在Android上实现音视频开发?

首先,我们集成了FFmpeg库到Android项目中,然后使用FFmpeg命令执行不同的音视频处理操作。在Android平台上进行音视频开发是一项常见的任务,而FFmpeg是一个功能强大的开源多媒体框架,它提供了处理音频和视频的丰富功能。在Android平台上进行音视频开发是一项常见的任务,而FFmpeg是一个强大的开源多媒体框架,它提供了处理音频和视频的丰富功能。首先,我们集成了FFmpeg库到Android项目中,然后使用FFmpeg命令执行不同的音视频处理操作。通过使用FFmpeg,

DevCyberX的博客 829

【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 ( 集成 mobile-ffmpeg 框架 | 完整代码示例 )

一、配置远程 Maven 仓库 二、配置依赖 三、Kotlin 中执行 FFmpeg 命令 四、FFmpeg 命令执行结果查看 五、源码下载

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 4988

集成 mobile-ffmpeg 框架执行 FFmpeg 指令 ( 兼容 Android 10 )

【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 ( 集成 mobile-ffmpeg 框架 | 完整代码示例 ) https://hanshuliang.blog.csdn.net/article/details/123731092 博客源码 一、配置远程 Maven 仓库 二、配置依赖 三、Kotlin 中执行 FFmpeg 命令 四、FFmpeg 命令执行结果查看 五、源码下载

mobile-ffmpeg:适用于Android,iOS和tvOS的FFmpeg

移动FFmpeg FFmpeg适用于Android,iOS和tvOS 1.特点 同时包含FFmpeg和FFprobe 使用Github / JCenter / CocoaPods可用的二进制文件或使用所需的外部库构建自己的版本 支持 Android,iOS和tvOS FFmpeg v3.4.x , v4.0.x , v4.1 , v4.2 , v4.3和v4.3 v4.4-dev版本 29个外部库 chromaprint , fontconfig , freetype , fribidi , gmp , gnutls , kvazaar , lame , libaom , libass , libiconv , libilbc , libtheora , libvorbis , libvpx , libwebp , libxml2 , opencore-amr , openh264 , opus , sdl , shine , snappy , soxr , speex , tesseract , twolame , vo-amrwbenc , wavpack 5个具有GPL许

Android集成ffmpeg

做多媒体,离不开ffmpeg。互联网时代,离不开Android。所以,Android集成ffmpeg的需求,来开发多媒体相关功能,越来越多。 幸运的是,github已经有专门的项目,来跟进。集成ffmpeg变的简单了。 1. 下载源码 项目地址:https://github.com/tanersener/mobile-ffmpeg 2. 编译准备 先设置2个环境变量。 export ANDROID_HOME=<Android SDK Path> export ANDROID_NDK_ROOT=&

newchenxf的专栏 2467

硬件工程师的蜗牛成长路

1、《模拟电路课程》R/L/C/继电器/光耦/二极管/三极管/MOS管磁珠/ESD/TVS/肖特基二极管/稳压二极管/保险丝/GDT/TSS/光耦/MOS/运放/BJT比较器/面板开关/按键开关/拨码开关/BUCK/LDO/电源防护器件LM5069单输出PLL/多路输出PLL/单端晶振/差分晶振/晶体(这方面不熟悉,待以后补充)1)速度传感器2)温度传感器3)倾斜角传感器4)火焰传感器5)红外传感器6)呼吸心跳采集chaunganqi1)数字隔离 电平转换芯片/磁隔离/专用隔离芯片。

caozhaokun的博客 1978

mobile-ffmpeg添加srt协议(Android版本)

mobile-ffmpeg添加srt协议(Android版本) mobile-ffmpeg项目github 目前该项目未支持srt协议,本文记录向其添加srt协议的过程。 Step0:大致了解mobile-ffmpeg的编译过程 以Android为例,该项目编译入口为android.sh,默认编译5种ABI架构的库。支持主要的编译参数 –disable-arm-v7a # 不编译armv7a的库 –disable-arm-v7a-neon # 不编译armv7a支持neo

wychmiss的博客 1500

Tartancalib标定OAK-FFC_4p(上)

1.使用Tartancalib标定双目或多目相机前,先对单个相机标定获得内参,再获得外参。

qq_51731421的博客 1277

simulink中无迹卡尔曼(UKF)模块使用

simulink的UKF模块简单说明

qq_41059950的博客 2819

mobile-ffmpeg 4.4 集成实战:Android 10+ 权限规避与 3 行代码执行 FFmpeg 命令

本文深入探讨了mobile-ffmpeg 4.4在Android 10+环境下的集成与优化实践,重点解决了Scoped Storage机制带来的权限问题。通过对比传统方案与JNI方案的性能差异,详细介绍了如何用3行代码高效执行FFmpeg命令,并提供了权限规避、性能优化及错误排查的实用技巧,助力开发者提升音视频处理效率。

weixin_33937499的博客 324

Blender骨骼绑定实战:如何用IK控制器让角色动作更自然(附常见问题解决)

本文深入探讨了Blender中IK控制器的实战应用,旨在解决角色动作僵硬问题。通过对比IK与FK的核心差异,详细解析了IK链的构建、参数设置及极向目标的使用,并提供了控制器定制、IK/FK无缝切换等高级技巧,帮助动画师实现更自然、符合直觉的角色动画。

weixin_29243279的博客 437

MOBILE_FFMPEG_BUILD_DATE 在哪?

最近在看 mobile-ffmpeg的源码,在 mobileffmpeg.c 看到一个名为MOBILE_FFMPEG_BUILD_DATE 的宏,但是在 mobileffmpeg.h 头文件中没有看到相关定义,考虑是不是定义到其他头文件了,那就 grep 一下 grep -r MOBILE_FFMPEG_BUILD_DATE 让我奇怪的是,还是只有mobileffmpg.c 出现了这个宏...

leo_fighting 929

VisionMaster -Group循环、数组数据格式化

这里创建一个格式化工具,按照自己想要的模式格式化刚刚输出的数据。因为是检测多个物体,所以这里选择输出的是数组。第一次的模板很不满意,反复调整参数也没好,边缘不整齐,强迫症患者受不了。实测如果输入设置太多,会导致模块失效,所以尽量选择需要的少量参数。这里要打开循环使能,循环数值就是高精度匹配的匹配个数。Group输出设置里选择刚刚建立的数据集。左边是主流程,右边是组合模块内部流程。修改采图这里的曝光值,图像提亮一点。建一个数据集,把想要的数据收集起来。用TCP助手测试一下OK。成功得到了想要的数据。

weixin_69505365的博客 4529

从零开始做对容量规划:一文讲透 SAP Greenfield sizing 与 Quick Sizer 落地方法

摘要 SAP项目早期硬件规划面临业务细节缺失的挑战,Greenfield sizing方法通过Quick Sizer工具将业务需求转化为硬件资源需求。该方法聚焦主要负载驱动因素而非精确预测,采用标准化问卷形式输入并发用户数、业务处理量等参数,输出内存、CPU等资源需求。关键步骤包括选择正确的Quick Sizer版本、创建sizing项目、参考SAP基准测试和认证目录校准结果,最终将需求交由硬件厂商落地。该方法特别适用于缺乏历史数据的新系统部署,帮助在不确定性中建立可控的容量规划模型,避免资源浪费或性能不足

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 211

android ios使用ffmpeg 你还在自己编译么

最近因为业务需要,要对上传的图片 和 视屏做压缩处理,我们都知道,凡事涉及到图形图像方面的,ffmpeg肯定是首选的,但是对于移动端ios ,android 都需要自己去编译,并且包的大小不是和好的控制,因为大多人如果不是做和ffmpeg 相关的的工作,连他如何顺利的编译都都搞不懂,更别提如何选择性的去编译包了. 给大家推荐一个很好用的ffmpeg 库,mobile-ffmpeg githup :https://github.com/tanersener/mobile-f...

豌豆的专栏 2898

华为OD机试 - 整型数组按照个位数排序(Java 双机位C卷 100分)

华为OD机试 双机位C卷题库疯狂收录中,刷题。

学Java,找哪吒 349
上一篇: 【Linux 内核】Linux 内核源码根目录下的文件 ( .clang-format | COPYING | CREDITS | Kbuild | Kconfig | MAINTAINERS )
下一篇: 【Android FFMPEG 开发】Android 中执行 FFMPEG 指令 ( 集成 mobile-ffmpeg 框架 | 完整代码示例 )
韩曙亮
韩曙亮 2023年度博客之星评选 TOP 1 2023年度博客之星评选 TOP 1 领域专家: 操作系统技术领域 领域专家: 操作系统技术领域
博客等级 码龄14年 11万+粉丝 4472原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值