使用
AVAssetWriter
将捕获的音频和视频保存到文件中。 它在我自己的机器上一直正常工作,但 Apple 的应用程序审核团队报告在完成录制时发生崩溃。
在报告中,线程崩溃于
finishWriting(completionHandler:)
。
我的代码停止编写:
var videoWriterInput: AVAssetWriterInput!
var audioWriterInput: AVAssetWriterInput!
var videoWriter: AVAssetWriter!
var isRecording = false
func stopVideoWriter() async {
guard isRecording else { return }
isRecording = false
videoWriterInput.markAsFinished()
audioWriterInput.markAsFinished()
videoWriter.finishWriting { [self] in
videoWriter = nil
videoWriterInput = nil
audioWriterInput = nil
}
}
一些SO帖子提到在停止之前检查
videoWriter.status
,但这似乎根本没有帮助。此外,没有任何文档表明有必要在完成之前检查状态。
Apple 的 finishWriting(completionHandler:)
文档提到以下内容:
为了确保资产编写者完成所有示例的编写,请调用此 仅在所有调用append(:)或之后才使用方法 追加(:withPresentationTime :)返回。
该应用程序在我自己的测试机器上运行良好,因此我无法确认这是发生崩溃的实际部分。
有什么想法吗?
你解决这个问题了吗?同样的问题,我的代码如下
private var MixassetWriter: AVAssetWriter?
guard 让 assetWriter = MixassetWriter else { 返回 } self.MixisRecording = false
assetWriter.finishWriting {
self.MixassetWriter = nil
if assetWriter.status == .completed {
debugPrint(" completed file success")
completion(assetWriter.outputURL)
} else {
debugPrint(" completed file failed = ", assetWriter.status.rawValue)
}
}