我正在使用AVAssetWriter将屏幕重新编码保存为mp4(使用H.264
视频和aac
音频编码)。一切都按预期完成,但有些用户抱怨0KB视频大小问题,即没有数据写入输出文件。
通过反复尝试,我能够重现此问题。它是在几次成功写入之后发生的(有时在2以后,有时在5以后,在某些机器上从来没有发生)。我比较了成功流程和失败流程,并查看了日志。我唯一发现的就是这个
CMIO_Unit_Converter_Audio.cpp:588:RebuildAudioConverter AudioConverterSetProperty()失败(1886547824)
哪里
kAudioFormatUnsupportedPropertyError = 1886547824
这会导致我在出现故障的情况下检查音频格式,但是AVAssetWriter的音频格式非常好。 我正在将音频编写器输入设置为 AVAssetWriter输入
[<AVAssetWriterInput: 0x600002047950, mediaType = vide, outputSettings = {
AVVideoCodecKey = avc1;
AVVideoHeightKey = 840;
AVVideoWidthKey = 1360;
}>, <AVAssetWriterInput: 0x60000205e740, mediaType = soun, outputSettings = {
AVFormatIDKey = 1633772320;
AVNumberOfChannelsKey = 2;
AVSampleRateKey = 44100;
}>]
我为视频和音频创建AVAssetWriterInput的代码如下 音频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
的{{1}}之前,日志中出现错误。我也记录了AVCaptureSession的输入和输出。
AVCaptureSession输入
captureOutput
AVCaptureSession输出
[<AVCaptureScreenInput: 0x6000022e18e0>, <AVCaptureDeviceInput: 0x6000022e0a00 [Built-in Microphone]>]
但是我在这里没有发现任何问题。我已经尝试了好几天,但未能做到。我不知道是什么触发了它,即使正确设置了所有内容,它也无法写入任何输出。仅当我编写视频时,视频+音频才会发生这种情况。