我正面临着这个非常奇怪的问题。我试图在触摸按钮时合并视频轨道和音频轨道。第一次触摸按钮时,它将开始同时录制视频和音频(由于某些原因,我需要分别录制它们),而第二次,它停止录制并创建两个指向视频和音频的URL 。
这是奇怪的事情。当我像这样将函数放在一起时:
@objc func touchCameraButton(){
if isVideoRecordingOn{
if isFirstTouch{
startCapture()
recordAudio()
isFirstTouch = false
}else{
startCapture()
recordAudio()
self.mergeVideoAndAudio(videoUrl: videoFileURL, audioUrl: soundFileURL!, shouldFlipHorizontally: true, completion: {(err, url) in
self.videoWithAudioURL = url
if (err != nil){
print(err?.localizedDescription ?? "Error in merging video and audio")
}
self.isFirstTouch = true
})
}
}
}
它不起作用,并引发NSException类型的未捕获异常。
但是,如果我将合并功能分别放在另一个按钮中,则整个程序可以正常工作。看起来像这样:
@objc func touchCameraButton(){
if isVideoRecordingOn{
if isFirstTouch{
startCapture()
recordAudio()
isFirstTouch = false
}else{
startCapture()
recordAudio()
// startCapture()
// recordAudio()
// self.mergeVideoAndAudio(videoUrl: videoFileURL, audioUrl: soundFileURL!, shouldFlipHorizontally: true, completion: {(err, url) in
// self.videoWithAudioURL = url
// if (err != nil){
// print(err?.localizedDescription ?? "Error in merging video and audio")
// }
// self.isFirstTouch = true
// })
}
}
}
@IBAction func touchSomeButton(_ sender: Any) {
self.mergeVideoAndAudio(videoUrl: videoFileURL, audioUrl: soundFileURL!, shouldFlipHorizontally: true, completion: {(err, url) in
self.videoWithAudioURL = url
if (err != nil){
print(err?.localizedDescription ?? "Error in merging video and audio")
}
})
}
我已经被这个问题困扰了两天,对发生的事情一无所知。我猜这可能是我不知道的后台线程和主线程存在问题。