Ошибка при записи видео против некоторых изображений Apple Live

Я заполняю ресурсы галереи в своем приложении. В моем приложении живые изображения Apple рассматриваются как видео. Я явно пишу видео против изображения Apple Live. Некоторые из моих живых изображений Apple правильно записаны в виде видео, в то время как я получаю ошибку для некоторых моих изображений. Описание ошибки NSError гласит: "операция не может быть завершена. [Ошибка какао -1].

Следующий метод возвращает ошибку для некоторых медиа-объектов: PHDSsetResourceManager's writeDataForAssetResource

Ниже приведен мой метод, который принимает массив идентификаторов Apple Live и мой массив пользовательских объектов в качестве параметров и выполняет обработку путем поиска активов по переданным идентификаторам Apple Live ID в массиве пользовательских объектов.

- (void)updateAssetsToVideoFromLivePhotos:(NSMutableArray*)array objectsArray:(NSMutableArray*) mediaObjectsArray withCompletionHandler:(void (^)(void))completionBlock {
    PHFetchOptions *fetchOptions = [PHFetchOptions new];
    PHFetchResult *fetchResult = [PHAsset fetchAssetsWithLocalIdentifiers:array options:fetchOptions];
    
    for (NSInteger i = 0; i < [fetchResult count]; i++) {
        PHAsset *phAsset = [fetchResult objectAtIndex:i];
        
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        
        NSString *assetID = phAsset.localIdentifier;
        NSRange range = [assetID rangeOfString:@"/"];
        if (range.location != NSNotFound) {
            assetID = [assetID substringToIndex:range.location];
        }
        NSString *outputPath = [documentsDirectory stringByAppendingFormat:@"/%@.mp4", assetID];
        BOOL videoExists = [[NSFileManager defaultManager] fileExistsAtPath:outputPath];
        NSError * errorRef;
        if (videoExists) {
            [[NSFileManager defaultManager] removeItemAtPath:outputPath error:&errorRef];
        }
        NSURL *outputURL = [NSURL fileURLWithPath:outputPath];
        
        NSArray *assetResources = [PHAssetResource assetResourcesForAsset:phAsset];
        for (NSInteger j = 0; j < [assetResources count]; j++){
            PHAssetResource* assetResource = [assetResources objectAtIndex:j];
            if (assetResource.type == PHAssetResourceTypePairedVideo){
                PHAssetResourceRequestOptions *requestOptions =[PHAssetResourceRequestOptions new];
                [[PHAssetResourceManager defaultManager]
                 writeDataForAssetResource:assetResource
                 toFile:outputURL
                 options:requestOptions
                 completionHandler:^(NSError *error) {
                     
                     
                         if (!error){
                             for (NSInteger i = 0; i < [mediaObjectsArray count]; i++){
                                 MyCustomObject *mediaObject = [mediaObjectsArray
                                                               objectAtIndex:i];
                                 if ([mediaObject matchesAssetID:assetID]){
                                     [mediaObject updateForAppleLivePhoto:
                                      [outputURL absoluteString]];
                                     break;
                                 }
                             }
                         } else  {
                             NSLog(@"%@",[error localizedDescription]);
                         }
                 }];
            }
        }
    }
    dispatch_async(dispatch_get_main_queue(), ^{
        [[NSNotificationCenter defaultCenter] postNotificationName:@"mediaUpdated" object:nil];
    });
    completionBlock();
    
}

0 ответов

Другие вопросы по тегам