2013-10-09 18 views
10

Attualmente sto sviluppando un'applicazione che ha bisogno di registrare video in background ed elaborarli.Come utilizzare la videocamera Android in background?

(di cui ha bisogno per ottenere di anteprima della fotocamera dati in tempo reale in background e deve elaborare l'immagine dei dati di anteprima)

Tuttavia, per realizzarlo, ho bisogno di usare fotocamera e OpenCV come servizio, e sembra che è impossibile utilizzare JavaCameraView in OpenCV e Android.Hardware.Camera senza utilizzare alcuna anteprima.

Ecco le mie domande.

  1. Ho sentito che NativeCamera in OpenCV può essere utilizzato per questo scopo. È possibile? (Possibilmente con esempi?)

  2. C'è qualche metodo che posso utilizzare JavaCameraView (o roba simile) per questo scopo? Attualmente utilizzo Galaxy S4.

  3. c'è qualche possibili soluzioni se Android non supporta tale metodo? (Uso di Camera di anteprima senza alcuna superficie vista, o la macchina fotografica di processo dei dati senza l'utilizzo di anteprima)

  4. (OPTIONAL) Perché l'androide non lo fa supportare tale operazione? È molto fastidioso!

Grazie per rispondere alla domanda.

+0

Ho la stessa situazione come te adesso. Hai qualche soluzione? –

+0

Possibile duplicato di [android - usa la fotocamera dal servizio in background] (http://stackoverflow.com/questions/6901542/android-use-camera-from-within-background-service) –

+1

https://github.com/ kevalpatel2106/android-hidden-camera: questa libreria offre un'interfaccia semplice per acquisire immagini dallo sfondo. –

risposta

0

È possibile utilizzare un servizio per avviare la fotocamera in background. È possibile fare riferimento a this. Spero che questo ti possa aiutare.

+0

Il problema è che il metodo comunemente utilizzato per l'implementazione della videocamera in Servizio non funziona. – EngineerCat

+0

Molte persone hanno suggerito di utilizzare Dummy Surfaceview o rendere la vista surfaceview praticamente invisibile (rendendola molto piccola), ma la vista fittizia non è riuscita per il mio dispositivo. Inoltre, la vista surfaceview non può essere utilizzata perché ho bisogno di sviluppare in modo tale che la fotocamera funzioni anche se navigo attraverso altre app (perché voglio applicarla per lo scopo dell'interfaccia utente basata sul movimento), e ciò causerà la vista della superfice (indipendentemente dalla dimensione) da distruggere. – EngineerCat

2

è possibile con i seguenti passaggi ..

Creare un'attività che avrà inizio il servizio di background su qualche evento o si può anche usare il responsabile di allarme per avviare e interrompere il servizio secondo il vostro requisito.

Vedere il codice seguente che ti aiuterà.

public boolean starMediaRecording(){ 
     Camera.Parameters params = mServiceCamera.getParameters(); 
     mServiceCamera.setParameters(params); 
     Camera.Parameters p = mServiceCamera.getParameters(); 

     final List<Size> listSize = p.getSupportedPreviewSizes(); 
     Size mPreviewSize = listSize.get(2); 
     p.setPreviewSize(mPreviewSize.width, mPreviewSize.height); 
     p.setPreviewFormat(PixelFormat.YCbCr_420_SP); 
     mServiceCamera.setParameters(p); 

     try { 
      mServiceCamera.setPreviewDisplay(mSurfaceHolder); 
      mServiceCamera.startPreview(); 
     } 
     catch (IOException e) { 
      Log.e(TAG, e.getMessage()); 
      e.printStackTrace(); 
     } 

     mServiceCamera.unlock(); 

     mMediaRecorder = new MediaRecorder(); 
     mMediaRecorder.setCamera(mServiceCamera); 
     mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
     mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
     mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
     mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT); 
     mMediaRecorder.setOutputFile("/sdcard/filenamevideo.mp4"); 
     mMediaRecorder.setVideoFrameRate(30); 
     mMediaRecorder.setVideoSize(mPreviewSize.width, mPreviewSize.height); 
     mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); 

     mMediaRecorder.prepare(); 
     mMediaRecorder.start(); 

     mRecordingStatus = true; 

     return true; 

} 

public void stopMediaRecorder() { 
    mServiceCamera.reconnect(); 

    mMediaRecorder.stop(); 
    mMediaRecorder.reset(); 

    mServiceCamera.stopPreview(); 
    mMediaRecorder.release(); 

    mServiceCamera.release(); 
    mServiceCamera = null; 
    } 
} 
Problemi correlati