我正在尝试将我的代码从 ALAssetLibrary 迁移到 Photos Framework,但是当我将文件写入沙箱时出现问题,生成的文件的大小不匹配。
使用 ALAssetRepresentation 写入文件:
[[NSFileManager defaultManager] createFileAtPath:localFilePath contents:nil attributes:nil];
NSFileHandle *handle = [NSFileHandle fileHandleForWritingAtPath:localFilePath];
static const NSUInteger kBufferSize = 10 * 1024;
uint8_t *buffer = calloc(kBufferSize, sizeof(*buffer));
NSUInteger offset = 0, bytesRead = 0;
do {
bytesRead = [assetRepresentation getBytes:buffer fromOffset:offset length:kBufferSize error:nil];
[handle writeData:[NSData dataWithBytesNoCopy:buffer length:bytesRead freeWhenDone:NO]];
offset += bytesRead;
} while (bytesRead > 0);
free(buffer);
[handle closeFile];
使用 AVAssetExportSession 编写文件:
PHVideoRequestOptions *options = [[PHVideoRequestOptions alloc] init];
options.version = PHVideoRequestOptionsVersionOriginal;
options.networkAccessAllowed = YES;
[[PHImageManager defaultManager] requestExportSessionForVideo:_phasset options:options exportPreset:AVAssetExportPresetPassthrough
resultHandler:^(AVAssetExportSession *exportSession, NSDictionary *info) {
exportSession.outputURL = [NSURL fileURLWithPath:localFilePath];
exportSession.outputFileType = AVFileTypeQuickTimeMovie;
[exportSession exportAsynchronouslyWithCompletionHandler:
}];
}];
问题是输出文件不完全相等,当我重现视频时似乎是相同的视频,但文件的大小不匹配。例如,使用 ALAssetRepresentation 创建的短视频(2 秒)的大小为 229KB,使用 AVAssetExportSession 的大小为 227KB。
生成的文件应该是相等的,因为我使用基于文件内容的 CRC。
先感谢您。