J'ai mis en place une superposition de vue lors de l'appel de vue de la caméra avant l'enregistrement de la vidéo.
pickerController.cameraOverlayView =myOverlay;
L'enregistrement vidéo et l'enregistrement de la vidéo dans l'Album, après l'enregistrement de la vidéo et de la partager via e-mail, etc. tout fonctionne très bien.
Si j'utilise la qualité de la vidéo de "Haute qualité", puis la vidéo enregistrée est devenue énorme taille. Par exemple, si j'enregistre une vidéo de 30 secondes avec de haute qualité, la vidéo enregistrée est devenu autour de 30 40 mo.
pickerController.videoQuality = UIImagePickerControllerQualityTypeHigh;
Comment puis-je programme pour compresser la grande qualité de la vidéo enregistrée avant de le partager, comme Apple le fait avec built-in de l'enregistreur Vidéo?
Merci de me guider pour résoudre ce problème.
Merci!
Mise à JOUR:
C'est ce que j'essaie récemment, mais toujours sans succès: je veux compresser la vidéo enregistrée prise, qui vient de didFinishPickingMediaWithInfo et de les stocker dans le même album photo vidéo en chemin lui-même, pas n'importe où ailleurs. J'ai testé la même vidéo est compressé à de très petite taille quand je pique la photo de la bibliothèque, mais la même vidéo prise à partir de la caméra et est venu via didFinishPickingMediaWithInfo n'est pas compressé, bien que j'ai utilisé le AVAssetExportSession code ci-dessous.
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];
if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
{
NSURL *videoURL = [info objectForKey:UIImagePickerControllerMediaURL];
NSString *urlPath = [videoURL path];
if ([[urlPath lastPathComponent] isEqualToString:@"capturedvideo.MOV"])
{
if (UIVideoAtPathIsCompatibleWithSavedPhotosAlbum (urlPath))
{
[self copyTempVideoToMediaLibrary :urlPath];
}
else
{
NSLog(@"Video Capture Error: Captured video cannot be saved...didFinishPickingMediaWithInfo()");
}
}
else
{
NSLog(@"Processing soon to saved photos album...else loop of lastPathComponent..didFinishPickingMediaWithInfo()");
}
}
[self dismissModalViewControllerAnimated:YES];
}
- (void)copyTempVideoToMediaLibrary :(NSString *)videoURL {
dispatch_queue_t mainQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
dispatch_async(mainQueue, ^{
ALAssetsLibrary *library = [[[ALAssetsLibrary alloc] init] autorelease];
ALAssetsLibraryWriteVideoCompletionBlock completionBlock = ^(NSURL *assetURL, NSError *error) {
NSLog(@"Saved URL: %@", assetURL);
NSLog(@"Error: %@", error);
if (assetURL != nil) {
AVURLAsset *theAsset = [AVURLAsset URLAssetWithURL:[NSURL URLWithString:videoURL] options:nil];
NSArray *compatiblePresets = [AVAssetExportSession exportPresetsCompatibleWithAsset:theAsset];
AVAssetExportSession *exportSession = [[AVAssetExportSession alloc] initWithAsset:theAsset presetName:AVAssetExportPresetLowQuality];
[exportSession setOutputURL:[NSURL URLWithString:videoURL]];
[exportSession setOutputFileType:AVFileTypeQuickTimeMovie];
[exportSession exportAsynchronouslyWithCompletionHandler:^ {
switch ([exportSession status]) {
case AVAssetExportSessionStatusFailed:
NSLog(@"Export session faied with error: %@", [exportSession error]);
break;
default:
//[self mediaIsReady];
break;
}
}];
}
};
[library writeVideoAtPathToSavedPhotosAlbum:[NSURL URLWithString:videoURL] completionBlock:completionBlock];
});
}