Swift iPad-在iPad iOS12.4中,几秒钟后,AVAssetWriter AVCapture会话录制视频会获得绿色视频

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

我正在使用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无关,在视频记录中,我们将图像嵌入到视频中。因此该嵌入导致了此问题

swift ipad video avassetwriter avcapture
1个回答
0
投票

在本期中,我们已将图像嵌入到输出数据中。该图像的大小与接收缓冲区图像的大小相同,为此,我们发现了一个缩放因子,有时会以infinity出现问题。

© www.soinside.com 2019 - 2024. All rights reserved.