我正在使用AVAssetWriter和AVAssetWriterInputPixelBufferAdaptor从AVCaptureSession捕获视频。我正在将文件写入App的Caches目录。完成后,我将视频保存到相机胶卷。
现在问题在于: 从10到20分钟的短暂捕获会议,事情很好。大约30分钟后,我在调用[assetWriter finishWriting]时遇到此错误:
Error Domain=AVFoundationErrorDomain Code=-11800 "The operation could not be completed"
UserInfo=0x1a1d30 {NSLocalizedFailureReason=An unknown error occurred (268451843),
NSUnderlyingError=0x1936e0 "The operation couldn’t be completed. (OSStatus error
268451843.)", NSLocalizedDescription=The operation could not be completed}
另一个有趣的事情是,它实际上确实将视频保存到相机胶卷,但在某一点之后视频似乎已损坏。 VLC显示视频长度为1小时,但仅播放前30分钟。然后削减黑色。
我为什么这样做是无能为力的。
我使用的是iOS 5.0,iPhone 4S,使用30 FPS,1920x1080和使用AVFileTypeMPEG4进行录制。
有什么想法吗?
答案 0 :(得分:2)
我将大型文件保存到库中的最佳做法是以下代码(最初来自avcam by apple):
ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
[library writeVideoAtPathToSavedPhotosAlbum:outputFileURL
completionBlock:^(NSURL *assetURL, NSError *error) {
if (error) {
// writing error occur
}
}];
[library release];
其中outputFileURL是临时摄像机文件的URL(可以保存在应用程序临时文件夹或文档中)。 欢迎您查看我放在github上的示例项目:AVCam-CameraReleaseTest这似乎适用于长视频(3GS iOS 4.0)