android recording a video, initializing the camera

匿名 (未验证) 提交于 2019-12-03 01:05:01

问题:

public class FulfillVideoTaskActivity extends Activity implements SurfaceHolder.Callback, OnInfoListener, OnErrorListener{  private Button initBtn = null; private Button startBtn = null; private Button stopBtn = null; private Button playBtn = null; private Button stopPlayBtn = null; // save Button should be implemented private TextView recordingMsg = null; private VideoView videoView = null; private SurfaceHolder holder = null; private Camera camera = null; private static final String TAG ="RecordVideo"; private MediaRecorder recorder = null; private String outputFileName;    @Override public void onCreate(Bundle savedInstanceState) {     super.onCreate(savedInstanceState);     setContentView(R.layout.activity_fulfill_video_task);      // get references to UI elements     initBtn = (Button) findViewById(R.id.initBtn);     startBtn = (Button) findViewById(R.id.startBtn);     stopBtn = (Button) findViewById(R.id.stopBtn);     playBtn = (Button) findViewById(R.id.playBtn);     stopPlayBtn = (Button) findViewById(R.id.stopPlayBtn);     recordingMsg = (TextView) findViewById(R.id.recording);     videoView = (VideoView)this.findViewById(R.id.videoView);   }  public void buttonTapped(View view) {     switch(view.getId()) {     case R.id.initBtn:         initRecorder();         break;     case R.id.startBtn:         beginRecording();         break;     case R.id.stopBtn:         stopRecording();         break;     case R.id.playBtn:         playRecording();         break;     case R.id.stopPlayBtn:         stopPlayback();         break;     } } private void stopPlayback() {     videoView.stopPlayback();  }  private void playRecording() {     MediaController mc = new MediaController(this);     videoView.setMediaController(mc);     videoView.setVideoPath(outputFileName);     videoView.start();     stopPlayBtn.setEnabled(true);  }  private void stopRecording() {     if(recorder != null) {         recorder.setOnErrorListener(null);         recorder.setOnInfoListener(null);         try {             recorder.stop();          }         catch(IllegalStateException e) {             //this can happen if the recorder has already stopped.             Log.e(TAG, "Got IllegalStateException in stopRecording");          }         releaseRecorder();         recordingMsg.setText("");         releaseCamera();         startBtn.setEnabled(false);         stopBtn.setEnabled(false);         playBtn.setEnabled(true);      }   }   private void releaseCamera() {     if(camera != null) {         try {             camera.reconnect();          } catch (IOException e) {             e.printStackTrace();         }         camera.release();         camera = null;      }  }  private void releaseRecorder() {     if(recorder != null) {         recorder.release();         recorder = null;     }  }  private void beginRecording() {     recorder.setOnInfoListener(this);     recorder.setOnErrorListener(this);     recorder.start();     recordingMsg.setText("RECORDING");     startBtn.setEnabled(false);     stopBtn.setEnabled(true);  }  // Initialize the recorder private void initRecorder() {     if(recorder != null) return;      // The place where the video will be saved.     outputFileName = Environment.getExternalStorageDirectory() + "/videooutput.mp4";      File outFile = new File(outputFileName);     //if File already exists, we delete it      if(outFile.exists())         outFile.delete();      try{         camera.stopPreview();         camera.unlock();         recorder = new MediaRecorder();         recorder.setCamera(camera);          recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);         recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);         recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);         recorder.setVideoSize(280, 200);         recorder.setVideoFrameRate(15);         recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);         recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);         recorder.setMaxDuration(10000); // limit to 10 seconds         recorder.setPreviewDisplay(holder.getSurface());         recorder.setOutputFile(outputFileName); // setting our output file to our FileName          recorder.prepare();         Log.v(TAG, "MediaRecorder initialized");         initBtn.setEnabled(false);         startBtn.setEnabled(true);      }     //error checking      catch(Exception e) {         Log.v(TAG, "MediaRecorder failed to initialize");         e.printStackTrace();      } }  @Override public boolean onCreateOptionsMenu(Menu menu) {     getMenuInflater().inflate(R.menu.activity_fulfill_video_task, menu);     return true; }  public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {     // TODO Auto-generated method stub  }  public void surfaceCreated(SurfaceHolder holder) {     Log.v(TAG, "in sufaceCreated");      try {         camera.setPreviewDisplay(holder);         camera.startPreview();      }catch (IOException e) {         Log.v(TAG, "Could not start the preview");         e.printStackTrace();      }     initBtn.setEnabled(true);  }  public void surfaceDestroyed(SurfaceHolder holder) {     // TODO Auto-generated method stub  }  public void onError(MediaRecorder mr, int what, int extra) {     Log.e(TAG, "got a recording error");     stopRecording();     Toast.makeText(this, "Recording error has occurred. Stopping the recording", Toast.LENGTH_SHORT).show();  }  public void onInfo(MediaRecorder mr, int what, int extra) {     Log.i(TAG, "got a recording event");     if(what == MediaRecorder.MEDIA_RECORDER_INFO_MAX_DURATION_REACHED) {         Log.i(TAG, "...max duration reached");         stopRecording();         Toast.makeText(this, "Recording limit has been reached. Stopping the recording", Toast.LENGTH_SHORT).show();      }   }  // disable the buttons until the camera is initialized protected void onResume() {     Log.v(TAG, "in onResume");     super.onResume();     initBtn.setEnabled(false);     startBtn.setEnabled(false);     stopBtn.setEnabled(false);     playBtn.setEnabled(false);     stopPlayBtn.setEnabled(false);     if(!initCamera())         finish();  }  // initializes the camera   private boolean initCamera() {     try {         camera = Camera.open();         Camera.Parameters camParams = camera.getParameters();         camera.lock();         holder = videoView.getHolder();         holder.addCallback(this);         holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);      }     catch(RuntimeException re) {         Log.v(TAG, "Could not initialize the Camera");         re.printStackTrace();         return false;     }     return true; } 

}

Hi, I'm trying to record a video on android right now, when I run my code (the whole code above), the camera can't be initialized. I guess I have an error in the following part.

private boolean initCamera() {     try {         camera = Camera.open();         Camera.Parameters camParams = camera.getParameters();         camera.lock();         holder = videoView.getHolder();         holder.addCallback(this);         holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);      }     catch(RuntimeException re) {         Log.v(TAG, "Could not initialize the Camera");         re.printStackTrace();         return false;     }     return true; } 

holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); this line in this code gets multiple markers, saying

  • The method setType(int) from the type SurfaceHolder is deprecated
  • The field SURFACE_TYPE_PUSH_BUFFERS is deprecated

Does anyone know the reason why I'm getting this?

回答1:

Try this code

first

   setRecorder() ;    SurfaceView  videoShootSurfaceView = (SurfaceView) findViewById(R.id.shootVideosurfaceView_VSD);       SurfaceHolder videoSurfaceHolder = videoShootSurfaceView.getHolder();     videoSurfaceHolder.addCallback(this);     videoSurfaceHolder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 

set the recorder type

    public void setRecorder() {     recorder = new MediaRecorder();     recorder.setAudioSource(MediaRecorder.AudioSource.MIC);     recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);     recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);     recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);     // recorder.setVideoSize(640, 480);     recorder.setVideoSize(320, 240);     // recorder.setVideoSize(480, 320);     // recorder.setVideoSize(176, 144);     recorder.setVideoFrameRate(15);     // recorder.setMaxDuration(3600000);     recorder.setMaxDuration(300000);     recorder.setOutputFile("/sdcard/videocapture_example.mp4"); } 

override this methhod.

    @Override public void surfaceCreated(SurfaceHolder holder) {     camera = Camera.open();     recorder.setPreviewDisplay(holder.getSurface());     if (recorder != null) {         try {             recorder.prepare();         } catch (IllegalStateException e) {             Log.e("IllegalStateException", e.toString());         } catch (IOException e) {             Log.e("IOException", e.toString());         }     } } 

To start the recording

    public void startRecording() {     setRecorder();     recorder.setPreviewDisplay(recoderTempHolder.getSurface());     if (recorder != null) {         try {             recorder.prepare();             recorder.start();         } catch (IllegalStateException e) {             Log.e("IllegalStateException", e.toString());         } catch (IOException e) {             Log.e("IOException", e.toString());         }     }  } 

To stop the recording

  public void stopRecording() {      recorder.stop();     // recorder.reset();     recorder.release();  } 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!