gpt4 book ai didi

ios - 使用 PhotoKit (PHAsset) 导出视频每次都会给出不同的视频文件

转载 作者:可可西里 更新时间:2023-11-01 17:14:19 33 4
gpt4 key购买 nike

我使用方法(这个问题的结尾)从设备中检索视频。它的作用是在库中找到第一个视频,创建导出 session 并将视频导出到 MOV 文件中。

应用程序运行两次后(在方法运行之间停止应用程序),将比较两个生成的文件。两个文件不同。我原以为这两个文件是相同的,因为正在导出相同的 Assets 。

还有一点要注意:在同一个应用程序运行中运行该方法两次会得到两个相同的文件。

是否可以使 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);
}];
}];
}

最佳答案

已更新

不清楚,但我认为从相机胶卷导出视频并不能保证每次都能获取相同的视频。所以我通过 [NSFileManager copyItemAtURL:toURL:error:] 将视频从相机胶卷复制到我的带有 url (avurlasset.URL) 的文档文件夹,然后它每次都复制相同的视频文件。现在这是我的最终解决方案。

在这种情况下,您必须使用 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");
}
}];

关于ios - 使用 PhotoKit (PHAsset) 导出视频每次都会给出不同的视频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38196661/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com