2011-12-23 20 views
10

Uso Android 2.2 con Eclipse.Elaborazione video in Android

Vorrei creare un'applicazione che acquisisca il video e, per ciascun fotogramma, lo invii come bitmap a un metodo che lo elabora e restituisce una nuova bitmap e mostra la bitmap elaborata.

Non ho molta familiarità con Android, quindi per favore, qualcuno può inviarmi le risorse che ho bisogno di guardare per fare una cosa del genere?

risposta

20

E 'abbastanza semplice da realizzare le seguenti operazioni utilizzando l'SDK di Android:

  • catturare i fotogrammi di anteprima dal fotocamera come dati bitmap. Camera.PreviewCallback restituirà uno byte[] di dati che rappresentano il frame in un numero di possibili formati di immagine.
  • Modificare i dati dei pixel. Dal momento che i dati tornano come byte non elaborati, apportare modifiche ai dati è relativamente facile ... la difficoltà qui consiste nell'applicare un algoritmo per la particolare elaborazione dell'immagine che si desidera eseguire. Non ci sono effetti incorporati (pre-4.0) che possono essere applicati semplicemente alle immagini, quindi dovrai scriverne uno tuo.
  • È anche possibile decodificare i dati in un oggetto Bitmap per semplificare il lavoro con i pixel. In 2.2, avete la possibilità di usare NDK e jnigraphics per lavorare con i pixel di una Bitmap nel codice nativo, che è significativamente più veloce rispetto al livello Java.
  • Prendere il contenuto del risultante Bitmap e visualizzarlo. Per i dati in rapido movimento, si vorrebbe visualizzare questo su un SurfaceView; utilizzando i metodi lockCanvas() e unlockCanvasAndPost() disponibili da SurfaceHolder in quella vista.

Se questo è tutto ciò che si vuole fare, è possibile farlo con poca difficoltà. Tuttavia, questo non è lo stesso dell'acquisizione di video. Android attualmente non fornisce hook per lo streaming di frame in un contenitore video codificato (MPEG4, 3GP, ecc.) In tempo reale. Le sue capacità di acquisizione video sono strettamente integrate nel MediaRecorder che controlla il processo dall'acquisizione del fotogramma fino alla scrittura del video codificato. Avresti bisogno di una libreria di terze parti come FFMPEG (che è stata creata ed eseguita usando il layer NDK un numero di volte nelle applicazioni Android) per aiutare nel processo di codifica dei frame modificati.

So che hai un target 2.2, ma Android 4.0 fornisce un certo sollievo in quanto hanno rilasciato una nuova versione dell'NDK che consente di avere più voce in capitolo su ciò che accade leggendo i dati di un'immagine da uno stream prima di passarlo al livello di presentazione. Tuttavia, non ho trascorso abbastanza tempo con esso per sapere se potrebbe essere raccomandato per la tua situazione.

+0

Non voglio davvero catturare un video, l'utilizzo dell'anteprima è ottimo per me. Grazie! –

+0

ciao, Come posso creare un video utilizzando una serie di immagini bitmap ??? come posso renderlo? –

5

È possibile utilizzare Camera.setPreviewCallback con Camera.PreviewCallback#onPreviewFrame per ascoltare i fotogrammi di anteprima provenienti dalla fotocamera.

Codice in codici a barre 2D scanner potrebbe essere un utile punto di partenza: ZXing

7

Se si desidera eseguire più complicati processi di elaborazione video in tempo reale, si consiglia vivamente di utilizzare OpenCV for Android.

OpenCVOpenCV è una libreria di computer vision che consente di elaborare i video in tempo reale e dispone di librerie per eseguire semplici operazioni come la rilevazione di spigoli o attività più complesse come la rilevazione di volti e funzioni di corrispondenza.

È possibile ottenere OpenCV lavorando nel tuo cellulare Android in un giorno, soprattutto perché include una vasta documentazione ed esempi.