1

我正在尝试将我的代码从 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。

先感谢您。

4

0 回答 0