终于完成啦
This commit is contained in:
parent
3577804f1d
commit
1cdc139d0c
@ -256,7 +256,6 @@ public class CircleButtonView extends View{
|
||||
mProgressAni.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
|
||||
@Override
|
||||
public void onAnimationUpdate(ValueAnimator animation) {
|
||||
Log.d("getAnimatedValue===>"+animation.getAnimatedValue());
|
||||
mCurrentProgress= getDuration ((float)animation.getAnimatedValue());
|
||||
invalidate();
|
||||
}
|
||||
|
@ -4,6 +4,7 @@ import android.app.Activity;
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.media.MediaPlayer;
|
||||
import android.os.Bundle;
|
||||
import android.view.MotionEvent;
|
||||
import android.view.SurfaceView;
|
||||
@ -21,6 +22,7 @@ import com.mabeijianxi.smallvideorecord2.model.MediaObject;
|
||||
import com.mabeijianxi.smallvideorecord2.model.MediaRecorderConfig;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.net.URI;
|
||||
|
||||
/**
|
||||
@ -28,7 +30,13 @@ import java.net.URI;
|
||||
*/
|
||||
public class MediaRecorderActivity extends Activity implements
|
||||
MediaRecorderBase.OnErrorListener, OnClickListener, MediaRecorderBase.OnPreparedListener,
|
||||
MediaRecorderBase.OnEncodeListener, CircleButtonView.OnLongClickListener {
|
||||
MediaRecorderBase.OnEncodeListener, CircleButtonView.OnLongClickListener,
|
||||
MediaPlayer.OnPreparedListener,
|
||||
MediaPlayer.OnCompletionListener,
|
||||
MediaPlayer.OnErrorListener,
|
||||
MediaPlayer.OnInfoListener,
|
||||
MediaPlayer.OnSeekCompleteListener,
|
||||
MediaPlayer.OnVideoSizeChangedListener{
|
||||
|
||||
private int RECORD_TIME_MIN = (int) (1.5f * 1000);
|
||||
/**
|
||||
@ -63,6 +71,7 @@ public class MediaRecorderActivity extends Activity implements
|
||||
*/
|
||||
private SurfaceView mSurfaceView;
|
||||
|
||||
|
||||
/**
|
||||
* SDK视频录制对象
|
||||
*/
|
||||
@ -72,6 +81,8 @@ public class MediaRecorderActivity extends Activity implements
|
||||
*/
|
||||
private MediaObject mMediaObject;
|
||||
|
||||
private MediaPlayer mPlayer;
|
||||
|
||||
/**
|
||||
* 视屏地址
|
||||
*/
|
||||
@ -262,8 +273,8 @@ public class MediaRecorderActivity extends Activity implements
|
||||
mRecordLed.setEnabled(true);
|
||||
}
|
||||
|
||||
private void setPreviewUI(){
|
||||
//TODO 预览界面
|
||||
private void setPreviewUI() throws IOException {
|
||||
mMediaRecorder.stopPreview();
|
||||
mCameraSwitch.setVisibility(View.INVISIBLE);
|
||||
mRecordLed.setVisibility(View.INVISIBLE);
|
||||
mRecordController.setVisibility(View.INVISIBLE);
|
||||
@ -271,6 +282,24 @@ public class MediaRecorderActivity extends Activity implements
|
||||
|
||||
redoButton.setVisibility(View.VISIBLE);
|
||||
okButton.setVisibility(View.VISIBLE);
|
||||
|
||||
if(mPlayer == null){
|
||||
mPlayer = new MediaPlayer();
|
||||
mPlayer.setOnCompletionListener(this);
|
||||
mPlayer.setOnErrorListener(this);
|
||||
mPlayer.setOnInfoListener(this);
|
||||
mPlayer.setOnPreparedListener(this);
|
||||
mPlayer.setOnSeekCompleteListener(this);
|
||||
mPlayer.setOnVideoSizeChangedListener(this);
|
||||
mPlayer.setDisplay(mSurfaceView.getHolder());
|
||||
mPlayer.reset();
|
||||
}
|
||||
File file = new File(mMediaObject.getOutputTempTranscodingVideoPath());
|
||||
Log.i("player - file",mMediaObject.getOutputTempTranscodingVideoPath());
|
||||
Log.i("player - size",""+file.length());
|
||||
mPlayer.setDataSource(mMediaObject.getOutputTempTranscodingVideoPath());
|
||||
//使用手机本地视频
|
||||
mPlayer.prepareAsync();
|
||||
}
|
||||
|
||||
private void setRecordUI(){
|
||||
@ -278,7 +307,7 @@ public class MediaRecorderActivity extends Activity implements
|
||||
mRecordLed.setVisibility(View.VISIBLE);
|
||||
mRecordController.setVisibility(View.VISIBLE);
|
||||
mTitleBack.setVisibility(View.VISIBLE);
|
||||
|
||||
mSurfaceView.setVisibility(View.VISIBLE);
|
||||
redoButton.setVisibility(View.INVISIBLE);
|
||||
okButton.setVisibility(View.INVISIBLE);
|
||||
}
|
||||
@ -294,6 +323,8 @@ public class MediaRecorderActivity extends Activity implements
|
||||
part.remove = true;
|
||||
}
|
||||
}
|
||||
mPlayer.reset();
|
||||
mMediaRecorder.startPreview();
|
||||
}
|
||||
|
||||
private void done(){
|
||||
@ -378,10 +409,12 @@ public class MediaRecorderActivity extends Activity implements
|
||||
|
||||
@Override
|
||||
public void onEncodeStart() {
|
||||
Log.d("EncodeStart");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onEncodeProgress(int progress) {
|
||||
Log.d("onEncodeProgress:"+progress);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -390,6 +423,7 @@ public class MediaRecorderActivity extends Activity implements
|
||||
@Override
|
||||
public void onEncodeComplete() {
|
||||
this.completed = true;
|
||||
Log.d("onEncodeComplete");
|
||||
}
|
||||
|
||||
/**
|
||||
@ -397,6 +431,7 @@ public class MediaRecorderActivity extends Activity implements
|
||||
*/
|
||||
@Override
|
||||
public void onEncodeError() {
|
||||
Log.e("onEncodeError");
|
||||
Toast.makeText(this, getString(getId("record_video_transcoding_faild", "string")),
|
||||
Toast.LENGTH_SHORT).show();
|
||||
finish();
|
||||
@ -404,32 +439,32 @@ public class MediaRecorderActivity extends Activity implements
|
||||
|
||||
@Override
|
||||
public void onVideoError(int what, int extra) {
|
||||
|
||||
Log.e("onVideoError");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onAudioError(int what, String message) {
|
||||
|
||||
Log.e("onAudioError");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepared() {
|
||||
Log.d("onPrepared");
|
||||
initSurfaceView();
|
||||
}
|
||||
|
||||
public void onFinished() {
|
||||
finish();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDestroy() {
|
||||
super.onDestroy();
|
||||
mMediaRecorder.release();
|
||||
if(mMediaRecorder != null){
|
||||
mMediaRecorder.release();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onStop() {
|
||||
super.onStop();
|
||||
Log.d("onStop");
|
||||
if (mMediaRecorder instanceof MediaRecorderNative) {
|
||||
((MediaRecorderNative) mMediaRecorder).activityStop();
|
||||
}
|
||||
@ -460,6 +495,45 @@ public class MediaRecorderActivity extends Activity implements
|
||||
Log.d("onRecordFinishedListener:拍摄完成");
|
||||
startState = false;
|
||||
stopRecord();
|
||||
setPreviewUI();
|
||||
try {
|
||||
setPreviewUI();
|
||||
} catch (IOException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCompletion(MediaPlayer mp) {
|
||||
Log.d("player onCompletion");
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onError(MediaPlayer mp, int what, int extra) {
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onInfo(MediaPlayer mp, int what, int extra) {
|
||||
Log.d("player onInfo");
|
||||
return false;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onPrepared(MediaPlayer mp) {
|
||||
Log.d("player onPrepared");
|
||||
if(mPlayer !=null) {
|
||||
mPlayer.setLooping(true);
|
||||
mPlayer.start();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onSeekComplete(MediaPlayer mp) {
|
||||
Log.d("player onSeekComplete");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
|
||||
Log.d("player onVideoSizeChanged");
|
||||
}
|
||||
}
|
||||
|
@ -430,6 +430,10 @@ public abstract class MediaRecorderBase implements Callback, PreviewCallback, IM
|
||||
startPreview();
|
||||
}
|
||||
|
||||
public void reset(){
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* 设置视频临时存储文件夹
|
||||
*
|
||||
@ -558,11 +562,9 @@ public abstract class MediaRecorderBase implements Callback, PreviewCallback, IM
|
||||
// mParameters.setPreviewFpsRange(15 * 1000, 20 * 1000);
|
||||
// TODO 设置浏览尺寸
|
||||
boolean findWidth = false;
|
||||
Log.d("screenHeight: " + screenHeight + ", screenWidth: " + screenWidth + ", ratio: " + (1.0d * screenHeight / screenWidth));
|
||||
double ratio = 1.0d * screenHeight / screenWidth;
|
||||
for (int i = mSupportedPreviewSizes.size() - 1; i >= 0; i--) {
|
||||
Size size = mSupportedPreviewSizes.get(i);
|
||||
Log.d("width: " + size.width + ", height: " + size.height + ", ratio: " + (1.0d * size.width / size.height) + ", target: " + ratio);
|
||||
if (size.height >= SMALL_VIDEO_HEIGHT && (1.0d * size.width / size.height) == ratio) {
|
||||
mSupportedPreviewWidth = size.width;
|
||||
checkFullWidth(mSupportedPreviewWidth,SMALL_VIDEO_WIDTH);
|
||||
|
@ -9,6 +9,8 @@ import android.util.Log;
|
||||
import com.mabeijianxi.smallvideorecord2.jniinterface.FFmpegBridge;
|
||||
import com.mabeijianxi.smallvideorecord2.model.MediaObject;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
|
||||
/**
|
||||
* 视频录制:边录制边底层处理视频(旋转和裁剪)
|
||||
@ -35,7 +37,12 @@ public class MediaRecorderNative extends MediaRecorderBase implements MediaRecor
|
||||
} else {
|
||||
vCustomFormat=FFmpegBridge.ROTATE_270_CROP_LT_MIRROR_LR;
|
||||
}
|
||||
|
||||
File file = new File(mMediaObject.getOutputDirectory());
|
||||
if(!file.exists() || !file.isDirectory() || !file.delete()){
|
||||
file.mkdirs();
|
||||
}
|
||||
Log.d("output",file.getAbsolutePath());
|
||||
Log.d("output-files",""+file.listFiles());
|
||||
FFmpegBridge.prepareJXFFmpegEncoder( mMediaObject.getOutputDirectory(), mMediaObject.getBaseName(),vCustomFormat, mSupportedPreviewWidth, SMALL_VIDEO_HEIGHT, SMALL_VIDEO_WIDTH, SMALL_VIDEO_HEIGHT, mFrameRate, mVideoBitrate);
|
||||
|
||||
MediaObject.MediaPart result = null;
|
||||
|
Loading…
x
Reference in New Issue
Block a user