Я извлекаю SampleBuffers из AVAsset с помощью AVAssetReader. Я конвертирую каждый CMSampleBuffer в MTLTexture на каждой итерации, используя приведенный ниже фрагмент кода. однако я получаю ожидаемый CVPixelBuffer, но когда я пытаюсь преобразовать его, я получил . ожидаемый результат: ..
Я уже пытаюсь отладить ширину и высоту, которые точны, я пытаюсь использовать другое видео, возникла такая же проблема, пытался создать другой textureCache. та же проблема.
func convertToMTLTexture(sampleBuffer: CMSampleBuffer?) -> MTLTexture? {
if let textureCache = textureCache,
let sampleBuffer = sampleBuffer,
let imageBuffer:CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) {
let width = CVPixelBufferGetWidth(imageBuffer)
let height = CVPixelBufferGetHeight(imageBuffer)
var texture: CVMetalTexture?
CVMetalTextureCacheCreateTextureFromImage(kCFAllocatorDefault, textureCache,
imageBuffer, nil, .bgra8Unorm, width, height, 0, &texture)
if let texture = texture {
return CVMetalTextureGetTexture(texture)
}
}
return nil
}