我正在使用AVFoundation使用以下方法将视频录制到NSTemporaryDirectory。
[[self movieFileOutput] startRecordingToOutputFileURL:[self outputFileURL] recordingDelegate:self];
录制停止后
[library writeVideoAtPathToSavedPhotosAlbum:outputFileURLcompletionBlock:^(NSURL *assetURL, NSError *error)`
调用方法。
我注意到,当视频从临时目录写入照片库时,它会保留在那里直到保存完成。
这对我没有意义,因为它在保存视频时需要加倍的磁盘空间。例如,如果我录制一小时长的1080p视频,则在录制结束时磁盘上的大小为5GB,但在删除临时文件并释放磁盘空间之前保存到照片库时最大为10GB。 / p>
很想听听你对此的看法。
答案 0 :(得分:0)
我认为,最好将视频暂时存储到文档目录中 .mp4 。
然后保存到Document-directory并在保存后将其删除。
NSString *videoPath = [[self getDirectoryPath:[NSString stringWithUTF8String:currentRequest.fileName]] retain];
NSURL *videoPathURL = [NSURL URLWithString:videoPath];
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:videoPathURL completionBlock:^(NSURL *assetURL, NSError *error) {
//Delete "videoPath" file from Document directory
}];
-(NSString *)getDirectoryPath:(NSString *)fileName {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
NSString *path = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.mp4",fileName]];
return path;
}
答案 1 :(得分:0)
似乎在录制时无法直接在照片库中写入视频文件。但是您可以将在应用程序目录中写入的文件(例如临时文件,文档等)移动到照片库中,而不用复制文件。因此,您可以避免在设备上有多余的空间,以便将录制的文件保存在照片库中。
我在下面添加了确切的API,可用于将记录的文件移动到照片库。
PHPhotoLibrary.shared().performChanges({
let options = PHAssetResourceCreationOptions()
options.shouldMoveFile = true
let creationRequest = PHAssetCreationRequest.forAsset()
creationRequest.addResource(with: .video, fileURL: outputFileURL, options: options)
}, completionHandler: { success, error in
if !success {
print("Couldn't save the movie to your photo library: \(String(describing: error))")
}
cleanup()
}
)
上面示例中将文件移动到照片库的主要部分是
let options = PHAssetResourceCreationOptions()
options.shouldMoveFile = true