2012-05-10 5 views
0

Я создаю фильм с массивом изображений и аудиофайла и сохраняю созданный фильм в библиотеке фотографий, в симуляторе я получаю правильный фильм с моим массивом изображений и аудиофайлов, но пока работаю в устройстве. Я не получаю свой обработанный фильм, вместо этого получаю видео, которое я добавил (OutPut.mov, который я использовал в своем коде), чтобы написать мой выходной файл (смешанный звук и массив файлов изображений).Не получается приведенный фильм в PhotoLibrary iPad

вот мой код, чтобы сохранить мое смешанное аудио и массив изображений файла на фото Lib:

AVMutableComposition* mixComposition = [AVMutableComposition composition]; 
NSString* audio_inputFilePath = [[NSBundle mainBundle] pathForResource:@"Ruler" ofType:@"caf"]; 
NSURL* audio_inputFileUrl = [NSURL fileURLWithPath:audio_inputFilePath]; 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = ([paths count] > 0) ? [paths objectAtIndex:0] : nil; 


NSString *video_inputFilePath = [documentsDirectory stringByAppendingPathComponent:@"videoOutput1234videoOutput1234.mp4"]; 
NSLog(@"output url %@",video_inputFilePath); 


NSURL* video_inputFileUrl = [NSURL fileURLWithPath:video_inputFilePath]; 


NSString* outputFilePath = [[NSBundle mainBundle] pathForResource:@"OutPut" ofType:@"mov"]; 
NSURL* outputFileUrl = [NSURL fileURLWithPath:outputFilePath]; 

if ([[NSFileManager defaultManager] fileExistsAtPath:outputFilePath]) 
    [[NSFileManager defaultManager] removeItemAtPath:outputFilePath error:nil]; 


if ([[NSFileManager defaultManager] fileExistsAtPath:outputFilePath]) 
    [[NSFileManager defaultManager] removeItemAtPath:outputFilePath error:nil]; 

CMTime nextClipStartTime = kCMTimeZero; 

AVURLAsset* videoAsset = [[AVURLAsset alloc]initWithURL:video_inputFileUrl options:nil]; 
CMTimeRange video_timeRange = CMTimeRangeMake(kCMTimeZero,videoAsset.duration); 
AVMutableCompositionTrack *a_compositionVideoTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeVideo preferredTrackID:kCMPersistentTrackID_Invalid]; 

[a_compositionVideoTrack insertTimeRange:video_timeRange ofTrack:[[videoAsset tracksWithMediaType:AVMediaTypeVideo] objectAtIndex:0] atTime:nextClipStartTime error:nil]; 



AVURLAsset* audioAsset = [[AVURLAsset alloc]initWithURL:audio_inputFileUrl options:nil]; 
CMTimeRange audio_timeRange = CMTimeRangeMake(kCMTimeZero, audioAsset.duration); 
AVMutableCompositionTrack *b_compositionAudioTrack = [mixComposition addMutableTrackWithMediaType:AVMediaTypeAudio preferredTrackID:kCMPersistentTrackID_Invalid]; 
[b_compositionAudioTrack insertTimeRange:audio_timeRange ofTrack:[[audioAsset tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0] atTime:nextClipStartTime error:nil]; 


AVAssetExportSession* _assetExport = [[AVAssetExportSession alloc] initWithAsset:mixComposition presetName:AVAssetExportPresetHighestQuality]; 
_assetExport.outputFileType = @"com.apple.quicktime-movie"; 
_assetExport.outputURL = outputFileUrl; 

[_assetExport exportAsynchronouslyWithCompletionHandler:^(void) {[self saveVideoToAlbum:outputFilePath]; }  ]; 

ответ

5

Вы должны написать видеофайл в PhotoLibrary пути как ..

- (void)writeVideoToPhotoLibrary:(NSURL *)url 
{ 
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init]; 

    [library writeVideoAtPathToSavedPhotosAlbum:url completionBlock:^(NSURL *assetURL, NSError *error){ 
     if (error) { 
      NSLog(@"Video could not be saved"); 
     } 
    }]; 
    [library release]; 
} 

- (void)video:(NSString *)videoPath didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo { 
    // Let's see what happened 
    NSLog(@"finished"); 
    NSLog(@":error : %@", error); 
}