iam capable d'enregistrer la vidéo en utilisant AVFoundation ou UiImagePickerController. Mais je suis incapable de couper la vidéo d'une seconde d'une seconde à une autre durée / heure particulière. Est-ce que quelqu'un peut m'aider? P>
merci, Siva Krishna. P>
4 Réponses :
Vous pouvez avoir l'uiimagePickerController activer la réduction
-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
if ([self.popoverLibraryBrowser isPopoverVisible])
{
[self.popoverLibraryBrowser dismissPopoverAnimated:YES];
}
NSString *type = [info objectForKey:UIImagePickerControllerMediaType];
if ([type isEqualToString:(NSString *)kUTTypeVideo] ||
[type isEqualToString:(NSString *)kUTTypeMovie]) { // movie != video
NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
NSNumber *start = [info objectForKey:@"_UIImagePickerControllerVideoEditingStart"];
NSNumber *end = [info objectForKey:@"_UIImagePickerControllerVideoEditingEnd"];
// if start and end are nil then clipping was not used.
// You should use the entire video.
int startMilliseconds = ([start doubleValue] * 1000);
int endMilliseconds = ([end doubleValue] * 1000);
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSFileManager *manager = [NSFileManager defaultManager];
NSString *outputURL = [documentsDirectory stringByAppendingPathComponent:@"output"] ;
[manager createDirectoryAtPath:outputURL withIntermediateDirectories:YES attributes:nil error:nil];
outputURL = [outputURL stringByAppendingPathComponent:@"output.mp4"];
// Remove Existing File
[manager removeItemAtPath:outputURL error:nil];
//[self loadAssetFromFile:videoURL];
[self.recorder dismissModalViewControllerAnimated:YES];
AVURLAsset *videoAsset = [AVURLAsset URLAssetWithURL:videoURL options:nil];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:videoAsset presetName:AVAssetExportPresetHighestQuality];
exportSession.outputURL = [NSURL fileURLWithPath:outputURL];
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
CMTimeRange timeRange = CMTimeRangeMake(CMTimeMake(startMilliseconds, 1000), CMTimeMake(endMilliseconds - startMilliseconds, 1000));
exportSession.timeRange = timeRange;
[exportSession exportAsynchronouslyWithCompletionHandler:^{
switch (exportSession.status) {
case AVAssetExportSessionStatusCompleted:
// Custom method to import the Exported Video
[self loadAssetFromFile:exportSession.outputURL];
break;
case AVAssetExportSessionStatusFailed:
//
NSLog(@"Failed:%@",exportSession.error);
break;
case AVAssetExportSessionStatusCancelled:
//
NSLog(@"Canceled:%@",exportSession.error);
break;
default:
break;
}
}];
//NSData *videoData = [NSData dataWithContentsOfURL:videoURL];
//NSString *videoStoragePath;//Set your video storage path to this variable
//[videoData writeToFile:videoStoragePath atomically:YES];
//You can store the path of the saved video file in sqlite/coredata here.
}
}
Merci pour la source. Quand j'utilise "* Sourcetypes" comme "UiimagePickerControlsourcetypecamera", je reçois "* Début et * heure de fin". Mais quand j'utilise "* Sourcetypes" comme "UiImagePickerControlsourcetypeDedPedPhedPhedPhotosalbum", je ne reçois pas de temps "Démarrer et finir". Quel est le problème? Comment puis-je obtenir le temps "Démarrer et finir"?
Avez-vous donné leur capacité à "couper" la vidéo? La partie qui remplit le début du début et la fin est la coupure. Si vous ne clipiez pas la vidéo, ces valeurs sont laissées à tour de rôle, ce qui signifie que le coupure doit être ignoré et que toute la vidéo doit être utilisée.
Veuillez vous reporter au journal ici Pastebin.com/umu1k61T . Je permet à l'utilisateur de sélectionner les cadres de la vignette. Pas de problème, si je modifie la "vidéo enregistrée de la caméra" et que le problème se produit lorsque j'essaie de sélectionner les cadres des vidéos chargées de l'album.
@karthi lors de l'utilisation uiImagePickerControlsourcetypesavedPhotosalbum code>, l'URL que vous obtenez de [info objetforkey: uiimagepickercontrolmermediaul]; code> est référencé à un fichier vidéo coupé, donc pas besoin de l'heure de début et de fin. Je sais que parce que je reçois la durée de l'URL à partir de [Info ObjectForKey: UiImagePickerControlmermediAURL]; Code> et le comparez à la durée de la vidéo d'origine. Comment obtenir la durée de la vidéo < / a>
Au lieu de vérifier un film ou i> une vidéo, vous devez vérifier si le type est conforme à un film: uttypeconformsto ((__ pont cfstringref) mediatype, kuttypemovie)! = 0 code>. Cela sera vrai des films et des vidéos.
@THelazyCoder - Les littéraux de chaîne sont-ils _UIImagePickerControlvideOeditingStartStart CODE> et FIN CODE> Documé quelque part? Dans OS9, le dictionnaire Info semble contenir uniquement le chemin de la vidéo modifiée.
C'est juillet 2019 - peu nombreux changé! Les objets "_UIIMagePickerVollerv lidiImagePickerVollerv lidiImagePickERVIting" et contrepartie "sont maintenant renvoyés nul pour moi et l'UIIMagePickerControlmermediAURL désigne maintenant une vidéo modifiée réelle qui résulte de votre coupure. Je ne sais pas quand cela a commencé à se produire - sauf que mon code qui vérifie le début et la fin valides a été déclenché et hé, il semble tout simplement faire ce que vous auriez attendu. Si quelqu'un d'autre peut vérifier cela, je pense que nous devons changer la réponse acceptée. Je cours iOS 12.3.1 sur mon iPhone XS.
Vous devriez ajouter KuttyPemovie dans le tableau de setMédiatures et cela fonctionnera. P>
version rapide de ci-dessus
Cette solution échoue à quelques vidéos. Aucune suggestion?
En tant que programmeur, vous devez savoir que "échoue" n'est pas un moyen approprié de décrire un bug / problème
Il manquait de vidéos de nuage, que j'ai débogué et compris. Et j'ai dit échoué, car je n'ai pas pu obtenir de scénario, alors pensé à vous demander si vous avez rencontré un problème étrange comme celui-ci. Quoi qu'il en soit, j'ai résolu le problème. Et la prochaine fois, veuillez parler joliment de tout développeur.
La meilleure solution pour 4 rapide, j'ai trouvé y . Je l'ai correctement corrigé pour mes besoins, mais c'est vraiment clair et commodité. Le code: p>
Trouvé cette question en recherchant quelque chose pour couper une vidéo existante. La taille de vidéos capturées est relativement simple vers l'avant. Mais obtenir cette fenêtre de garniture pour apparaître semble m'éloigner. J'espère que ma réponse ci-dessous aide.