próbuję obrócić film do jego prawidłowej orientacji za pomocą AVAssetExportSession
i zawsze pojawia się następujący błąd:Obracanie AVAsset z AVAssetExportSession
Error Domain=AVFoundationErrorDomain Code=-11841 "The operation couldn’t be completed. (AVFoundationErrorDomain error -11841.)"
To przekłada się AVErrorInvalidVideoComposition
ale nie widzę niczego złego w moim skład wideo. Oto kod:
AVAssetTrack *sourceVideo = [[avAsset tracksWithMediaType:AVMediaTypeVideo] lastObject];
AVAssetTrack *sourceAudio = [[avAsset tracksWithMediaType:AVMediaTypeAudio] lastObject];
CGAffineTransform preferredTransform = [sourceVideo preferredTransform];
AVMutableComposition *composition = [[AVMutableComposition alloc] init];
AVMutableCompositionTrack *compositionVideoTrack = [composition addMutableTrackWithMediaType:AVMediaTypeVideo
preferredTrackID:kCMPersistentTrackID_Invalid];
AVAssetExportSession *exporter = [[[AVAssetExportSession alloc] initWithAsset:composition presetName:AVAssetExportPresetMediumQuality] autorelease];
[compositionVideoTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration)
ofTrack:sourceVideo
atTime:kCMTimeZero
error:nil];
if(!CGAffineTransformIsIdentity(preferredTransform)) {
AVMutableVideoComposition *videoComposition = [AVMutableVideoComposition videoComposition];
videoComposition.renderSize = CGSizeMake([avAsset naturalSize].height, [avAsset naturalSize].width);
videoComposition.frameDuration = CMTimeMake(1, compositionVideoTrack.naturalTimeScale);
AVMutableVideoCompositionLayerInstruction *instruction = [AVMutableVideoCompositionLayerInstruction videoCompositionLayerInstructionWithAssetTrack:sourceVideo];
[instruction setTransform:preferredTransform atTime:kCMTimeZero];
AVMutableVideoCompositionInstruction *videoTrackInstruction = [AVMutableVideoCompositionInstruction videoCompositionInstruction];
videoTrackInstruction.timeRange = CMTimeRangeMake(kCMTimeZero, avAsset.duration);
videoTrackInstruction.layerInstructions = [NSArray arrayWithObject:instruction];
[videoComposition setInstructions:[NSArray arrayWithObject:videoTrackInstruction]];
exporter.videoComposition = videoComposition;
}
AVMutableCompositionTrack *compositionAudioTrack = [composition addMutableTrackWithMediaType:AVMediaTypeAudio
preferredTrackID:kCMPersistentTrackID_Invalid];
[compositionAudioTrack insertTimeRange:CMTimeRangeMake(kCMTimeZero, avAsset.duration)
ofTrack:sourceAudio
atTime:kCMTimeZero
error:nil];
exporter.outputURL = tempPathUrl;
exporter.outputFileType = AVFileTypeQuickTimeMovie;
[exporter exportAsynchronouslyWithCompletionHandler:^{ }];
Co może być nie tak z kompozycją? Przeszedłem przez tę dokumentację i do tej pory nie widziałem niczego złego.
Czy kiedykolwiek dowiedziałeś się, dlaczego dostałeś ten błąd? – shabbirv
ok, więc wydaje się, że połowa nagrody trafia do GingerBreadMane, ponieważ odpowiedź nie działa. Wygląda na to, że nie ma społeczności programistów iOS na StackOverflow. Szkoda. –
Cierpienie z podobnego problemu na iOS 7.0.3 ... mój kod, który jest podobny działa, gdy używam właśnie nagranego wideo, ale nie działa, gdy wybieram wideo z biblioteki. To ma dla mnie niewielki sens. Poinformuję Cię, kiedy znajdę rozwiązanie. Może nie korzystać z AVExportSession. – DogpatchTech