//单机拍找,长按录制 44star
implementation 'com.lxj:matisse:+'
https://github.com/li-xiaojun/Matisse
1 开启拍摄视频
private void startREC() {
Matisse.from(activity)
.jumpCapture()
.isCrop(false)//是否对拍照结果进行裁剪
.forResult(Constans.REQUEST_CODE_CHOOSE);
}
2 视频完返回
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == Constans.REQUEST_CODE_CHOOSE && resultCode == RESULT_OK) {
//获取拍摄的图片路径,如果是录制视频则是视频的第一帧图片路径
String captureImagePath = Matisse.obtainCaptureImageResult(data);
//获取拍摄的视频路径
String captureVideoPath = Matisse.obtainCaptureVideoResult(data);
if (TextUtils.isEmpty(captureVideoPath)) {
ArrayList<String> images = new ArrayList<>();
images.add(captureImagePath);
PublishCountrySideDynamicActivity2.create(this, images, null, null);//不是视频
} else {
// PublishCountrySideDynamicActivity2.create(this, null, captureImagePath, captureVideoPath);
VideoTrimmerActivity.call(this, captureVideoPath, true);//视频-转入详情压缩界面
}
} else if (requestCode == Constans.REQUSET) {
initView();
}
}
3 压缩界面
public class VideoTrimmerActivity extends BaseActivity implements VideoTrimListener {
private static final String TAG = "jason";
private static final String VIDEO_PATH_KEY = "video-file-path";
private static final String COMPRESSED_VIDEO_FILE_NAME = "compress.mp4";
public static final int VIDEO_TRIM_REQUEST_CODE = 0x001;
@BindView(R.id.trimmer_view)
VideoTrimmerView trimmerView;
private ProgressDialog mProgressDialog;
private boolean isStartActivity;
public static void call(FragmentActivity from, String videoPath, boolean isStartActivity) {
if (!TextUtils.isEmpty(videoPath)) {
Bundle bundle = new Bundle();
bundle.putString(VIDEO_PATH_KEY, videoPath);
bundle.putBoolean("isStartActivity", isStartActivity);
Intent intent = new Intent(from, VideoTrimmerActivity.class);
intent.putExtras(bundle);
from.startActivityForResult(intent, VIDEO_TRIM_REQUEST_CODE);
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_video_trim);
ButterKnife.bind(this);
Bundle bd = getIntent().getExtras();
String path = "";
if (bd != null) path = bd.getString(VIDEO_PATH_KEY);
isStartActivity = bd.getBoolean("isStartActivity", true);
if (trimmerView != null) {
trimmerView.setOnTrimVideoListener(this);
trimmerView.initVideoByURI(Uri.parse(path));
}
}
@Override
public void onResume() {
super.onResume();
}
@Override
public void onPause() {
super.onPause();
trimmerView.onVideoPause();
trimmerView.setRestoreState(true);
}
@Override
protected void onDestroy() {
super.onDestroy();
trimmerView.onDestroy();
}
@Override
public void onStartTrim() {
buildDialog(getResources().getString(R.string.trimming)).show();
}
@Override
public void onFinishTrim(final String in) {
if (mProgressDialog.isShowing()) mProgressDialog.dismiss();
// ToastUtils.showToast(this, getString(R.string.trimmed_done));
//TODO: please handle your trimmed video url here!!!
// String out = StorageUtil.getCacheDir() + File.separator + COMPRESSED_VIDEO_FILE_NAME;
System.out.println(in);
// compressVideo(this, in, out);
/*Intent intent = new Intent(this,PublishCountrySideDynamicActivity2.class);
intent.putExtra("vedioPath",out);
startActivity(intent);*/
//buildDialog(getResources().getString(R.string.compressing)).show();
//VideoCompressor.compress(this, in, out, new VideoCompressListener() {
// @Override public void onSuccess(String message) {
// }
//
// @Override public void onFailure(String message) {
// }
//.
// @Override public void onFinish() {
// if (mProgressDialog.isShowing()) mProgressDialog.dismiss();
// finish();
// }
//});
// 选择本地视频压缩
LocalMediaConfig.Buidler buidler = new LocalMediaConfig.Buidler();
final LocalMediaConfig config = buidler
.setVideoPath(in)
// .captureThumbnailsTime(1)
.doH264Compress(new AutoVBRMode())
.setFramerate(15)
.setScale(1.0f)
.build();
new Thread(new Runnable() {
@Override
public void run() {
runOnUiThread(new Runnable() {
@Override
public void run() {
buildDialog("压缩中...").show();
// showProgress("", "压缩中...", -1);
// DialogShow.showRoundProcessDialog(VideoTrimmerActivity.this,"压缩中...");
}
});
final OnlyCompressOverBean onlyCompressOverBean = new LocalMediaCompress(config).startCompress();
runOnUiThread(new Runnable() {
@Override
public void run() {
//hideProgress();
if (mProgressDialog.isShowing()) mProgressDialog.dismiss();
Message msg = Message.obtain();
msg.what = Constans.ACTIVITY_FINISH;
EventBus.getDefault().post(msg);
if (isStartActivity) {
Intent intent = new Intent(VideoTrimmerActivity.this, PublishCountrySideDynamicActivity2.class);
intent.putExtra("videoPath", onlyCompressOverBean.getVideoPath());
intent.putExtra("videoPicPath", onlyCompressOverBean.getPicPath());
startActivity(intent);
} else {
Message msg2 = Message.obtain();
msg2.what = Constans.SELECTED_VEDIO;
Bundle bundle = new Bundle();
bundle.putString("videoPath", onlyCompressOverBean.getVideoPath());
bundle.putString("videoPicPath", onlyCompressOverBean.getPicPath());
msg2.obj = bundle;
EventBus.getDefault().post(msg2);
}
finish();
}
});
}
}).start();
}
private void showProgress(String title, String message, int theme) {
if (mProgressDialog == null) {
if (theme > 0)
mProgressDialog = new ProgressDialog(this, theme);
else
mProgressDialog = new ProgressDialog(this);
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
mProgressDialog.setCanceledOnTouchOutside(false);// 不能取消
mProgressDialog.setCancelable(false);
mProgressDialog.setIndeterminate(true);// 设置进度条是否不明确
}
if (!TextUtils.isEmpty(title))
mProgressDialog.setTitle(title);
mProgressDialog.setMessage(message);
mProgressDialog.show();
}
private void hideProgress() {
if (mProgressDialog != null) {
mProgressDialog.dismiss();
}
}
@Override
public void onCancel() {
trimmerView.onDestroy();
finish();
}
private ProgressDialog buildDialog(String msg) {
if (mProgressDialog == null) {
mProgressDialog = ProgressDialog.show(this, "", msg);
}
mProgressDialog.setMessage(msg);
return mProgressDialog;
}
}
public interface VideoTrimListener {
void onStartTrim();
void onFinishTrim(String url);
void onCancel();
}
之后用七牛上传到七牛服务器,url上传服务器