我正在使用AVCaptureSession通过AVAssetWriter录制视频到文件,并且在iOS 13. +设备(iPhone或iPad)上一切正常。但这是无法在iOS 12.4 iPad设备上使用,因为几秒钟后,它的视频显示为绿屏(大多数情况下,它变为绿屏,但有时可以正常工作)。
以下使用的配置:
AVAssetWriter - fileType : AVFileType.mp4
让formatDescription = format.formatDescription让尺寸= CMVideoFormatDescriptionGetDimensions(formatDescription)
//在iOS 12设备中存在问题。如此作了。var videoCodecKey:AVVideoCodecType = .h264让compressionDictionary:[String:任意] = [AVVideoExpectedSourceFrameRateKey:25]如果Common.isOSAtLeast(majorVersion:13,minorVersion:0){videoCodecKey = .hevc}
let outputSetups: [String : Any] = [ AVVideoCodecKey: videoCodecKey,
AVVideoScalingModeKey: AVVideoScalingModeResizeAspectFill,
AVVideoWidthKey: (dimensions.width),
AVVideoHeightKey: dimensions.height,
AVVideoCompressionPropertiesKey: compressionDictionary]
videoWriterInput = AVAssetWriterInput(mediaType: AVMediaType.video,outputSettings: outputSetups)
let audioSettings: [String : Any] = [ AVFormatIDKey : kAudioFormatMPEG4AAC,
AVNumberOfChannelsKey : 2,
AVSampleRateKey : 44100.0,
AVEncoderBitRateKey: 192000 ]
audioInput = AVAssetWriterInput(mediaType: AVMediaType.audio,
outputSettings: audioSettings)
audioInput?.expectsMediaDataInRealTime = true
if videoWriter?.canAdd(audioInput) ?? false {
videoWriter?.add(audioInput)
print("audio input added")
}
//Add Video
videoWriterInput?.expectsMediaDataInRealTime = true
if videoWriter?.canAdd(videoWriterInput) ?? false {
videoWriter?.add(videoWriterInput)
print("video input added")
} else { print("no input added") }
videoWriter?.startWriting()
在进一步研究该问题时,发现该问题与AVAssetWriter无关,在视频记录中,我们将图像嵌入到视频中。因此该嵌入导致了此问题。
在本期中,我们已将图像嵌入到输出数据中。该图像的大小与接收缓冲区图像的大小相同,为此,我们发现了一个缩放因子,有时会以infinity出现问题。