我有一个用于调整视频大小的示例项目,适用于大多数视频。但是,AVAssetWriter
无法从特定视频写入音频并出现错误:
Error Domain=AVFoundationErrorDomain
Code=-11800 "The operation could not be completed"
UserInfo={
NSLocalizedFailureReason=An unknown error occurred (-12780),
NSLocalizedDescription=The operation could not be completed,
NSUnderlyingError=0x282e956e0 {
Error Domain=NSOSStatusErrorDomain Code=-12780 "(null)"
}
}
更有问题的是,如果我在 macOS 上运行相同的代码,它可以正常工作,但在 iOS 中它会中断。我认为这不是硬件问题,因为它也会在 iOS 模拟器中中断。
这些是我用于(解)压缩资产轨道的设置:
func audioDecompressionSettings() -> [String: Any] {
return [
AVFormatIDKey: kAudioFormatLinearPCM
]
}
func audioCompressionSettings() -> [String: Any] {
var audioChannelLayout = AudioChannelLayout()
memset(&audioChannelLayout, 0, MemoryLayout<AudioChannelLayout>.size)
audioChannelLayout.mChannelLayoutTag = kAudioChannelLayoutTag_Stereo
return [
AVFormatIDKey: kAudioFormatMPEG4AAC,
AVSampleRateKey: 44100,
AVEncoderBitRateKey: 128000,
AVNumberOfChannelsKey: 2,
AVChannelLayoutKey: NSData(bytes: &audioChannelLayout, length: MemoryLayout<AudioChannelLayout>.size)
]
}
func videoDecompressionSettings() -> [String: Any] {
return [
kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_420YpCbCr8BiPlanarFullRange,
kCVPixelBufferMetalCompatibilityKey as String: true
]
}
func videoCompressionSettings(size: CGSize) -> [String: Any] {
return [
AVVideoCodecKey: AVVideoCodecType.h264,
AVVideoWidthKey: size.width,
AVVideoHeightKey: size.height
]
}
完整的源代码可以在这里找到。
在该项目中,有两个目标,一个用于 Mac,另一个用于 iOS,它们都使用相同的代码来调整视频大小。我还包括了两个示例视频文件:fruit.mp4
和rain.mp4
. 第一个在两个目标中都运行良好,但第二个在 iOS 中中断。
我在这里遗漏了什么,或者这很可能是苹果的错误?