Recorte de video de Android a través de ffmpeg
He descargado el código de recorte de vídeo de github desde este enlace .
Está funcionando perfectamente por primera vez, pero cuando intento ejecutarlo por segunda vez el código se bloquea sin ninguna excepción, entonces de nuevo cuando intento ejecutarlo por tercera vez después del fallo funciona! ¿Alguien tiene alguna idea para este tipo de comportamiento?
- Cómo llamar a Java API de subproceso de C ++ de NDK?
- Error de UnsatisfiedLink: Método nativo no encontrado findLibrary devuelto null
- Integración de Unity3d con android
- ¿Podemos acceder al controlador de micrófono de mi teléfono Android
- ¿Cómo utilizar la biblioteca JNI compilada por NDK en una aplicación Java normal no Android?
También estoy desarrollando una aplicación que tiene un módulo de recorte de videos. Realmente lo agradecería, si alguien me pudiera ayudar.
- Módulos anidados ndk de Android
- ¿Cómo puedo cargar mi propia clase Java en C en Android?
- Cómo conectar Kinect a Android
- Java: acceso al campo final estático en JNI
- Javah Error android.app.Activity not found
- Cómo almacenar en caché los mapas de bits en la memoria nativa
- Desbordamiento de ReferenceTable (máx = 512) JNI
- Suma de dos valores usando ndk android
https://lists.ffmpeg.org/pipermail/libav-user/2012-May/001964.html
La llamada al método nativo dos veces de una biblioteca de terceros en una actividad hace que la aplicación de Android se cierre
Lea sobre el problema con static vars en 'ffmpeg.c' …
Apuesto a que u tienen el mismo problema y la necesidad de hacer algo (3 opciones alternativas) para restablecer o GC los vars:
-
Obtener el cargador de clases de java que cargó el lib y GC que
-
En la capa c hacer lo que hizo el OP en enlace anterior
-
Escriba una segunda biblioteca compartida que utilice 'dlsym' y 'dlclose' en la primera biblioteca durante cada ciclo de llamada
Github, vea el 'README' aquí
Mismo problema que tuviste
Basta con hacer un método en su ffmpeg.c que se parece a esto
void exitmycode(){ ffmpeg_exit(0); }
ffmpeg_exit(0)
ya está allí en el ffmpeg.c
sólo tienes que llamar a exitmycode();
De su archivo principal de C después de la terminación del recorte video.
Ahora lo que estaba sucediendo es que cuando usted recorta un video o cualquier otra cosa con el ffmpeg no sale completamente, así que la próxima vez que ejecute el comando se salga, pero tampoco ejecuta el comando trim.Again if Ejecutar esa tercera vez, el comando se ejecutan perfectamente. Por lo tanto, lo que había hecho es llamar a la ffmpeg_exit(0)
manualmente al final del proceso hecho.
Creo que podría terminar su actividad y reiniciar la aplicación después de la llamada de recorte de vídeo en el código.
Si después de la segunda vez la aplicación se bloquea y en la tercera funciona tal vez las aplicaciones inicializar y reiniciar la aplicación después de su caída.
Intenta cargar y descargar el enlace de la biblioteca nativa
Haz una cosa
Si ha instalado ffmpeg4android_os lib entonces sólo tiene que comentar 1 línea de método StopTranscoding como este
public void stopTranscoding() { Log.d(Prefs.TAG, "stopTranscoding called"); if (_transcodeBackground != null) { //_transcodeBackground.forceCancel(); } }
que todos….
- ¿Cómo desplazarse al centro de HorizontalScrollView sólo cuando se inicia la actividad?
- Aplicación de Android para pausar / reanudar la música de otra aplicación de reproductor de música