Skip to content

Commit

Permalink
进度回调新增已处理视频时间
Browse files Browse the repository at this point in the history
  • Loading branch information
microshow committed Aug 3, 2019
1 parent 10d63cc commit 2d8f460
Show file tree
Hide file tree
Showing 9 changed files with 104 additions and 36 deletions.
18 changes: 12 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -99,7 +99,7 @@ allprojects {
```groovy
dependencies {
implementation 'com.github.microshow:RxFFmpeg:2.0.0'
implementation 'com.github.microshow:RxFFmpeg:2.1.0'
}
```
Expand Down Expand Up @@ -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);
}
});
Expand Down
30 changes: 18 additions & 12 deletions app/src/main/java/io/microshow/rxffmpegdemo/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand All @@ -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;
Expand All @@ -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();
}
}
});

}
}

Expand All @@ -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);
}
});
Expand All @@ -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));
}

}
4 changes: 2 additions & 2 deletions configs.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ ext {
//支持包版本
supportLibValue = "28.0.0"
//应用 versionCode
versionCodeValue = 200
versionCodeValue = 210
//应用 version 名称,更多设置里显示的
versionNameValue = "2.0.0"
versionNameValue = "2.1.0"

}
Binary file modified preview/app-debug.apk
Binary file not shown.
Binary file modified rxffmpeg/libs/arm64-v8a/librxffmpeg-invoke.so
Binary file not shown.
Binary file modified rxffmpeg/libs/armeabi-v7a/librxffmpeg-invoke.so
Binary file not shown.
45 changes: 33 additions & 12 deletions rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegInvoke.java
Original file line number Diff line number Diff line change
Expand Up @@ -85,25 +85,25 @@ public int runCommand(final String[] command, IFFmpegListener mffmpegListener) {
* @param command
* @return
*/
public Flowable<Integer> runCommandRxJava(final String[] command) {
return Flowable.create(new FlowableOnSubscribe<Integer>() {
public Flowable<RxFFmpegProgress> runCommandRxJava(final String[] command) {
return Flowable.create(new FlowableOnSubscribe<RxFFmpegProgress>() {
@Override
public void subscribe(final FlowableEmitter<Integer> emitter) {
public void subscribe(final FlowableEmitter<RxFFmpegProgress> emitter) {
setFFmpegListener(new RxFFmpegInvoke.IFFmpegListener() {
@Override
public void onFinish() {
emitter.onComplete();
}

@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
Expand Down Expand Up @@ -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);
}
}

Expand Down Expand Up @@ -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() {
Expand All @@ -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);

}

}
30 changes: 30 additions & 0 deletions rxffmpeg/src/main/java/io/microshow/rxffmpeg/RxFFmpegProgress.java
Original file line number Diff line number Diff line change
@@ -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);
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -6,19 +6,24 @@
* RxFFmpegSubscriber rxjava 回调
* Created by Super on 2019/1/12.
*/
public abstract class RxFFmpegSubscriber extends DisposableSubscriber<Integer> implements RxFFmpegInvoke.IFFmpegListener {
public abstract class RxFFmpegSubscriber extends DisposableSubscriber<RxFFmpegProgress> 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);
}
}

Expand Down

0 comments on commit 2d8f460

Please sign in to comment.