pantalla mejor interno grabar grabador con como celular captura app aplicaciones android screenshot android-5.0-lollipop android-4.4-kitkat screen-record

mejor - ¿Cómo grabar la pantalla y tomar capturas de pantalla, usando la API de Android?



grabar pantalla android sin app (1)

El primer paso y el que Ken White sugirió acertadamente y que ya puede haber cubierto es el Código de Ejemplo proporcionado oficialmente.

He utilizado su API anteriormente. Estoy de acuerdo en que la captura de pantalla es bastante sencilla. Pero, la grabación de pantalla también está bajo líneas similares.

Responderé a sus preguntas en 3 secciones y lo resumiré con un enlace. :)

1. Iniciar la grabación de vídeo

private void startScreenRecord(final Intent intent) { if (DEBUG) Log.v(TAG, "startScreenRecord:sMuxer=" + sMuxer); synchronized(sSync) { if (sMuxer == null) { final int resultCode = intent.getIntExtra(EXTRA_RESULT_CODE, 0); // get MediaProjection final MediaProjection projection = mMediaProjectionManager.getMediaProjection(resultCode, intent); if (projection != null) { final DisplayMetrics metrics = getResources().getDisplayMetrics(); final int density = metrics.densityDpi; if (DEBUG) Log.v(TAG, "startRecording:"); try { sMuxer = new MediaMuxerWrapper(".mp4"); // if you record audio only, ".m4a" is also OK. if (true) { // for screen capturing new MediaScreenEncoder(sMuxer, mMediaEncoderListener, projection, metrics.widthPixels, metrics.heightPixels, density); } if (true) { // for audio capturing new MediaAudioEncoder(sMuxer, mMediaEncoderListener); } sMuxer.prepare(); sMuxer.startRecording(); } catch (final IOException e) { Log.e(TAG, "startScreenRecord:", e); } } } } }

2. Detener la grabación de vídeo

private void stopScreenRecord() { if (DEBUG) Log.v(TAG, "stopScreenRecord:sMuxer=" + sMuxer); synchronized(sSync) { if (sMuxer != null) { sMuxer.stopRecording(); sMuxer = null; // you should not wait here } } }

2.5. Pausar y reanudar la grabación de video

private void pauseScreenRecord() { synchronized(sSync) { if (sMuxer != null) { sMuxer.pauseRecording(); } } } private void resumeScreenRecord() { synchronized(sSync) { if (sMuxer != null) { sMuxer.resumeRecording(); } } }

Espero que el código ayude. Aquí está el enlace original al código al que me referí y del cual también se deriva esta implementación (grabación de video).

3. Tomar captura de pantalla en lugar de video

Creo que por defecto es fácil capturar la imagen en formato de mapa de bits. Todavía puede seguir adelante con el ejemplo MediaProjectionDemo para capturar la captura de pantalla.

[EDIT]: Código cifrado para captura de pantalla

a. Para crear una pantalla virtual en función del ancho / alto del dispositivo

mImageReader = ImageReader.newInstance(mWidth, mHeight, PixelFormat.RGBA_8888, 2); mVirtualDisplay = sMediaProjection.createVirtualDisplay(SCREENCAP_NAME, mWidth, mHeight, mDensity, VIRTUAL_DISPLAY_FLAGS, mImageReader.getSurface(), null, mHandler); mImageReader.setOnImageAvailableListener(new ImageAvailableListener(), mHandler);

segundo. A continuación, inicie la captura de pantalla en función de un intento o acción

startActivityForResult(mProjectionManager.createScreenCaptureIntent(), REQUEST_CODE);

Detener la proyección de medios

sMediaProjection.stop();

do. Luego convertir a imagen-

//Process the media capture image = mImageReader.acquireLatestImage(); Image.Plane[] planes = image.getPlanes(); ByteBuffer buffer = planes[0].getBuffer(); int pixelStride = planes[0].getPixelStride(); int rowStride = planes[0].getRowStride(); int rowPadding = rowStride - pixelStride * mWidth; //Create bitmap bitmap = Bitmap.createBitmap(mWidth + rowPadding / pixelStride, mHeight, Bitmap.Config.ARGB_8888); bitmap.copyPixelsFromBuffer(buffer); //Write Bitmap to file in some path on the phone fos = new FileOutputStream(STORE_DIRECTORY + "/myscreen_" + IMAGES_PRODUCED + ".png"); bitmap.compress(CompressFormat.PNG, 100, fos); fos.close();

Hay varias implementaciones (código completo) de Media Projection API disponibles. Algunos otros enlaces que pueden ayudarte en tu desarrollo.

  1. Grabación de video con MediaProjectionManager - sitio web

  2. android-ScreenCapture - github según las observaciones del desarrollador de Android :)

  3. screenrecorder - github

  4. Captura y graba la pantalla de Android usando las API de MediaProjection - sitio web

Espero que ayude :) Feliz codificación y grabación de pantalla!

PD: ¿Me puede decir la aplicación de Microsoft de la que habla? No lo he usado. Quisiera probarlo :)

Fondo

Android obtuvo una nueva API en Kitkat y Lollipop para capturar la pantalla en video. Puede hacerlo a través de la herramienta ADB, o a través del código (a partir de Lollipop).

Desde que salió la nueva API, surgieron muchas aplicaciones que utilizan esta función, lo que permite grabar la pantalla, y Microsoft incluso creó su propia aplicación competidora Google-Now-on-tap.

Usando ADB, puedes usar:

adb shell screenrecord /sdcard/video.mp4

Incluso puedes hacerlo desde el propio Android Studio.

El problema

No puedo encontrar ningún tutorial o explicación sobre cómo hacerlo utilizando la API, es decir, en el código.

Lo que he encontrado

El único lugar que encontré es la documentación ( here , bajo "Captura de pantalla y compartir"), que me dice esto:

Android 5.0 le permite agregar capacidades de captura de pantalla y compartir pantalla a su aplicación con las nuevas APIs de android.media.projection. Esta funcionalidad es útil, por ejemplo, si desea habilitar el uso compartido de pantalla en una aplicación de videoconferencia.

El nuevo método createVirtualDisplay() permite que su aplicación capture el contenido de la pantalla principal (la pantalla predeterminada) en un objeto Surface, que luego puede enviar a través de la red. La API solo permite capturar contenido de pantalla no seguro, y no audio del sistema. Para comenzar la captura de pantalla, su aplicación debe solicitar primero el permiso del usuario iniciando un cuadro de diálogo de captura de pantalla usando un Intent obtenido a través del método createScreenCaptureIntent() .

Para ver un ejemplo de cómo usar las nuevas API, vea la clase MediaProjectionDemo en el proyecto de muestra.

La cosa es que no puedo encontrar ningún ejemplo de "MediaProjectionDemo". En cambio, he encontrado un ejemplo de "Captura de pantalla", pero no entiendo cómo funciona, ya que cuando lo ejecuté, todo lo que he visto es una pantalla parpadeante y no creo que guarde el video un archivo. La muestra parece muy buggy.

Las preguntas

¿Cómo realizo esas acciones usando la nueva API?

  1. comience a grabar, opcionalmente incluyendo audio (micrófono / altavoz / ambos).
  2. para de grabar
  3. tomar una captura de pantalla en lugar de vídeo.

Además, ¿cómo lo personalizo (resolución, fps solicitados, colores, tiempo ...)?