2013-02-05 9 views
1

Pendant mon travail, j'utilise habituellement CVOpenGLESTextureCacheCreateTextureFromImage pour obtenir la texture du cache de la télécommande. J'utilise ensuite asssetwriter pour écrire un fichier mov, le mov joue bien mais la vidéo est à l'envers.Vidéo enregistrée sur iOS joue à l'envers

j'ai fait une recherche sur Internet et a constaté que je devrais coder ceci:

assetWriterInput.transform=CGAffineTransformMakeScale(1.0, -1.0); 

Il fonctionne très bien, mais quand je joue sur Windows XP, il est toujours à l'envers. J'ai trouvé qu'il joue bien sur iOS ou le lecteur vidéo Quicktime sur un système d'exploitation autre que Apple.

Alors, quelle est la raison? Pourquoi ça ne marche pas?

Répondre

0

Le conteneur CGAffineTransformMaskScale' merely sets some meta information in the mov pour appliquer une transformation d'image à l'image vidéo lors de la lecture. Cependant, seul le joueur Quicktime respecte ce drapeau. Le fait que l'image soit à l'envers est dû à OpenGL en supposant que l'image provient en bas à gauche, alors que la plupart des formats d'images vidéo la placent en haut à gauche, ce qui retournera bien sûr l'image si ces hypothèses entrer en collision. La solution saine consisterait à inverser l'image et pas seulement à définir cet indicateur de métadonnées.

Retourner une image est assez facile, car il vous suffit d'inverser les lignes de balayage dans une étape intermédiaire.

+0

Cela signifie que je devrais retourner l'image avant d'enregistrer la vidéo, j'utilise l'opengl rendant la photo yup, comment l'inverser? Pouvez-vous me donner quelques exemples d'inverser la ligne de balayage? – user1586321

+0

@ user1586321: Pourriez-vous ajouter le code que vous utilisez jusqu'à présent pour que je puisse voir comment je peux l'ajouter à ce que vous avez déjà. – datenwolf

Questions connexes