问题标签 [cvpixelbuffer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
556 浏览

ios - 从 AVAssetWriterInputPixelBufferAdaptor 创建的具有透明背景的视频变成黑色背景

我通过每 0.01 秒后捕获带有渲染上下文的屏幕图像来创建视频。具有透明背景的捕获图像。但是当使用 AVAssetWritter、AVAssetWriterInputPixelBufferAdaptor 用这些图像创建视频时,它的透明背景会变成黑色。

我正在使用以下代码:-

canvasAssetWriter = [[AVAssetWriter alloc] initWithURL:[self tempFileURL:@"output.mp4"] fileType:AVFileTypeQuickTimeMovie error:&error];

CVPixelBufferRef pixelBuffer = NULL; CGImageRef cgImage = CGImageCreateCopy([capturedImage CGImage]);

0 投票
2 回答
3755 浏览

ios - 使用 AVAssetWriter 时出现未知的底层 OSStatus 错误 -16364

我正在为我的一个应用程序构建视频导出功能。本质上,视频是持续不同(短)持续时间的六种不同图像之一的系列。

当我导出包含 283 张不同持续时间的图像时,导出工作正常,但是当我尝试导出 803 中的一张时,我得到了可怕的“操作无法完成”错误(AKA“我们不知道刚刚发生了什么,因为AVFoundation 错误报告很糟糕”)。

当我尝试使用 my 添加第 754 帧(始终为第 754 帧)AVAssetWriterInputPixelBufferAdaptor时,appendPixelBuffer:withPresentationTime:返回NOAVAssetWriter状态为失败,其错误是:

我一生都无法弄清楚潜在的错误(OSStatus-16364)是什么。www.osstatus.com不知道,macerror说不存在这样的东西,这个用于搜索 SDK 标头的 Python 脚本什么也没找到。它也不是像某些 OSStatus 错误那样的四字符代码(除非我搞砸了检查)。

我已经排除了我发现的“操作无法完成”错误的所有常见原因。它与文件系统权限或覆盖无关,没有两个调用appendPixelBuffer具有相同的呈现时间。

这不是内存问题(视频导出期间内存使用率保持在 165MB),CPU 保持在 3% 附近。

如果它很重要,我会CVPixelBuffer一遍又一遍地为 6 张图像重复使用相同的 6 s,而不是UIImage每次都从 s 中创建新的图像。这似乎有助于提高性能,并且每次将其更改为新的似乎并没有改变任何东西(除了让它在第 753 帧上失败),但谁知道呢。

有谁知道这可能是什么?

0 投票
4 回答
18097 浏览

ios - 从 Swift 中的 CVPixelBufferRef 获取像素值

如何从 CVPixelBufferRef 获取 RGB(或任何其他格式)像素值?我尝试了很多方法,但还没有成功。

0 投票
1 回答
676 浏览

ios - 为什么 CVPixelBuffer.GetAttributes 采用 NSDictionary 类型的参数?

在 Xamarin.iOS 中,方法 CVPixelBuffer.GetAttributes 有一个 NSDictionary 类型的参数“属性”。例如可能会这样调用:

这是没有意义的。Get函数的目的不是获取所需的值吗?为什么它的签名要求我传入一个?为什么这个方法没有0个参数,如:

???

0 投票
1 回答
746 浏览

ios - YUV-NV12 video buffer的y平面和uv平面的延续

我有一个(CMSampleBufferRef)imageBufferyuv_nv12(4:2:0) 的类型。

现在我运行以下代码,发现结果令人困惑。

我对这个结果有几个问题。

1:为什么不baseSRC等于yBaseSRC

2:为什么不yBaseSRC+width*height等于uvBaseSRC?理论上,y平面数据后面跟着uv平面数据,没有任何中断,对吧?现在它被大小为 3840 字节的东西打断了,我不明白。

3:我尝试使用以下代码将此示例像素转换为 cvmat,在大多数 iOS 设备上,这可以正常工作,但在 iPhone 4s 上却不行。在 iPhone 4s 上,转换后,像素缓冲区的侧面有一些绿线。

现在 rgbMat 看起来像这样:

在此处输入图像描述

0 投票
1 回答
1082 浏览

ios - 如何正确处理 CVPixelBuffer 中的像素?

简短的问题是:解决 a 中像素值的公式是什么CVPixelBuffer

我正在尝试将 a 转换为CVPixelBuffer平面字节数组,并注意到一些奇怪的事情: TheCVPixelBuffer是从 a 获得的CMSampleBuffer。它的宽度和高度是852x640像素。总和像素,考虑到每个像素的字节数545280,这将需要字节数。21811204

现在第一个奇怪的事情是,每行CVPixelBuffer返回相同的字节数,这对于像素3456来说是足够的空间。864这些额外的12像素从何而来?如果最终图像中的一行只有852像素宽,但实际上864一行中有像素CVPixelBuffer,我怎么知道需要复制哪些字节?或者这些字节中的哪些未使用?顺便说一句,它们是未使用的吗?

另一件事是报告的数据大小CVPixelBuffers,即2211848字节。3456现在,如果我们将每行的字节数乘以640行数,我们将得到2211840字节数。再次,我们留下了8额外的字节。这些8字节是怎么回事?它们没有被使用吗?他们在最后吗?

欢迎任何对此事有所启发的建议,谢谢。

0 投票
3 回答
3705 浏览

ios - 在 iOS 中用白色像素替换部分像素缓冲区

我正在使用 iPhone 摄像头捕捉实时视频并将像素缓冲区馈送到进行某些对象识别的网络。这是相关代码:(我不会发布设置AVCaptureSession 等的代码,因为这是非常标准的。)

然后网络将sourceStartAddr, width, height, sourceRowBytes&doReverseChannels作为输入。

我的问题如下:用所有白色“像素”替换或删除部分图像数据的最简单和/或最有效的方法是什么?是否可以直接覆盖像素缓冲区数据的 e 部分,如果可以,如何?

我对这个像素缓冲区的工作原理只有一个非常基本的了解,所以如果我在这里遗漏了一些非常基本的东西,我深表歉意。我在 Stackoverflow 上发现的与我最密切相关的问题是这个问题,其中 aEAGLContext用于向视频帧添加文本。虽然这实际上适用于我只需要替换单个图像的目标,但我认为如果应用于每个视频帧,此步骤会降低性能,我想知道是否有另一种方法。这里的任何帮助将不胜感激。

0 投票
3 回答
2963 浏览

ios - 用像素数据创建CVPixelBuffer,但最终图像失真

我通过OpenGLES方法(glReadPixels)或其他方式获取像素,然后创建CVPixelBuffer(带或不带CGImage)用于视频录制,但最终图片失真。当我在 iPhone 5c、5s 和 6 上测试时,这发生在 iPhone6 上。

看起来像:

在此处输入图像描述

这是代码:

0 投票
0 回答
90 浏览

gpuimage - 用`CVPixelBufferRef`创建本地电影,一段时间后开始修剪

我确实有很多CVPixelBufferRef我想“实时”附加到电影中的内容,即我CVPixelBufferRef每秒获得 50 - 60 个(因为它们是帧)并且想从中创建一个本地视频。

如果我可以让那个视频“浮动”,那就更好了,这意味着它应该总是两分钟长;只要我有两分钟的视频,它就应该从一开始就开始修剪。

(这怎么可能?

0 投票
3 回答
9107 浏览

ios - 使用 CVPixelBufferCreate 复制/复制 CVPixelBufferRef

我需要创建 a 的副本,CVPixelBufferRef以便能够使用副本中的值以逐位方式操作原始像素缓冲区。我似乎无法用CVPixelBufferCreate或实现这一点CVPixelBufferCreateWithBytes

根据这个问题,它也可以用 memcpy() 来完成。但是,没有说明如何实现这一点,以及无论如何都需要调用哪些 Core Video 库。