2017-10-14 1 views
1

アプリ内で動画を記録するアンドロイドアプリを開発しています。 ビデオをよく記録し、ファイルに保存します。 startpreview関数が失敗し、記録中にプレビューが表示されません。Androidカメラの記録は良好ですが、startPreviewは失敗します。

これはコードです:

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) { 

     } 


    } 

私はインターネットでほとんどの例で見たように、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(); 

    } 
} 

答えて

0

setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERSを試してみてください)カメラのあなたのホルダーSurfaceView

+1

のための私はのonCreateに活動の()イベントを、それをすでに使用しています。 – siavash

関連する問題