【问题标题】:Android Camera records well but startPreview failsAndroid 相机记录良好,但 startPreview 失败
【发布时间】:2017-10-14 15:46:09
【问题描述】:

我正在开发一个在应用内录制视频的安卓应用。 它可以很好地录制视频并保存在文件中。但启动预览功能失败,录制过程中没有预览。

这是代码:

private  void startVRec(){
        //final View view = inflater.inflate(R.layout.fragment_conversation, container, false);
        try {

            vrec = new MediaRecorder();
            mCamera = Camera.open();
             params = mCamera.getParameters();
            Camera.Size size=getOptimalPreviewSize(params.getSupportedPreviewSizes(), 240, 240);
            params.setPreviewSize(size.height, size.width);
            mCamera.setParameters(params);
            vrec.setPreviewDisplay(surfaceHolder.getSurface());
           mCamera.unlock();
            vrec.setCamera(mCamera);
            camera_layout.setVisibility(View.VISIBLE);
            surfaceView.setVisibility(View.VISIBLE);
        } catch (Exception e) {

        }


    }

正如我在 internet 的大多数示例中看到的,startpreview 函数是在 surfaceChanged 事件上调用的:

 @Override
        public void surfaceChanged(SurfaceHolder holder, int format, int width,
                                   int height) {

            //Camera.Size previewSize=null;
            try {

                if (mCamera != null)
                {
                    Camera.Size 
                   size=getOptimalPreviewSize(params.getSupportedPreviewSizes(), 240, 240);
                    params.setPreviewSize(size.height, size.width);
                    mCamera.setParameters(params);
                    mCamera.startPreview();
                }
            } catch (Exception e) {
                Toast.makeText(activity, "error "+ e.getMessage(), Toast.LENGTH_LONG).show();
            }
        }

它开始在surfaceCreated事件上录制

public void surfaceCreated(SurfaceHolder holder) { if (mCamera != null){

        try {

            vrec.setVideoSource(MediaRecorder.VideoSource.CAMERA);
            vrec.setAudioSource(MediaRecorder.AudioSource.MIC);
            vrec.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            vrec.setVideoFrameRate(30);
            vrec.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
            vrec.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
            vrec.setPreviewDisplay(surfaceHolder.getSurface());
            vrec.setOutputFile(FileBackend.getConversationsImageDirectory() + System.currentTimeMillis() + ".mp4");
            vrec.prepare();

            vrec.start();

        }
       catch(IllegalStateException e2){
                Toast.makeText(activity,"err cam stop ill :"+ e2.getMessage(),Toast.LENGTH_LONG).show();
            }

         catch (Exception e) {
            Toast.makeText(activity,"err surface created :"+ e.getMessage(),Toast.LENGTH_LONG).show();
        }

    }
    else {
        Toast.makeText(activity, "Camera not available!", Toast.LENGTH_LONG).show();

    }
}

【问题讨论】:

    标签: android video camera mediarecorder


    【解决方案1】:

    试试setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS) 为您的相机 SurfaceView 支架

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-13
      • 1970-01-01
      • 2019-08-12
      • 2016-04-05
      • 1970-01-01
      • 2023-03-24
      相关资源
      最近更新 更多