我像这样实例化 AVPlayerItemVideoOutput:
let videoOutput = AVPlayerItemVideoOutput(pixelBufferAttributes: [String(kCVPixelBufferPixelFormatTypeKey): NSNumber(value: kCVPixelFormatType_32BGRA)])
并像这样检索像素缓冲区:
@objc func displayLinkDidRefresh(link: CADisplayLink) {
let itemTime = videoOutput.itemTime(forHostTime: CACurrentMediaTime())
if videoOutput.hasNewPixelBuffer(forItemTime: itemTime) {
if let pixelBuffer = videoOutput.copyPixelBuffer(forItemTime: itemTime, itemTimeForDisplay: nil) {
}
}
}
但由于某种原因CVPixelBufferGetHeight(pixelBuffer)
或宽度。当 iPhone 的相机(横向或纵向)始终高度=1280 宽度=720 时,拍摄视频时始终返回 1280x720。即使视频是 4k。如果我从 Instagram 加载方形视频或从互联网下载的任何其他视频(不是直接使用相机应用程序创建),当分辨率小于 720p 时,宽度和高度会正确打印。但不同的分辨率,例如。 1008x1792 会抛出 CVPixelBufferGetHeight(pixelBuffer) = 1280
用相机拍摄的视频......它总是会产生较低的分辨率。我尝试了 4k 和 1080 设置(您可以在 iOS 设置 > 相机中更改设置)。仍然..即使在 1080 中,我也得到 1280x720 像素缓冲区。
我发现我使用的 UIPickerController 设置为默认将所选视频从库转码为“中等”设置。在本例中为 1280x720
我最终改变了选择器的这个属性
picker.videoQuality = .typeHigh
picker.videoExportPreset = AVAssetExportPresetHighestQuality
尽管真正做出改变的属性是videoExportPreset
另一个我不知道它的作用,即使文档指定它是在录制视频时使用的OR你选择一个视频。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)