gpt4 book ai didi

ios - OpenGL格式纹理

转载 作者:行者123 更新时间:2023-11-29 12:47:31 31 4
gpt4 key购买 nike

我目前正尝试在 iOS 上使用 OpenGL ES 2 在屏幕上显示视频。

我将总结一下我在播放和在屏幕上显示视频所做的工作:

首先,我有一个使用 GPUImageMovieWriter 对象录制的 .mov 文件。录制完成后,我将使用 AVPlayer 播放视频。因此我设置了一个 AVPlayerItemVideoOutput 以便能够从视频中检索帧:

NSDictionary *test = [NSDictionary dictionaryWithObject: [NSNumber  numberWithInt:kCVPixelFormatType_32BGRA] forKey: (id)kCVPixelBufferPixelFormatTypeKey];
self.videoOutput = [[AVPlayerItemVideoOutput alloc] initWithPixelBufferAttributes:test];

然后我使用 AVPlayerItemVideoOutput 中的 copyPixelBufferForItemTime 函数,并在特定时间接收与初始视频帧对应的 CVImageBufferRef

最后,这是我创建的用于从缓冲区创建 OpenGL 纹理的函数:

- (void)setupTextureFromBuffer:(CVImageBufferRef)imageBuffer {

CVPixelBufferLockBaseAddress(imageBuffer, 0);

int bufferHeight = CVPixelBufferGetHeight(imageBuffer);
int bufferWidth = CVPixelBufferGetWidth(imageBuffer);

CVPixelBufferGetPixelFormatType(imageBuffer);
glBindTexture(GL_TEXTURE_2D, m_videoTexture);

glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, bufferWidth, bufferHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, CVPixelBufferGetBaseAddress(imageBuffer));

CVPixelBufferUnlockBaseAddress(imageBuffer, 0);
}

通过这样做(并使用一些不相关的算法来做一些增强现实的事情)我得到了一个非常奇怪的结果,好像视频已经被切片了(我不能给你看,因为我没有足够的这样做的声誉)。

看起来 OpenGL 没有很好地解释数据(格式错误?类型?)

我使用这个函数检查它是否可能是一个损坏的缓冲区错误:

- (void)saveImage:(CVPixelBufferRef)pixBuffer
{
CIImage *ciImage = [CIImage imageWithCVPixelBuffer:pixBuffer];

CIContext *temporaryContext = [CIContext contextWithOptions:nil];
CGImageRef videoImage = [temporaryContext
createCGImage:ciImage
fromRect:CGRectMake(0, 0,
CVPixelBufferGetWidth(pixBuffer),
CVPixelBufferGetHeight(pixBuffer))];

UIImage *uiImage = [UIImage imageWithCGImage:videoImage];

UIImageWriteToSavedPhotosAlbum(uiImage, self, @selector(image:didFinishSavingWithError:contextInfo:), nil);

}

->保存的图片在相册中正常显示。

它可能来自 .mov 文件,但我该怎么做才能检查此文件是否有问题?

非常感谢您的帮助,我真的被这个问题困了几个小时/几天了!

最佳答案

您需要使用 kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange。

然后将它们传输到单独的色度和亮度 OpenGLES 纹理。示例位于 https://developer.apple.com/library/ios/samplecode/AVBasicVideoOutput/Listings/AVBasicVideoOutput_APLEAGLView_m.html

我尝试使用几个基于 RGB 的选项,但无法使其工作。

关于ios - OpenGL格式纹理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23288714/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com