J'ai téléchargé le code de coupe vidéo de GITHUB de Ce lien . P>
Cela fonctionne parfaitement pour la première fois, mais lorsque j'essaie de l'exécuter pour la deuxième fois, le code se bloque sans aucune exception, puis à nouveau lorsque j'essaie de l'exécuter pour la 3ème fois après le crash qui fonctionne! Quelqu'un a-t-il une idée de ce type de comportement? p>
Je développe également une application qui a un module de vidéos de coupe. J'apprécierais vraiment que si quelqu'un puisse m'aider. P>
4 Réponses :
Je pense que vous pourriez terminer votre activité et redémarrer l'application après votre coup de coupe vidéo dans le code. P>
Si après la deuxième fois que l'applicage s'écrase et dans la troisième fonctionne peut-être que les applications initient et redémarrent l'application après son crash. P>
Essayez de charger et de décharger la bibliothèque des autochtones link p>
Pouvez-vous s'il vous plaît reformuler votre réponse, je suis confronté au même problème que décrit dans la question.
Ok, je vais essayer. Dans vidéotrimmingservice.java, vous chargez votre bibliothèque d'indigènes à Oncreate. Je pense que si vous redémarrez l'activité après la première fois que vous coupez votre vidéo, la deuxième fois ne vous placera pas. Cela explique peut-être pourquoi la troisième fois fonctionne, vous devriez charger la bibliothèque à chaque fois que vous l'utilisez.
https://lists.fmpeg.org/pipemmermail /Libav-user/2012-May/001964.html P>
LIRE À propos du problème avec STATIC VARS dans 'FFMPEG.c' ... P>
Je parierais que vous avez le même problème et que vous devez faire quelque chose (3 autres choix) pour réinitialiser ou gc ces vars: p>
Obtenez le chargeur de classe Java qui chargea la lib et le gc IT P> LI>
dans la couche C faire ce que l'OP a fait dans la liaison ci-dessus P> li>
Écrivez une 2e Lib partagée qui utilise "Dlsym" et "DLClose" sur la première bibliothèque pendant chaque cycle d'appel p> li> ol>
github, voir "Readme ' ici P>
même problème que vous avez p>
Excellente réponse Mate, le Readme de GitHub Link a été utile, vous permettez de fournir des échantillons de démonstration de vos réponses 1, 2 et 3? La 3ème réponse donnée par OP est simplement symbolique et être un novice en programmation C, je ne peux pas comprendre ce qu'il fait, il y a un autre lien qui l'explique mieux?
GO AVEC 3. Construisez un 2e module partagé en C qui obtient les VaRs dans la chaîne d'arrondi pour FFMPEG puis utilise dlsym pour obtenir la poignée pour obtenir la poignée, alors appelle - java_net_video_trimmer_natives_video_trimmer_natives_videotrimmer_trim puis dlclose .. La DLClose élimine tous les résidues du premier appel. Le troisième lien dans mon groupe Ors a un code explique. cloner et regarder 'ffmpeg_invoke'
Je me demande comment vous avez eu DLClose de travailler, dans la documentation NDK, il indique clairement que "les destructeurs statiques ne sont jamais appelés au moment présent, ni à la sortie du programme, ou lorsque DLClose () est appelée". Veuillez vous reporter au document Problèmes système dans votre dossier NDK.
5 étapes: (* env) -> GetStringSuFchars, Dlopen, (* env) -> releasestringUntfchars, faire l'appel principal de l'enveloppe à votre Jni Lib ..., dlclose
Pour toute personne désirant toujours le faire avec la méthode de chargement et de déchargement (il semble que c'est toujours l'approche la plus populaire) J'ai ajouté des notes sur une mise en œuvre récente ici: Stackoverflow.com/a/28752190/334402
Il suffit de faire une méthode dans votre FFMPEG.c qui semble que ce maintenant ce qui se passait est que lorsque vous coupez un vidéo ou quoi que ce soit d'autre avec le FFMPEG, il ne reçoit pas complètement la sortie, alors la prochaine fois que vous exécutez la commande, elle est sortie, mais elle n'exécute pas également votre commande de trim. Saisissez-vous si vous exécutez cette troisième fois, la commande est parfaitement exécutée. . Donc, ce que j'avais fait, c'est appeler le ffmpeg_exit (0) code> est déjà là dans le
FFMPEG. C code> Il vous suffit d'appeler
exitmycode (); code> à partir de votre fichier C principal après l'achèvement de la coupe vidéo. P>
ffmpeg_exit (0) code> manuellement à la fin du traitement effectué. P> p>
Je pense que cela provoque la sortie de l'application entière - c'est-à-dire le code d'appel Android Java? De plus, autant que je puisse voir FFMPEG_EXIT () a été remplacé par EXIT_PROGRAM () dans la dernière source FFMPEG.
faire une chose
Si vous avez installé FFMPEG4ANDROID_OS LIB, il vous suffit de commenter 1 ligne de méthode
Stoptranscoding comme celui-ci p> que tout ... p> p>
Tout de la chance pour obtenir cela pour travailler, je suis confronté au même problème, toute aide sera appréciée. Merci..
Je suis confronté au même problème, si vous avez résolu cela, aidez-moi s'il vous plaît. Merci
Essayez de ne pas nettoyer le projet, alors il fonctionnera sans problème.