Android: ExoPlayer – Obtener el número de fotograma actual del vídeo
Estoy desarrollando una aplicación de video de Android donde necesito obtener el número de fotograma actual del video que se muestra mientras está en modo de pausa.
Necesito enviar a mi servidor el número de marco actualmente pausado en vídeo y recuperar una lista de elementos con respecto a ese marco / tiempo, ahora estoy enviando el tiempo de pausa actual en milisegundos, pero no funciona muy bien, porque el Servidor de comparar el tiempo enviado a un marco específico calculado, basado en el tiempo, pero a veces la comparación no es exacta.
- Construyendo FFMPEG con librtmp para android
- FFMpeg Android Stagefright SIGSEGV error (decodificación h264)
- Concatenar archivos mp4 en Android usando halfninja ffmpeg
- No se puede actualizar la aplicación en la tienda debido a la api23 de destino (no es posible la degradación)
- El comando de cambio de velocidad falla cuando el flujo de audio no está presente en el video - ffmpeg
Sé que usted puede conseguir un mapa de bits de ese marco si utiliza MediaMetaDataRetriever , y lo hice pero devuelve imagen de mapa de bits y lo que necesito es un índice. Estoy usando ExoPlayer (necesito esa característica para MP4 y para HLS, también, si eso importa).
¿Hay alguna manera de obtener esa información del video?
- Cómo utilizar el último FFMPEG en el proyecto de estudio de Android?
- Java.lang.ExceptionInInitializerError en FFmpeg Prueba Demo
- FFMPEG 1.0 ANDROID NDK R8B
- Recepción de flujo RTP - AudioStream, AudioGroup
- Android - FFmpeg Alternativa para obtener marcos de video. (Debido a la licencia)
- Cómo ejecutar ffmpeg desde la línea de comandos en android
- Cómo transmitir a ffserver desde android
- Problema al llamar a ffmpeg.c dos veces que hace que la aplicación se bloquee?
Puedo publicar una solución a mi problema, Con el fin de obtener el tiempo de trama exacta Simplemente extendido MediaCodecVideoTrackRenderer.java clase de la biblioteca de ExoPlayer y utiliza el valor de lastOutputBufferTimestamp que está en función:
@Override protected boolean processOutputBuffer(long positionUs, long elapsedRealtimeUs, MediaCodec codec, ByteBuffer buffer, MediaCodec.BufferInfo bufferInfo, int bufferIndex, boolean shouldSkip) { boolean processed = super.processOutputBuffer(positionUs, elapsedRealtimeUs, codec, buffer, bufferInfo, bufferIndex, shouldSkip); if (!shouldSkip && processed) { lastOutputBufferTimestamp = bufferInfo.presentationTimeUs; } return processed; }
Me da la hora exacta y no un tiempo redondeado de, digamos por último, mPlayer.getDuration () o algo así. Si tienes un FPS constante en tu video, puedes calcularlo por división y obtener el número del fotograma. Era simplemente suficiente para mí saber el tiempo exacto del marco.
Estoy utilizando ExoPlayer versión r1.5.3 por lo que no sé si esta solución funcionará para la nueva versión ya que el código probablemente ha cambiado.
- ¿Es posible Proguard un módulo de biblioteca de Android, pero no el módulo de aplicación?
- Android: ¿Cómo inicializar correctamente YouTube Player dentro de la actividad?