J'essaie d'enregistrer une vidéo à partir de la caméra frontale d'Android tout en affichant la surface.
Ce que j’ai découvert avec la caméra frontale, c’est qu’elle inverse la vidéo en miroir pendant l’enregistrement, même si la vue de la surface montre une vue normale.
Y at-il un moyen que je peux empêcher cela ou le réparer?
J'ai lu d'autres articles sur stackoverflow tels que Comment empêcher Android d'inverser l'image de la caméra faisant face à l'avant?
Mais il semble qu’il ne s’agisse plus que de prendre des photos avec l’appareil photo avant et d’inverser l’image, ce que j’avais déjà réglé moi-même en utilisant la matrice. Cependant, il semble que l'utilisation d'une matrice pour une vidéo ne fonctionne pas.
Dans mon cas, j'ai juste besoin de retourner horizontalement pour y jouer. Lors de l'enregistrement, il est déjà inversé pour l'effet miroir et, comme je vois, il n'est pas possible de le modifier. Cependant, le code ci-dessous a résolu mon problème en jouant.
videoPlayer.setScaleX(-1);
Je n'ai pas de solution, mais il me semble que la clé est la suivante:
MediaRecorder.setOrientationHint
Définit l'indicateur d'orientation pour la lecture vidéo en sortie. Cette méthode doit être appelée avant prepare (). Cette méthode ne déclenche pas la rotation de l'image vidéo source pendant l'enregistrement vidéo, mais ajoute une matrice de composition contenant l'angle de rotation dans la vidéo en sortie si le format de sortie est OutputFormat.THREE_GPP ou OutputFormat.MPEG_4 afin que lecteur vidéo peut choisir la bonne orientation pour la lecture. Notez que certains lecteurs vidéo peuvent choisir d’ignorer la matrice de composition d’une vidéo pendant la lecture.
J'enregistre une vidéo au format H264 et cela ne fonctionne pas pour moi: ( Mais cela pourrait vous aider. Avez-vous essayé?
Dans la documentation de la méthode setDisplayOrientation ( http://developer.Android.com/reference/Android/hardware/Camera.html ), on peut trouver:
Notez que l'affichage de prévisualisation des caméras frontales est basculé horizontalement Avant la rotation, c'est-à-dire que l'image est réfléchie Le long de l'axe vertical central du capteur de la caméra. Ainsi, les utilisateurs peuvent Se voir comme se regardant dans un miroir.
Donc, votre aperçu devrait être retourné, mais pas votre vidéo enregistrée. Avec votre aperçu, vous voyez-vous en train de regarder dans un miroir? Si c'est le cas, tout fonctionne bien.
Vous devez appliquer une transformation matricielle, telle que:
if(isFrontCamera) {
m.preScale(-ratio, ratio);
} else {
m.preScale(ratio, ratio);
}
En supposant que vous ne redimensionniez rien, la ration serait de 1, rendant la pré-échelle de la caméra non frontale obsolète.