我在 Swift 中实现了一个录像机,作为 iOS 应用程序的一部分,我将视频输出的 maxRecordedDuration 设置为 4 秒(每秒 30 帧):
self.videoOutput?.maxRecordedDuration = CMTimeMakeWithSeconds( 4, 30 )
当用户开始录制时,可能会发生两种情况:
- 用户决定在达到最大录制持续时间之前停止录制。
- 在用户停止视频录制之前达到最大录制持续时间。
在这两种情况中的任何一种情况下
func captureOutput( captureOutput: AVCaptureFileOutput!, didStartRecordingToOutputFileAtURL fileURL: NSURL!, fromConnections connections: [AnyObject]! )
和
func captureOutput( captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError! )
将被触发,因为它们是 的一部分AVCaptureFileOutputRecordingDelegate
,它负责响应录制视频文件过程中发生的事件(对应于 Apple 文档)。
视频输出在用户场景 1 中完全完美。但是,在用户场景 2 中,视频输出缺少一些音频位。换句话说,在视频结束时,视频仍在播放而没有声音。
我知道当达到最大录制持续时间时,func captureOutput( captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError! )
会引发以下错误:
错误域=AVFoundationErrorDomain 代码=-11810 “录制已停止” UserInfo={AVErrorTimeKey=CMTime: {120/30 = 4.000}, AVErrorRecordingSuccessfullyFinishedKey=true, NSLocalizedDescription=录制已停止, NSLocalizedFailureReason=录制已达到最大允许长度。, NSUnderlyingError=0x175324c0 {错误域=NSOSStatusErrorDomain 代码=-16413 "(null)"}}
我在方法的开头添加了一些代码,以检查在抛出该错误时录制是否仍然成功完成:
// Error during video recording
if let error = error, let finishedSuccessful = error.userInfo[ AVFoundation.AVErrorRecordingSuccessfullyFinishedKey ] as? Bool
{
// Video was not successfully recorded
if !finishedSuccessful
{
return
}
}
尽管代码按预期运行,但视频结果最后还是缺少一些音频,如上所述。我想知道是否有办法修复这个错误?