2012-12-11 13 views
8

Dopo molte ricerche e giorni di esperimenti non ho trovato una soluzione immediata.Registrazione schermata in-app su Android per acquisire 15 fotogrammi al secondo

Sto sviluppando un'applicazione che l'utente interagirà con un animale domestico sullo schermo e voglio consentirgli di salvarlo come video.

Esiste un modo "semplice" per acquisire lo schermo dell'app stessa?

Ho trovato una soluzione alternativa (per salvare alcuni bitmap ogni secondo e quindi passarli a un codificatore) ma sembra troppo pesante. Io felice anche con un framerate di 15 fps

sembra che sia possibile, cioè v'è un'applicazione simile che fa questo, la sua chiamata "Talking Tom"

+4

Dovete registrare in realtà lo schermo?O puoi renderizzare un video basato sulla registrazione dello stato di input/pet dell'utente che apparirà esattamente come lo schermo ha fatto senza essere effettivamente una cattura dello schermo? –

+2

"Esiste un modo" semplice "per catturare lo schermo dell'app stessa?" - perché dovresti farlo, rispetto alla creazione di una bitmap direttamente del contenuto desiderato? Quando salvi un'immagine in un editor di immagini come Photoshop, pensi che l'app acquisisca uno screenshot e lo salvi? – CommonsWare

+1

Stai usando OpenGL per rendere il tuo animale domestico? Puoi usare 'glReadPixels()' dopo ogni fotogramma per prendere i dati, quindi fare con esso quello che vuoi. Sì, questo suggerimento è fondamentalmente lo stesso della "soluzione alternativa" che hai menzionato. Non penso ci sia alcun magico 'recordScreenToVideoFile()' integrato in Android, quindi catturare fotogrammi e codificarli è probabilmente il migliore che si otterrà. –

risposta

1

E 'davvero dipende dal modo in cui si sceglie di implementare il vostro "pet vista". Stai disegnando su una tela? OpenGl ES? Normale gerarchia di visualizzazione Android?

In ogni caso, non esiste un magico "recordScreenToVideo()" come uno dei commenti ha detto.

è necessario:

  • ottenere bitmap rappresentano i "frames". Dipende da come si implementa la vista. Se disegni te stesso (Canvas o OpenGL), salva i tuoi pixel buffer grezzi come fotogrammi. Se si utilizza la normale gerarchia delle viste, la sottoclasse di Android suDraw e si salvano i "frame" che si ottengono sulla tela. La frequenza della chiamata del sistema a onDraw non sarà inferiore al "framerate" effettivo dello schermo. Se necessario, duplica i fotogrammi in seguito per fornire un video a 15 fps.

  • Codifica i fotogrammi. Sembra che tu abbia già un meccanismo per farlo, hai solo bisogno di essere più efficiente.

modi in cui è possibile ottimizzare la codifica:

  • Cache i tuoi bitmap (fotogrammi) e codificare in seguito. Funzionerà allo solo se il tuo video previsto sarà relativamente breve, altrimenti lo uscirà dallo spazio di archiviazione.
  • Registra solo al framerate che l'app genera effettivamente (in base al modo in cui disegni) e utilizza un parametro dell'encoder per generare un video a 15 fps (senza fornire effettivamente 15 fotogrammi al secondo).
  • Regola le impostazioni di qualità sul dispositivo corrente. Può essere eseguito eseguendo un test del ciclo CPU nascosto all'avvio dell'app e definendo alcune soglie.
  • Codifica solo la parte più pertinente dello schermo.
  • Ancora, a seconda del modo in cui si implementa - se è possibile salvare alcuni "dati cronologici" e convertirli in frame senza doverli fare in tempo reale, sarebbe meglio. Ad esempio, "sposta", "sorridi", "cambia colore" - o qualunque sia la tua logica aziendale, dal momento che non hai elaborato questo argomento. La funzione "genera film" animerà i dati della cronologia come sequenza di fotogrammi (senza disegnare sullo schermo) e quindi codificherà.

Speranza che aiuta

Problemi correlati