6
votes

Garder l'aperçu du rappel lors de l'enregistrement de la vidéo?

J'utilise actuellement OnpreviewCallback afin que je puisse capturer des cadres de la caméra lors de l'aperçu et les diffuser via http.

Cela fonctionne, mais je publie ensuite une commande pour commencer à enregistrer et, semble-t-il, je n'ai plus de rappel d'aperçu.

Ainsi, comment puis-je garder le rappel d'aperçu afin que je puisse envoyer les images de la surface à mon serveur et enregistrer la vidéo sur l'appareil?


3 commentaires

J'ai essayé des réponses mais ça n'a pas fonctionné Stackoverflow.com/Questtions/52314822/...


Avez-vous trouvé une solution?


Toute solution pour cela?


3 Réponses :


5
votes

Je n'ai pas travaillé pendant assez longtemps avec la caméra Android. Cependant, comme je me souviens

1) OnpreviewCallback n'est pas appelé pendant que vous enregistrez

Il est mentionné dans quelques questions:

caméra onpreviewFrame non appelée Comment afficher l'aperçu de la caméra filtrée en temps réel pendant l'enregistrement vidéos?

2) J'ai vu qu'il était manipulé dans Siphdroid et couple d'autres clients de SIP Android à la suite (c'était il y a 1 à 2 ans, cette méthode pourrait donc être extérieure):

  • Un tuyau a été créé
  • La prise de réception du tuyau a été enveloppée dans FileDescriptor et transmise à Mediarecorder SetOutputFile
  • L'envoi de la douille du tuyau était constamment lu dans un fil.
  • De cette façon, vous pouvez recevoir un contenu qui est écrit dans un fichier
  • Maintenant, la question de savoir comment gérer le contenu (car il est codé H.263 ou H.264 et pourrait être mélangé avec le son, si vous enregistrez une vidéo avec le son).
  • Il y avait des algorithmes heuristiques qui ont analysé le contenu (cependant, c'est une douleur dans le cul)

    3) Vous pouvez utiliser OnpreviewFrame + Démarrer Audiorecorder et le coder vous-même (à l'aide de FFMPEG ou quelque chose du genre) vers le fichier MP4. De cette façon, vous n'avez pas besoin de démarrer l'enregistrement Mediarecorder.


1 commentaires

1. Toutes ces réponses ne fonctionneront pas Stackoverflow.com/questions/52314822/... 2. Je ne pense pas que cela aidera à résoudre ce problème (pour enregistrer la vidéo locale + l'audio et obtenir des cadres bruts en même temps ) 3. - Toutes les libs externes fonctionnent laids, n'utilisent jamais FFMPEG pour l'enregistrement vidéo sur Android



0
votes

Une fois que j'ai eu la caméra et le médiarecorder pour démarrer et arrêter l'enregistrement sans crash (n'était pas facile), j'ai toujours eu un problème comme celui que vous avez décrit, où le rappel d'aperçu cesserait d'être appelé.

Le correctif que j'ai enfin trouvé ajoutez un appel à SetPreviewCallback après Mediarecorder.start (), et une autre après Mediarecorder.stop (). Je ne sais pas si cela est correct, mais cela a fonctionné sur le razr m que je teste.


2 commentaires

ne fonctionne pas Stackoverflow.com/questions/52314822/...


@ User924 Assurez-vous d'obtenir des cadres de prévisualisation pendant l'enregistrement fonctionnent, car l'aperçu des cadres était le seul moyen de donner une vue en direct sur l'écran de l'appareil de ce qui est enregistré. Cela dit, il y a beaucoup d'endroits où cela peut se tromper. De nombreux téléphones avaient aussi des bizarreries et seraient même s'écraser si l'API n'était pas utilisée. Et l'API a peut-être changé dans les nouvelles versions Android (cette réponse a 5 ans). Je vais jeter un oeil à votre lien et aiderai si je peux là k ..



1
votes

Vous pouvez appeler ces méthodes après votre enregistreur multimédia.Start () étant appelée comme suit: XXX

Les raisons:

  1. Après caméra.unlock () est appelé, un autre processus (voici le processus d'enregistreur de support) peut utiliser la caméra; Lorsque le processus est terminé, vous devez vous reconnecter à l'appareil photo, ce qui réaffectera la serrure et vous permettra de continuer à utiliser la caméra.
  2. puis re-enregistrer le rappel de données de la trame de vue superficiel après la caméra reconnecté, car son État peut être changé après la reconnaissance.

    J'ai jamais été le même problème que vous êtes dans ma demande et je l'ai résolu. J'espère que cela peut résoudre vos problèmes!


3 commentaires

Non, ça ne marche pas Stackoverflow.com/questions/52314822/...


Et si j'utilise de surfacetexture? Quoi qu'il en soit, il ne s'agit pas du tout à propos de ViewView ou TextureView du tout. Nous parlons de rappel surpreviewFrame et non sur la visualisation


Donc, votre troisième ligne n'est pas importante, bien que les deux premières lignes caméra.reconnect (); caméra.setpreviewcallback (); ne vous aidera pas à résoudre ce problème