De ce que j'ai lu Apple n'expose pas l'API pour permettre aux développeurs d'obtenir une vignette d'un film à l'aide du SDK actuel. p>
Quelqu'un peut-il partager du code sur la manière dont ils vont à ce sujet? J'ai entendu dire que vous pouvez accéder à la vue Picker de la caméra et trouver la vue sur l'image juste avant que le sélecteur d'image UI soit fermé. Cela semble un peu laid. P>
aussi ive considéré comme à l'aide de FFMPEG pour saisir une trame hors du film, mais n'auriez pas eu une idée de la manière de la compiler comme une bibliothèque pour l'iPhone. Tous les pointeurs seraient grandement appréciés p>
7 Réponses :
Il y a un JPG dans le même dossier que le film qui est la vignette. Je l'ai seulement testé avec une vidéo enregistrée depuis le téléphone, mais cela fonctionne bien. Ce n'est pas nommé le même que le film, alors obtenez le chemin du répertoire que le film est installé et itérer pour un .jpg et vous allez. P>
Faites-moi savoir comment cela a fonctionné. Je peux poster du code qui le fait pour vous si vous avez des problèmes. Je viens de la mettre en œuvre dans notre application donc je sais que cela fonctionne.
D'accord, encore un autre détail pour ceux qui bricolent avec cela. Dans notre formulaire, l'utilisateur avait la possibilité d'annuler et de choisir une autre image. Il ajoute réellement le .mov et .jpg dans le même répertoire TMP, ce qui briserait ma suggestion ci-dessus car elle ne ferait pas la mapper le bon JPG avec le bon .mov. Il peut y avoir une manière plus propre, mais je l'ai réparée en regardant la NsfilemodificationDate de tous les JPGS du dossier et en utilisant le dernier.
Excusez-moi, je voulais dire 'annuler et choisir un film différent'.
Si vous utilisez UiImagePickerController pour obtenir l'image, un JPG ne serait pas stocké dans le répertoire TMP. Je ne suis pas sûr de la réponse pour cela, mais FFMPEG, plus spécifiquement les bibliothèques derrière elle, peut être votre option. p>
J'espère que mon code pourrait vous aider. C'est moche. Je pense que Apple devrait ouvrir ce genre d'API. Bien sûr, tous les NSLOG () doivent être supprimés. C'est juste pour la démonstration.
alvin p>
Pour Rahul Vyas, le code est utilisé dans mon projet et ça va bien.
Cast contextInfo à un Nstring: (Nstring *) contextinfo
À moins que je ne manque quelque chose, cela semble que cela dépend de l'ajout de la vidéo à la bibliothèque de l'utilisateur (qui peut ne pas fonctionner pour tout le monde).
Je voulais juste fournir une mise à jour à ce sujet. Les choses semblent fonctionner en termes d'obtention de la vignette lorsque vous avez défini votre sélecteur sur UiImagePickerControlSourceTypecamera. Cependant, lorsque vous essayez de choisir de la bibliothèque existante (c'est-à-dire UiImagePickerControlSourcePephotolibary) Le .jpg pour la vignette n'est jamais créé. J'ai même essayé de réutiliser avec Uisavevideoatpathtosavedphotosalbum (...) et toujours pas de dés. Il semble que la vignette soit créée pour la première fois lorsque la vidéo est capturée. C'est votre seule occasion de "saisir" ça. Ensuite, il est déplacé dans un sous-répertoire de / var / mobile / média / DCIM /. Bien que vous puissiez réellement répertorier l'image de la vignette et voir ceci, ce fichier est illisible et inconfortable, car je pense que le répertoire est protégé. p>
Si quelqu'un a une solution de contournement pour cela, je l'apprécierais grandement comme dans mon cas, je dois attraper la vignette de la vidéo existante après la sélection de la bibliothèque. P>
Utilisez la solution E-MADD pour les deux scénarios
Voici un article de blog sur l'extraction des cadres des films à l'aide de FFMPEG: P>
http://www.codza.com/extracting-frame -from-films-on-iphone p>
Le projet correspondant sur github: iframeExtractor p>
Meilleure méthode que j'ai trouvée ... MpmoviePlayController ThumbnailImagateur
Cette. Créez simplement une instance de mpmovieplayPontroller et utilisez-la pour saisir une vignette à partir du chemin du chemin dans le rappel, que ce soit à partir de la bibliothèque ou d'une vidéo que vous venez d'enregistrer. Fonctionne bien.
Cette méthode est la meilleure, sans aucun doute. Cependant est disponible auprès de l'IOS 3.2 et ultérieure. Donc, si vous souhaitez supporter plus ancien IOS sur votre candidature. Vous devrez utiliser l'autre méthode.
Note importante ... MpmoviePlayPontroller semble Autoplay B> après init. Assurez-vous d'arrêter explicitement une fois que vous le créez ou que les utilisateurs entendent sonner leurs haut-parleurs si elles ne sont pas sourdines.
Un problème avec cette méthode avec cette méthode est que même si j'enregistre la vidéo localement, la durée est définie sur 0 après avoir créé le joueur. On dirait que je dois attendre que la durée a changé de rappel, juste pour obtenir une vignette, car je veux une vignette de la dernière image.
NSString *videoLink=[info objectForKey:@"UIImagePickerControllerMediaURL"]; MPMoviePlayerController *player = [[MPMoviePlayerController alloc] initWithContentURL:(NSURL*)videoLink]; UIImage *imageSel = [player thumbnailImageAtTime:1.0 timeOption:MPMovieTimeOptionNearestKeyFrame]; [player stop]; [player release];