una samsung puedo porque pantalla hacer dedos con como celular capturar captura botones android adb

android - samsung - ¿Cómo capturar la pantalla lo más rápido posible a través de adb?



como hacer una captura de pantalla en el celular (12)

Esta pregunta ya tiene una respuesta aquí:

Recientemente, escribí un cliente de PC que puede mostrar y controlar la pantalla de mi teléfono Android en tiempo real usando adb . Uso el mono para controlar el dispositivo y funciona bien. El problema es cómo agarrar la pantalla del teléfono y mostrarla sin problemas.

La primera solución que he encontrado es agarrar continuamente el framebuffer través de adb (como la función de captura de pantalla de DDMS). Ahora cuando lo hago, el rendimiento es bastante inaceptable. La velocidad de fotogramas capturada desde el framebuffer es tan baja como 5 por segundo (el tamaño de fotograma es 800 * 480). Mi programa se ve como su hipo cuando me deslizo en el teléfono.

Mi programa está escrito en java usando ddmslib para capturar framebuffer .

añadir:
Descubrí que la codificación de los datos en bruto del framebuffer en formato .png es muy lenta, de lo contrario, esta sería una forma rápida de transmitir una imagen en bruto comprimida.

¿Cómo puedo mejorar la velocidad de captura de la pantalla a un nivel uniforme?


Bueno, algunas personas dijeron que en Perl hay muchas maneras de hacer una cosa. :-) De todos modos, este puede funcionar mejor (ya que no hay una expresión regular) y puede resolver el problema en Cygwin en MS Windows (cuyo Perl define /n como CRLF):

adb shell screencap -p | perl -pe ''BEGIN { $/="/cM/cJ"; $/="/cJ"; } chomp;'' > screen-$(date +%Y%m%d_%H%M%S).png


De docs :

Tomando una captura de pantalla del dispositivo

El comando screencap es una utilidad de shell para tomar una captura de pantalla de una pantalla de dispositivo. Mientras que en un shell, la sintaxis es:

screencap <filename>

Para usar la captura de pantalla desde la línea de comandos, escriba lo siguiente:

$ adb shell screencap /sdcard/screen.png

Aquí hay un ejemplo de sesión de captura de pantalla, utilizando el shell adb para capturar la captura de pantalla y el comando de extracción para descargar el archivo desde el dispositivo:

$ adb shell shell@ $ screencap /sdcard/screen.png shell@ $ exit $ adb pull /sdcard/screen.png

Grabando una pantalla de dispositivo

El comando screenrecord es una utilidad de shell para grabar la pantalla de dispositivos con Android 4.4 (nivel de API 19) y superior. La utilidad registra la actividad de la pantalla en un archivo MPEG-4.

Note: Audio is not recorded with the video file.

Un desarrollador puede usar este archivo para crear videos promocionales o de capacitación. Mientras que en un shell, la sintaxis es:

screenrecord [options] <filename>

Para usar screenrecord desde la línea de comando, escriba lo siguiente:

$ adb shell screenrecord /sdcard/demo.mp4

Detenga la grabación de la pantalla presionando Ctrl-C; de lo contrario, la grabación se detendrá automáticamente a los tres minutos o el límite de tiempo establecido por - time-limit .

Para comenzar a grabar la pantalla de su dispositivo, ejecute el comando screenrecord para grabar el video. Luego, ejecute el comando de extracción para descargar el video desde el dispositivo a la computadora host. Aquí hay un ejemplo de sesión de grabación:

$ adb shell shell@ $ screenrecord --verbose /sdcard/demo.mp4 (press Ctrl-C to stop) shell@ $ exit $ adb pull /sdcard/demo.mp4

La utilidad de registro de pantalla puede grabar en cualquier resolución admitida y velocidad de bits que solicite, al tiempo que conserva la relación de aspecto de la pantalla del dispositivo. La utilidad registra en la resolución y orientación de la pantalla nativa de forma predeterminada, con una duración máxima de tres minutos.

Hay algunas limitaciones conocidas de la utilidad de registro de pantalla que debe tener en cuenta al usarla:

Es posible que algunos dispositivos no puedan grabar en su resolución de pantalla nativa. Si encuentra problemas con la grabación de pantalla, intente utilizar una resolución de pantalla más baja. No se admite la rotación de la pantalla durante la grabación. Si la pantalla gira durante la grabación, parte de la pantalla se corta en la grabación.


En .bash_profile en mi mac:

function droidShot() { /full_path_to_droid_sdk/platform-tools/adb shell screencap -p | perl -pe ''s//x0D/x0A//x0A/g'' > $1.png }

uso:

droidshot whatever

y el archivo aparece en lo que sea.png


Esta es una solución lenta, estoy seguro de que es la forma más rápida que puede encontrar en soluciones basadas en adb,

# this line require a superuser privilege: adb shell "su -c ''cat /dev/graphics/fb0 > /sdcard/capture.raw''" adb pull /sdcard/capture.raw ffmpeg -loglevel panic -f rawvideo -pix_fmt bgr32 -s 320x480 -i / capture.raw -vcodec png -vframes 1 capture.png;


Hay un programa de screenrecord partir de Android 4.4

adb shell screenrecord /data/local/tmp/test-video.m4v adb pull /data/local/tmp/test-video.m4v ~/test-video.m4v


He mejorado la solución de @ steveha:

Cree un script de shell que diga: '' captura de pantalla de Android '' con el siguiente contenido:

adb shell screencap -p | perl -pe ''s//x0D/x0A//x0A/g'' > screen-`date +%Y-%m-%d_%X`.png

Coloque este archivo en su directorio bin local o en cualquier otro $ PATH que prefiera.

Esto le permitiría guardar los archivos con una marca de tiempo en el directorio actual.

Recuerda hacer el script de shell ejecutable usando

chmod +x android-screenshot


Podrías usar:

$ adb shell screencap -p> sc.png

que desafortunadamente no funciona (el archivo está dañado), por lo que la opción que queda es

$ adb shell screencap -p /mnt/sdcard/sc.png $ adb pull /mnt/sdcard/sc.png

Si bien esto es relativamente rápido, probablemente no sea tan rápido como lo necesitas.


Usando este método, mi aplicación continúa ejecutándose a su máxima velocidad de cuadros

adb pull /dev/graphics/fb0

Esto hará que bajen los datos sin procesar del buffer de cuadros. Parece que tiene el mismo ancho que la pantalla, pero la altura se completa. El buffer de cuadros en mi dispositivo parece estar en formato RGBA8888. Para obtener exactamente lo que se muestra en la pantalla, debe ignorar el canal alfa.

Tenga en cuenta que esto tarda ~ 0,8 segundos en descargarme (resolución: 480x854) pero si lo tengo descargando en un bucle continuo, no afecta la velocidad de cuadros del dispositivo.


adb shell screenrecord --bit-rate 8000000 - time-limit 30 /sdcard/example.mp4

Puede cambiar la tasa de bits y cambiar la duración del video también.


si la parte lenta es en bruto a la conversión png (el time adb shell screencap -p /sdcard/x.png es considerablemente más lento que el time adb shell screencap /sdcard/nonpng.raw , como lo tengo en los juegos) y no es necesario el png, entonces puede hacer como aquí https://github.com/sowcow/shot . Convierte los datos sin procesar a un formato simple de ppm y convierte de ppm a bmp usando imagemagick casi sin sobrecarga después de obtener los datos sin procesar

actualizacion:

Este script de shell por max_plenert es un mejor ejemplo:

adb shell screencap /sdcard/mytmp/rock.raw adb pull /sdcard/mytmp/rock.raw adb shell rm /sdcard/mytmp/rock.raw // remove the header tail -c +13 rock.raw > rock.rgba // extract width height and pixelformat: hexdump -e ''/4 "%d"'' -s 0 -n 4 rock.raw hexdump -e ''/4 "%d"'' -s 4 -n 4 rock.raw hexdump -e ''/4 "%d"'' -s 8 -n 4 rock.raw convert -size 480x800 -depth 8 rock.rgba rock.png



adb shell screencap /sdcard/screen.png && adb pull /sdcard/screen.png my_screen01.png