macOS:AVAssetWriter 在 markAsFinished / finishWriting 时崩溃

问题描述 投票:0回答:1

使用

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 :)返回。

该应用程序在我自己的测试机器上运行良好,因此我无法确认这是发生崩溃的实际部分。

有什么想法吗?

swift macos avassetwriter avassetwriterinput
1个回答
0
投票

你解决这个问题了吗?同样的问题,我的代码如下

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)
        }
    }
© www.soinside.com 2019 - 2024. All rights reserved.