2014-11-15 18 views
5

Le app Android, tramite la classe Presentation e le relative funzionalità, possono visualizzare contenuti separati su uno schermo esterno (HDMI, MHL, Miracast, ecc.) Piuttosto che sul touchscreen del telefono o tablet (quello che chiamerò "display principale" Qui).Cattura schermo di display esterno su Android?

Per il display principale, è possibile utilizzare screencap o DDMS per eseguire uno screenshot.

C'è un modo per fare uno screenshot del display esterno?

Idealmente, sarebbe una soluzione che potrebbe essere utilizzata come screencap/DDMS, senza modifiche di app. Tuttavia, le soluzioni che coinvolgono in qualche modo la copia del contenuto dello Window che rappresenta lo schermo esterno sarebbe anche interessante.

risposta

7

Nessuna funzione del SO per l'acquisizione del display esterno.

Il display principale è composto da un numero di fonti, come lo è il display esterno. La funzione "cattura dello schermo" è in realtà solo un altro modo per comporre le varie fonti. Poiché utilizza gli stessi parametri del display principale, ottieni lo stesso risultato. (Si noti che eventuali livelli "sicuri", come i video protetti da DRM, non compaiono tuttavia.) Quindi per "catturare" il display esterno, si vorrebbe una variante di cattura dello schermo che utilizza la "pila di livelli" del display esterno piuttosto che il principale e non ci sono API per farlo.

(Vedi SurfaceFlinger::captureScreenImplLocked() in SurfaceFlinger.cpp.)

Il comando screenrecord fa qualcosa di simile: si crea una visualizzazione virtuale con pila dei livelli del display principale, e cattura tutto ciò che viene reso lì.

Per quanto riguarda l'acquisizione dell'uscita di un Presentation, ci sono alcuni test CTS che possono essere di interesse. Lo VirtualDisplayTest crea uno Presentation e lo cattura con uno ImageReader, mentre lo EncodeVirtualDisplayTest invia la presentazione attraverso un percorso di codifica/decodifica video completo. I test disegnano solo una serie di colori e poi controllano per assicurarsi che i colori possano essere riletti. Entrambe richiedono versioni recenti di Android recenti (ad esempio, ImageReader non esistevano fino all'API 19) e le autorizzazioni limitate dell'app limiteranno l'output a ciò che l'app esegue il rendering.

+0

come fai a sapere tutto questo: O – rupps

+1

Ho capito che questa era la situazione, ma non ero sicuro se mi mancasse qualche altra opzione. Presenterò una richiesta di funzionalità per 'screencap' e/o' screenrecord' per ottenere uno switch da riga di comando da catturare da uno schermo esterno, che può guidare aggiungendo l'API mancante. Il problema con i test CTS è che instradano l'output 'Presentation' su un display virtuale individualmente, mentre un meccanismo di cattura schermo basato su app richiede il routing di' Presentation' su un vero display esterno * e * qualcosa per cui possiamo fare la cattura dello schermo. – CommonsWare

+2

@rupps: Non mi stupirebbe se Fadden avesse scritto qualcosa di quello che stiamo discutendo qui ... :-) – CommonsWare