Экспорт видео с помощью PhotoKit (PHAsset) каждый раз дает разные видеофайлы

Я использую метод (конец этого вопроса), чтобы получить видео с устройства. Что он делает, он находит первое видео в библиотеке, создает сеанс экспорта и экспортирует видео в файл MOV.

После двух запусков приложения (остановка приложения между запусками метода) сравниваются два результирующих файла. Оба файла разные. Я ожидал, что оба файла будут одинаковыми, так как экспортируется один и тот же ресурс.

Еще одно замечание: запуск метода дважды за один и тот же запуск приложения дает мне два идентичных файла, как и ожидалось.

Можно ли заставить PhotoKit экспортировать один и тот же файл при каждом запуске?

- (void)testVideoRetrievalSO {

    PHAsset *oneVideo = [[PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeVideo options:nil] firstObject];

    PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
    options.networkAccessAllowed = YES;
    options.deliveryMode = PHVideoRequestOptionsDeliveryModeHighQualityFormat;
    options.version = PHVideoRequestOptionsVersionOriginal;


    [[PHImageManager defaultManager] requestExportSessionForVideo:oneVideo
                                                          options:options
                                                     exportPreset:AVAssetExportPresetPassthrough
                                                    resultHandler:
     ^(AVAssetExportSession * _Nullable exportSession, NSDictionary * _Nullable info) {
         NSLog(@"Video test run on asset %@", oneVideo.localIdentifier);
         NSString *folderPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES).firstObject;
         NSString *fileName = [[[NSUUID UUID] UUIDString] stringByAppendingPathExtension:@"mov"];
         NSString *tempFile = [folderPath stringByAppendingPathComponent:fileName];
         NSURL *tempFileUrl = [NSURL fileURLWithPath:tempFile];

         [exportSession setOutputFileType:AVFileTypeQuickTimeMovie];
         [exportSession setOutputURL:tempFileUrl];

         [exportSession exportAsynchronouslyWithCompletionHandler:^{
             NSLog(@"Video test run exported video into file: %@", tempFile);
         }];
     }];
}

1 ответ

Решение

ОБНОВЛЕНО

Это не ясно, но я думаю, что экспорт видео с камеры не гарантирует получение одного и того же видео каждый раз. Поэтому я скопировал видео с рулона камеры в папку с документом с помощью url (avurlasset.URL) с помощью [NSFileManager copyItemAtURL:toURL:error:], после чего он копирует один и тот же видеофайл каждый раз. На данный момент это мое окончательное решение.

В этом случае вы должны использовать requestAVAssetForVideo, а не requestExportSessionForVideo

Так что в вашем случае,

PHVideoRequestOptions *options = [PHVideoRequestOptions new];
options.version = PHVideoRequestOptionsVersionOriginal;

[[PHImageManager defaultManager] requestAVAssetForVideo:asset
                                                options:options
                                          resultHandler:
 ^(AVAsset * _Nullable avasset,
   AVAudioMix * _Nullable audioMix,
   NSDictionary * _Nullable info)
{
     NSError *error;
     AVURLAsset *avurlasset = (AVURLAsset*) avasset;

     // Write to documents folder
     NSURL *fileURL = [NSURL fileURLWithPath:tmpShareFilePath];
     if ([[NSFileManager defaultManager] copyItemAtURL:avurlasset.URL
                                                 toURL:fileURL
                                                 error:&error]) {
         NSLog(@"Copied correctly");
     }
 }];
Другие вопросы по тегам