0

我正在使用 AVAssetWriter 将屏幕重新编码保存为 mp4(带H.264视频和aac音频编码)。一切都按预期完美运行,但一些用户抱怨 0KB 视频大小问题,即没有数据写入输出文件。通过反复尝试,我能够重现此问题。它发生在几次成功写入之后(有时在 2 次之后,有时在 5 次之后,在某些机器上它从未发生过)。我比较了成功的流程和失败的日志。我发现的唯一一件事就是这个

CMIO_Unit_Converter_Audio.cpp:588:RebuildAudioConverter AudioConverterSetProperty() 失败 (1886547824)

在哪里

kAudioFormatUnsupportedPropertyError = 1886547824

这导致我在失败的情况下检查音频格式,但 AVAssetWriter 的音频格式非常好。我正在将音频写入器输入设置为 AVAssetWriter Inputs

[<AVAssetWriterInput: 0x600002047950, mediaType = vide, outputSettings = {
    AVVideoCodecKey = avc1;
    AVVideoHeightKey = 840;
    AVVideoWidthKey = 1360;
}>, <AVAssetWriterInput: 0x60000205e740, mediaType = soun, outputSettings = {
    AVFormatIDKey = 1633772320;
    AVNumberOfChannelsKey = 2;
    AVSampleRateKey = 44100;
}>]

我为视频和音频创建 AVAssetWriterInput 的代码如下 Audio AVAssetWriterInput

settings = [
    AVFormatIDKey : kAudioFormatMPEG4AAC,
    AVNumberOfChannelsKey : ch,
    AVSampleRateKey : rate,
]
audioInput = AVAssetWriterInput(mediaType: .audio, outputSettings: settings)

视频 AVAssetWriterInput

var settings: [String : Any] = [
    AVVideoWidthKey  : cx,
    AVVideoHeightKey : cy,
    AVVideoCodecKey  : AVVideoCodecType.h264,
]
videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: settings)

我注意到在启动 AVCaptureSession 之后和之前出现日志中的AVCaptureVideoDataOutputSampleBufferDelegate错误captureOutput。我也记录了 AVCaptureSession 输入和输出。

AVCaptureSession 输入

[<AVCaptureScreenInput: 0x6000022e18e0>, <AVCaptureDeviceInput: 0x6000022e0a00 [Built-in Microphone]>]

AVCaptureSession 输出

[<AVCaptureAudioDataOutput: 0x6000022e1f40>, <AVCaptureVideoDataOutput: 0x60000228b7a0>]

但是我在这里也没有看到任何问题。几天来,我一直试图弄清楚这一点,但未能做到。我不知道是什么触发了它,即使一切设置正确,它也无法写入任何输出。如果我只写视频,这只会发生在视频+音频中,它才能正常工作。

4

0 回答 0