Экспорт видео с помощью 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");
}
}];