Browse Source

修复录制视频过程中,收到音视频通话邀请时,会出现崩溃 fix #913

imndx 5 months ago
parent
commit
871c0d7ac2

+ 2 - 0
cameraview/src/main/java/com/cjt2325/cameralibrary/CameraInterface.java

@@ -645,8 +645,10 @@ public class CameraInterface implements Camera.PreviewCallback {
             }
             if (isShort) {
                 if (FileUtil.deleteFile(videoFileAbsPath)) {
+                    if(callback != null){
                     callback.recordResult(null, null);
                 }
+                }
                 return;
             }
             doStopPreview();

+ 4 - 0
cameraview/src/main/java/com/cjt2325/cameralibrary/CaptureButton.java

@@ -364,5 +364,9 @@ public class CaptureButton extends View {
     //设置状态
     public void resetState() {
         state = STATE_IDLE;
+        button_outside_radius = button_radius;
+        button_inside_radius = button_radius * 0.75f;
+        progress = 0;
+        timer.cancel();
     }
 }

+ 21 - 13
cameraview/src/main/java/com/cjt2325/cameralibrary/JCameraView.java

@@ -8,7 +8,6 @@ import android.graphics.Bitmap;
 import android.hardware.Camera;
 import android.media.AudioManager;
 import android.media.MediaPlayer;
-import android.os.Build;
 import android.util.AttributeSet;
 import android.util.Log;
 import android.util.TypedValue;
@@ -21,8 +20,6 @@ import android.widget.FrameLayout;
 import android.widget.ImageView;
 import android.widget.VideoView;
 
-import androidx.annotation.RequiresApi;
-
 import com.cjt2325.cameralibrary.listener.CaptureListener;
 import com.cjt2325.cameralibrary.listener.ClickListener;
 import com.cjt2325.cameralibrary.listener.ErrorListener;
@@ -46,8 +43,8 @@ import java.io.IOException;
  * =====================================
  */
 public class JCameraView extends FrameLayout implements CameraInterface.CameraOpenOverCallback, SurfaceHolder
-        .Callback, CameraView {
-//    private static final String TAG = "JCameraView";
+    .Callback, CameraView {
+    private static final String TAG = "JCameraView";
 
     //Camera状态机
     private CameraMachine machine;
@@ -129,9 +126,9 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp
         //get AttributeSet
         TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.JCameraView, defStyleAttr, 0);
         iconSize = a.getDimensionPixelSize(R.styleable.JCameraView_iconSize, (int) TypedValue.applyDimension(
-                TypedValue.COMPLEX_UNIT_SP, 35, getResources().getDisplayMetrics()));
+            TypedValue.COMPLEX_UNIT_SP, 35, getResources().getDisplayMetrics()));
         iconMargin = a.getDimensionPixelSize(R.styleable.JCameraView_iconMargin, (int) TypedValue.applyDimension(
-                TypedValue.COMPLEX_UNIT_SP, 15, getResources().getDisplayMetrics()));
+            TypedValue.COMPLEX_UNIT_SP, 15, getResources().getDisplayMetrics()));
         iconSrc = a.getResourceId(R.styleable.JCameraView_iconSrc, R.drawable.ic_camera);
         iconLeft = a.getResourceId(R.styleable.JCameraView_iconLeft, 0);
         iconRight = a.getResourceId(R.styleable.JCameraView_iconRight, 0);
@@ -250,8 +247,8 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp
         mCaptureLayout.setLeftClickListener(new ClickListener() {
             @Override
             public void onClick() {
-                if (leftClickListener != null) {
-                    leftClickListener.onClick();
+                if (jCameraLisenter != null) {
+                    jCameraLisenter.quit();
                 }
             }
         });
@@ -294,6 +291,7 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp
         LogUtil.i("JCameraView onPause");
         stopVideo();
         resetState(TYPE_PICTURE);
+        CameraInterface.getInstance().stopRecord(true, null);
         CameraInterface.getInstance().isPreview(false);
         CameraInterface.getInstance().unregisterSensorManager(mContext);
     }
@@ -346,7 +344,7 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp
                     float point_2_Y = event.getY(1);
 
                     float result = (float) Math.sqrt(Math.pow(point_1_X - point_2_X, 2) + Math.pow(point_1_Y -
-                            point_2_Y, 2));
+                        point_2_Y, 2));
 
                     if (firstTouch) {
                         firstTouchLength = result;
@@ -486,10 +484,13 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp
         videoUrl = url;
         JCameraView.this.firstFrame = firstFrame;
         new Thread(new Runnable() {
-            @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
             @Override
             public void run() {
                 try {
+                    if (!mVideoView.getHolder().getSurface().isValid()) {
+                        LogUtil.e(TAG, "Surface is not valid");
+                        return;
+                    }
                     if (mMediaPlayer == null) {
                         mMediaPlayer = new MediaPlayer();
                     } else {
@@ -500,12 +501,12 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp
                     mMediaPlayer.setVideoScalingMode(MediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT);
                     mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                     mMediaPlayer.setOnVideoSizeChangedListener(new MediaPlayer
-                            .OnVideoSizeChangedListener() {
+                        .OnVideoSizeChangedListener() {
                         @Override
                         public void
                         onVideoSizeChanged(MediaPlayer mp, int width, int height) {
                             updateVideoViewSize(mMediaPlayer.getVideoWidth(), mMediaPlayer
-                                    .getVideoHeight());
+                                .getVideoHeight());
                         }
                     });
                     mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@@ -514,6 +515,13 @@ public class JCameraView extends FrameLayout implements CameraInterface.CameraOp
                             mMediaPlayer.start();
                         }
                     });
+                    mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() {
+                        @Override
+                        public boolean onError(MediaPlayer mp, int what, int extra) {
+                            LogUtil.e(TAG, "onError: " + what + ", " + extra);
+                            return false;
+                        }
+                    });
                     mMediaPlayer.setLooping(true);
                     mMediaPlayer.prepare();
                 } catch (IOException e) {

+ 2 - 0
cameraview/src/main/java/com/cjt2325/cameralibrary/listener/JCameraListener.java

@@ -16,4 +16,6 @@ public interface JCameraListener {
 
     void recordSuccess(String url, Bitmap firstFrame);
 
+    void quit();
+
 }

+ 7 - 0
uikit/src/main/java/cn/wildfire/chat/kit/mm/TakePhotoActivity.java

@@ -77,6 +77,13 @@ public class TakePhotoActivity extends AppCompatActivity {
                 setResult(RESULT_OK, data);
                 finish();
             }
+
+            @Override
+            public void quit() {
+                //点击返回按钮
+                setResult(RESULT_CANCELED);
+                finish();
+            }
         });
     }