我在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
的一部分,func captureOutput( captureOutput: AVCaptureFileOutput!, didFinishRecordingToOutputFileAtURL outputFileURL: NSURL!, fromConnections connections: [AnyObject]!, error: NSError! )
负责响应录制视频文件(对应于Apple文档)过程中发生的事件。
视频输出在用户场景1中完全无瑕疵。但是,在用户场景2中,视频输出缺少一些音频位。换句话说,在视频结束时,视频仍在播放,而没有声音。
我知道当达到最大录制时间时, // Error during video recording
if let error = error, let finishedSuccessful = error.userInfo[ AVFoundation.AVErrorRecordingSuccessfullyFinishedKey ] as? Bool
{
// Video was not successfully recorded
if !finishedSuccessful
{
return
}
}
会引发以下错误:
错误域= AVFoundationErrorDomain代码= -11810“录制停止”UserInfo = {AVErrorTimeKey = CMTime:{120/30 = 4.000},AVErrorRecordingSuccessfullyFinishedKey = true,NSLocalizedDescription =录制已停止,NSLocalizedFailureReason =录制达到最大允许长度。 NSUnderlyingError = 0x175324c0 {错误域= NSOSStatusErrorDomain代码= -16413“(null)”}}
我在方法的开头添加了一些代码,以检查在抛出该错误时录制是否仍然成功完成:
{{#each myMap}}
console.log("key: " + {{@key}} + ", this: " + {{this}});
{{/each}}
即使代码按预期运行,如上所述,视频结果最终会丢失一些音频。我想知道是否有办法解决这个问题?
答案 0 :(得分:1)
不确定修复错误,但有一种方法可以避免它。忽略maxRecordedDuration
功能并构建自己的倒计时器。这样你就可以确保方案1是唯一可能的方案。
有多种方法可以实现这一目标。一个非常简单的可能是从录制开始的那一刻起延迟X秒执行stopRecording()
。