Git Product home page Git Product logo

yangfeng1994 / ffmpeg-android Goto Github PK

View Code? Open in Web Editor NEW
382.0 5.0 69.0 116.18 MB

🔥FFmpeg-Android 是基于ffmpeg n4.0-39-gda39990编译运行在android平台的音视频的处理框架, 使用的是ProcessBuilder执行命令行操作, 可实现视频字幕添加、尺寸剪切、添加或去除水印、时长截取、转GIF动图、涂鸦、音频提取、拼接、质量压缩、加减速、涂鸦、 倒放、素描、色彩平衡、模糊、九宫格、添加贴纸、滤镜、分屏、图片合成视频等,音视频合成、截取、拼接,混音、音视频解码,视频特效等等音视频处理...

License: MIT License

Java 91.69% Kotlin 8.31%

ffmpeg-android's Introduction

FFmpeg-Android

FFmpeg 在 Android中使用. 在您的Android项目中轻松执行FFmpeg命令。

关于

引入本项目使您的项目尽可能的小,功能尽可能的完善,已使用本项目上线的项目有 影音坊

项目支持 androidx 或者 support

本项目没有引入任何第三方库,不会对您的项目有任何的代码侵入,可兼容最低api版本为15

项目截图

图-1:ffmpeg_version 图-2:cmd 图-3:cmd 图-3:cmd

体系结构

FFmpeg-Android运行在以下架构上:

  • armeabi
  • armeabi-v7a
  • armv7-neon
  • arm64-v8a

特性

  • 使用最新的 git-2020-01-25-fd11dd500 Copyright (c) 2000-2020 the FFmpeg developers
  • 多线程

使用

在项目的 build.gradle 中添加

allprojects{

	repositories {
		...
		maven { url 'https://jitpack.io' }
		}

	}

1.重新编译了ffmpeg

2.支持更多的命令,执行速度更快

3.支持在安卓10(aip29)上使用

4.支持进度回调,进度为执行文件的进度,如果想计算进度,拿(当前返回进度)除以(文件进度)

app 的 build.gradle 下添加

dependencies {
     implementation 'com.github.yangfeng1994:FFmpeg-Android:v2.0.1'
}

设置支持的so库版本

android{
        defaultConfig{
         ndk {
                    abiFilters 'armeabi-v7a', 'arm64-v8a'     //过滤的so库版本
                }
        }
}

友情提示

  • 申请权限(对本地文件处理时,建议您务必申请权限,不然无法对音视频进行操作)

  • 对输入的文件是否存在,进行判断(如您想要输出的文件 已经在手机中存在,将无法对输出文件)

运行 FFmpeg

java
    // 要执行“ffmpeg -version”命令
	
	String[] cmd = new String[]{"-version"};
	
    FFmpegAsyncUtils  asyncTask =new FFmpegAsyncUtils()
	
     asyncTask.setCallback(new FFmpegExecuteCallback() {
	 
	 		@Override
            public void onFFmpegStart() {}
	 		
            @Override
            public void onFFmpegSucceed(@Nullable String executeOutput) {
               
            }

            @Override
            public void onFFmpegFailed(@Nullable String executeOutput) {
               
            }

            @Override
            public void onFFmpegProgress(@Nullable Integer progress) {
                	fload mprogress = progress/执行视频文件或语音文件时长
            }

            @Override
            public void onFFmpegCancel() {

            }
        })
		
		asyncTask.execute(cmd);
		
        注意,传入的参数是一个lsit
		
        如果想要传入string,命令行拼接的时候,需要用空格隔开  使用FFmpegAsyncUtils2就行
	
kotlin
    // 要执行“ffmpeg -version”命令,只需传递“ arrayOf(-version) ”即可
	
    val  asyncTask = FFmpegAsyncUtils()
	
    asyncTask.setCallback(object :FFmpegExecuteCallback{
           
		   	override fun onFFmpegStart() {
		   	
		   	}
			
		   	override fun onFFmpegProgress(progress: Int?) {
		   	
       			//注意kotlin的除法,建议转为float后,再进行除以
       			
				val mprogress = progress?.div(执行视频文件或语音文件时长)	
				
    			}
				
 			override fun onFFmpegCancel() {
 			
 			}

    		override fun onFFmpegSucceed(executeOutput: String?) {
    		
    		}

			override fun onFFmpegFailed(executeOutput: String?) {
			
			}

        })
		
        asyncTask.execute(cmd)
		
        注意,传入的参数是一个lsit
		
        如果想要传入string,命令行拼接的时候,需要用空格隔开  使用FFmpegAsyncUtils2就行

注意:

  • 所有命令行都不需要以 "ffmpeg"开头,直接命令行就行。

  •  本项目使用的是AsyncTask,需要注意,每个子线程AsyncTask只能执行一次命令,取消后
     应重新new 一个AsyncTask 对象。
    
  • 混淆在model里面已经添加,无需再次添加

停止(或退出)FFmpeg进程

  • 如果你想停止运行中的ffmpeg, 只需在调用' asyncTask.onCancel() '

FFmpegExecuteCallback 接口中方法的介绍

  • onFFmpegStart() 开始执行

  • onFFmpegProgress(progress: Int?) 进度 参数为执行音视频文件的所在的毫秒值

  • onFFmpegCancel() 取消执行

  • onFFmpegSucceed(executeOutput: String?) 执行成功 参数为ffmpeg的执行结果信息

  • onFFmpegFailed(executeOutput: String?) 执行失败 参数为返回为失败原因

历史版本

  • v1.1.1 优化了代码的逻辑,兼容了低版本的手机,使项目同时兼容androidx与support
    implementation 'com.github.yangfeng1994:FFmpeg-Android:v1.1.1'
    
  • v1.0.1 移除x86 so包,优化项目大小
    implementation 'com.github.yangfeng1994:FFmpeg-Android:v1.0.1'
    
  • v1.0.0 新建项目 第一版本
    implementation 'com.github.yangfeng1994:FFmpeg-Android:v1.0.0'

体验demo

Licensing

ffmpeg-android's People

Contributors

yangfeng1994 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

ffmpeg-android's Issues

开发一个类似影音坊的APP,还要做哪些事

大佬,想问下,我想用你这个FFmpeg-Android库,但是我看demo的配置参数太简单了,如果我想开发一个类似影音坊的APP,还要做哪些事呢? 除了用安卓控件做一个漂亮的UI,还需要用到OpenGLES去做渲染吗?

体验demo 怎么播放rtsp流?

不输入 放的也是视频 不是 ver信息。
-rtsp_transport tcp -i rtsp地址
执行后还是 默认放 视频。。。。。。。。

视频压缩进度

"ffmepg -y -i %s -vf scale=iw0.5:ih0.5 %s"; 执行此命令,如何获取处理进度!

不支持armeabi架构吗?

我看demo的时候看到代码判断只支持
public static final String ARM_64_CPU = "arm64-v8a";
public static final String ARM_V7_CPU = "armeabi-v7a";这两种

请问,音频抽取那个一直失败是怎么回事

/**
* 使用ffmpeg命令行进行抽取音频
*
* @param srcFile 原文件
* @param targetFile 目标文件
* @return 需要执行命令行
*/
public static String[] extractAudio(String srcFile, String targetFile) {
//-vn:video not
String mixAudioCmd = "-i %s -acodec copy -vn %s";
mixAudioCmd = String.format(mixAudioCmd, srcFile, targetFile);
return mixAudioCmd.split(" ");//以空格分割为字符串数组
}
按照demo里的cmd命令,输入mp4文件输出mp3文件一直回调失败,怎么回事

请教,如果只用到部分功能的话!

Hi,如题,加入我只使用到了 scale 缩放的功能,是否可以只引入相关的 so?去掉其他用不到的以便减少大小。
还是说必须全部引入呢?

安全漏洞 提示

检测App中是否存在FFmpeg文件读取漏洞。 开发者应将使用的FFmpeg版本升级至3.3.2版本及以上。

我们版本是多少啊

停止推流

两个通道同时推流,FFmpeg.cancel时候两个地址都会停止推流,有没有通道区分?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.