diff --git a/README.md b/README.md index a35c994..7c1451a 100644 --- a/README.md +++ b/README.md @@ -99,7 +99,7 @@ allprojects { ```groovy dependencies { - implementation 'com.github.microshow:RxFFmpeg:2.0.0' + implementation 'com.github.microshow:RxFFmpeg:2.1.0' } ``` @@ -140,28 +140,34 @@ String[] commands = text.split(" "); RxFFmpegInvoke.getInstance().runCommandRxJava(commands).subscribe(new RxFFmpegSubscriber() { @Override public void onFinish() { - if (mProgressDialog != null) + if (mProgressDialog != null) { mProgressDialog.cancel(); + } showDialog("处理成功"); } @Override - public void onProgress(int progress) { - if (mProgressDialog != null) + public void onProgress(int progress, long progressTime) { + if (mProgressDialog != null) { mProgressDialog.setProgress(progress); + //progressTime 可以在结合视频总时长去计算合适的进度值 + mProgressDialog.setMessage("已处理progressTime="+(double)progressTime/1000000+"秒"); + } } @Override public void onCancel() { - if (mProgressDialog != null) + if (mProgressDialog != null) { mProgressDialog.cancel(); + } showDialog("已取消"); } @Override public void onError(String message) { - if (mProgressDialog != null) + if (mProgressDialog != null) { mProgressDialog.cancel(); + } showDialog("出错了 onError:" + message); } }); diff --git a/app/src/main/java/io/microshow/rxffmpegdemo/MainActivity.java b/app/src/main/java/io/microshow/rxffmpegdemo/MainActivity.java index f774c63..d9a5017 100644 --- a/app/src/main/java/io/microshow/rxffmpegdemo/MainActivity.java +++ b/app/src/main/java/io/microshow/rxffmpegdemo/MainActivity.java @@ -16,7 +16,7 @@ import io.microshow.rxffmpegdemo.databinding.ActivityMainBinding; import io.reactivex.functions.Consumer; -public class MainActivity extends AppCompatActivity implements View.OnClickListener { +public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private static final String TAG = MainActivity.class.getSimpleName(); @@ -27,7 +27,7 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe private ActivityMainBinding binding; - private ProgressDialog mProgressDialog; + private ProgressDialog mProgressDialog; //权限 private RxPermissions rxPermissions = null; @@ -45,10 +45,11 @@ public void accept(Boolean aBoolean) throws Exception { if (aBoolean) {// 用户同意了权限 runFFmpegRxJava(); } else {//用户拒绝了权限 - Toast.makeText(MainActivity.this, "您拒绝了权限,请往设置里开启权限", Toast.LENGTH_LONG).show(); + Toast.makeText(MainActivity.this,"您拒绝了权限,请往设置里开启权限",Toast.LENGTH_LONG).show(); } } }); + } } @@ -66,38 +67,43 @@ protected void onCreate(Bundle savedInstanceState) { /** * rxjava方式调用 */ - private void runFFmpegRxJava() { + private void runFFmpegRxJava () { openProgressDialog(); final String text = binding.editText.getText().toString(); String[] commands = text.split(" "); -// String[] commands = RxFFmpegCommandSupport.getBoxblur(); RxFFmpegInvoke.getInstance().runCommandRxJava(commands).subscribe(new RxFFmpegSubscriber() { @Override public void onFinish() { - if (mProgressDialog != null) + if (mProgressDialog != null) { mProgressDialog.cancel(); + } showDialog("处理成功"); } @Override - public void onProgress(int progress) { - if (mProgressDialog != null) + public void onProgress(int progress, long progressTime) { + if (mProgressDialog != null) { mProgressDialog.setProgress(progress); + //progressTime 可以在结合视频总时长去计算合适的进度值 + mProgressDialog.setMessage("已处理progressTime="+(double)progressTime/1000000+"秒"); + } } @Override public void onCancel() { - if (mProgressDialog != null) + if (mProgressDialog != null) { mProgressDialog.cancel(); + } showDialog("已取消"); } @Override public void onError(String message) { - if (mProgressDialog != null) + if (mProgressDialog != null) { mProgressDialog.cancel(); + } showDialog("出错了 onError:" + message); } }); @@ -108,9 +114,9 @@ public void openProgressDialog() { mProgressDialog = Utils.openProgressDialog(this); } - private void showDialog(String message) { + private void showDialog (String message) { endTime = System.nanoTime(); - Utils.showDialog(this, message, Utils.convertUsToTime((endTime - startTime) / 1000, false)); + Utils.showDialog(this, message, Utils.convertUsToTime((endTime-startTime)/1000, false)); } } \ No newline at end of file diff --git a/configs.gradle b/configs.gradle index 493dba1..2197195 100644 --- a/configs.gradle +++ b/configs.gradle @@ -11,8 +11,8 @@ ext { //支持包版本 supportLibValue = "28.0.0" //应用 versionCode - versionCodeValue = 200 + versionCodeValue = 210 //应用 version 名称,更多设置里显示的 - versionNameValue = "2.0.0" + versionNameValue = "2.1.0" } \ No newline at end of file diff --git a/preview/app-debug.apk b/preview/app-debug.apk index f02d349..8f45d68 100644 Binary files a/preview/app-debug.apk and b/preview/app-debug.apk differ diff --git a/rxffmpeg/libs/arm64-v8a/librxffmpeg-invoke.so b/rxffmpeg/libs/arm64-v8a/librxffmpeg-invoke.so index bc32559..c8861fd 100644 Binary files a/rxffmpeg/libs/arm64-v8a/librxffmpeg-invoke.so and b/rxffmpeg/libs/arm64-v8a/librxffmpeg-invoke.so differ diff --git a/rxffmpeg/libs/armeabi-v7a/librxffmpeg-invoke.so b/rxffmpeg/libs/armeabi-v7a/librxffmpeg-invoke.so index d8bc84b..c3fea7e 100644 Binary files a/rxffmpeg/libs/armeabi-v7a/librxffmpeg-invoke.so and b/rxffmpeg/libs/armeabi-v7a/librxffmpeg-invoke.so differ diff --git a/rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegInvoke.java b/rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegInvoke.java index 449468c..f2b884b 100644 --- a/rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegInvoke.java +++ b/rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegInvoke.java @@ -85,10 +85,10 @@ public int runCommand(final String[] command, IFFmpegListener mffmpegListener) { * @param command * @return */ - public Flowable runCommandRxJava(final String[] command) { - return Flowable.create(new FlowableOnSubscribe() { + public Flowable runCommandRxJava(final String[] command) { + return Flowable.create(new FlowableOnSubscribe() { @Override - public void subscribe(final FlowableEmitter emitter) { + public void subscribe(final FlowableEmitter emitter) { setFFmpegListener(new RxFFmpegInvoke.IFFmpegListener() { @Override public void onFinish() { @@ -96,14 +96,14 @@ public void onFinish() { } @Override - public void onProgress(int progress) { - emitter.onNext(progress); + public void onProgress(int progress, long progressTime) { + emitter.onNext(new RxFFmpegProgress(RxFFmpegSubscriber.STATE_PROGRESS, progress, progressTime)); } @Override public void onCancel() { //设为-100 作为取消状态 - emitter.onNext(RxFFmpegSubscriber.STATE_CANCEL); + emitter.onNext(new RxFFmpegProgress(RxFFmpegSubscriber.STATE_CANCEL)); } @Override @@ -142,11 +142,12 @@ public void onError(String message) { /** * 内部进度回调 * - * @param progress + * @param progress 执行进度 + * @param progressTime 执行的时间,相对于总时间 单位:微秒 */ - public void onProgress(int progress) { + public void onProgress(int progress, long progressTime) { if (ffmpegListener != null) { - ffmpegListener.onProgress(progress); + ffmpegListener.onProgress(progress, progressTime); } } @@ -174,8 +175,9 @@ public void onCancel() { * @param message */ public void onError(String message) { - if (ffmpegListener != null) + if (ffmpegListener != null) { ffmpegListener.onError(message); + } } public IFFmpegListener getFFmpegListener() { @@ -195,13 +197,32 @@ public void setFFmpegListener(IFFmpegListener ffmpegListener) { * IFFmpegListener监听接口 */ public interface IFFmpegListener { - void onFinish(); - void onProgress(int progress); + /** + * 执行完成 + */ + void onFinish(); + /** + * 进度回调 + * + * @param progress 执行进度 + * @param progressTime 执行的时间,相对于总时间 单位:微秒 + */ + void onProgress(int progress, long progressTime); + + /** + * 执行取消 + */ void onCancel(); + /** + * 执行出错 + * + * @param message + */ void onError(String message); + } } diff --git a/rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegProgress.java b/rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegProgress.java new file mode 100644 index 0000000..5a8d34b --- /dev/null +++ b/rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegProgress.java @@ -0,0 +1,30 @@ +package io.microshow.rxffmpeg; + +/** + * 进度封装 + */ +public class RxFFmpegProgress { + + public int state = 0; + + /** + * 执行进度 + */ + public int progress; + + /** + * 执行的时间,相对于总时间 单位:微秒 + */ + public long progressTime; + + public RxFFmpegProgress(int state, int progress, long progressTime) { + this.state = state; + this.progress = progress; + this.progressTime = progressTime; + } + + public RxFFmpegProgress(int state) { + this(state, 0, 0); + } + +} diff --git a/rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegSubscriber.java b/rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegSubscriber.java index f9a6f01..a5da803 100644 --- a/rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegSubscriber.java +++ b/rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegSubscriber.java @@ -6,19 +6,24 @@ * RxFFmpegSubscriber rxjava 回调 * Created by Super on 2019/1/12. */ -public abstract class RxFFmpegSubscriber extends DisposableSubscriber implements RxFFmpegInvoke.IFFmpegListener { +public abstract class RxFFmpegSubscriber extends DisposableSubscriber implements RxFFmpegInvoke.IFFmpegListener { /** * 取消状态 */ public static int STATE_CANCEL = -100; + /** + * 正常执行 + */ + public static int STATE_PROGRESS = 100; + @Override - public void onNext(Integer progress) { - if (progress == STATE_CANCEL) {//取消状态 + public void onNext(RxFFmpegProgress mProgress) { + if (mProgress.state == STATE_CANCEL) {//取消状态 onCancel(); } else {//进度回调 - onProgress(progress); + onProgress(mProgress.progress, mProgress.progressTime); } }