问题标签 [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.
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]);
ios - 使用 AVAssetWriter 时出现未知的底层 OSStatus 错误 -16364
我正在为我的一个应用程序构建视频导出功能。本质上,视频是持续不同(短)持续时间的六种不同图像之一的系列。
当我导出包含 283 张不同持续时间的图像时,导出工作正常,但是当我尝试导出 803 中的一张时,我得到了可怕的“操作无法完成”错误(AKA“我们不知道刚刚发生了什么,因为AVFoundation 错误报告很糟糕”)。
当我尝试使用 my 添加第 754 帧(始终为第 754 帧)AVAssetWriterInputPixelBufferAdaptor
时,appendPixelBuffer:withPresentationTime:
返回NO
,AVAssetWriter
状态为失败,其错误是:
我一生都无法弄清楚潜在的错误(OSStatus
-16364)是什么。www.osstatus.com不知道,macerror
说不存在这样的东西,这个用于搜索 SDK 标头的 Python 脚本什么也没找到。它也不是像某些 OSStatus 错误那样的四字符代码(除非我搞砸了检查)。
我已经排除了我发现的“操作无法完成”错误的所有常见原因。它与文件系统权限或覆盖无关,没有两个调用appendPixelBuffer
具有相同的呈现时间。
这不是内存问题(视频导出期间内存使用率保持在 165MB),CPU 保持在 3% 附近。
如果它很重要,我会CVPixelBuffer
一遍又一遍地为 6 张图像重复使用相同的 6 s,而不是UIImage
每次都从 s 中创建新的图像。这似乎有助于提高性能,并且每次将其更改为新的似乎并没有改变任何东西(除了让它在第 753 帧上失败),但谁知道呢。
有谁知道这可能是什么?
ios - 从 Swift 中的 CVPixelBufferRef 获取像素值
如何从 CVPixelBufferRef 获取 RGB(或任何其他格式)像素值?我尝试了很多方法,但还没有成功。
ios - 为什么 CVPixelBuffer.GetAttributes 采用 NSDictionary 类型的参数?
在 Xamarin.iOS 中,方法 CVPixelBuffer.GetAttributes 有一个 NSDictionary 类型的参数“属性”。例如可能会这样调用:
这是没有意义的。Get函数的目的不是获取所需的值吗?为什么它的签名要求我传入一个值?为什么这个方法没有0个参数,如:
???
ios - YUV-NV12 video buffer的y平面和uv平面的延续
我有一个(CMSampleBufferRef)imageBuffer
yuv_nv12(4:2:0) 的类型。
现在我运行以下代码,发现结果令人困惑。
我对这个结果有几个问题。
1:为什么不baseSRC
等于yBaseSRC
?
2:为什么不yBaseSRC+width*height
等于uvBaseSRC
?理论上,y平面数据后面跟着uv平面数据,没有任何中断,对吧?现在它被大小为 3840 字节的东西打断了,我不明白。
3:我尝试使用以下代码将此示例像素转换为 cvmat,在大多数 iOS 设备上,这可以正常工作,但在 iPhone 4s 上却不行。在 iPhone 4s 上,转换后,像素缓冲区的侧面有一些绿线。
现在 rgbMat 看起来像这样:
ios - 如何正确处理 CVPixelBuffer 中的像素?
简短的问题是:解决 a 中像素值的公式是什么CVPixelBuffer
?
我正在尝试将 a 转换为CVPixelBuffer
平面字节数组,并注意到一些奇怪的事情: TheCVPixelBuffer
是从 a 获得的CMSampleBuffer
。它的宽度和高度是852x640
像素。总和像素,考虑到每个像素的字节数545280
,这将需要字节数。2181120
4
现在第一个奇怪的事情是,每行CVPixelBuffer
返回相同的字节数,这对于像素3456
来说是足够的空间。864
这些额外的12
像素从何而来?如果最终图像中的一行只有852
像素宽,但实际上864
一行中有像素CVPixelBuffer
,我怎么知道需要复制哪些字节?或者这些字节中的哪些未使用?顺便说一句,它们是未使用的吗?
另一件事是报告的数据大小CVPixelBuffers
,即2211848
字节。3456
现在,如果我们将每行的字节数乘以640
行数,我们将得到2211840
字节数。再次,我们留下了8
额外的字节。这些8
字节是怎么回事?它们没有被使用吗?他们在最后吗?
欢迎任何对此事有所启发的建议,谢谢。
ios - 在 iOS 中用白色像素替换部分像素缓冲区
我正在使用 iPhone 摄像头捕捉实时视频并将像素缓冲区馈送到进行某些对象识别的网络。这是相关代码:(我不会发布设置AVCaptureSession
等的代码,因为这是非常标准的。)
然后网络将sourceStartAddr
, width
, height
, sourceRowBytes
&doReverseChannels
作为输入。
我的问题如下:用所有白色“像素”替换或删除部分图像数据的最简单和/或最有效的方法是什么?是否可以直接覆盖像素缓冲区数据的 e 部分,如果可以,如何?
我对这个像素缓冲区的工作原理只有一个非常基本的了解,所以如果我在这里遗漏了一些非常基本的东西,我深表歉意。我在 Stackoverflow 上发现的与我最密切相关的问题是这个问题,其中 aEAGLContext
用于向视频帧添加文本。虽然这实际上适用于我只需要替换单个图像的目标,但我认为如果应用于每个视频帧,此步骤会降低性能,我想知道是否有另一种方法。这里的任何帮助将不胜感激。
gpuimage - 用`CVPixelBufferRef`创建本地电影,一段时间后开始修剪
我确实有很多CVPixelBufferRef
我想“实时”附加到电影中的内容,即我CVPixelBufferRef
每秒获得 50 - 60 个(因为它们是帧)并且想从中创建一个本地视频。
如果我可以让那个视频“浮动”,那就更好了,这意味着它应该总是两分钟长;只要我有两分钟的视频,它就应该从一开始就开始修剪。
(这怎么可能?
ios - 使用 CVPixelBufferCreate 复制/复制 CVPixelBufferRef
我需要创建 a 的副本,CVPixelBufferRef
以便能够使用副本中的值以逐位方式操作原始像素缓冲区。我似乎无法用CVPixelBufferCreate
或实现这一点CVPixelBufferCreateWithBytes
。
根据这个问题,它也可以用 memcpy() 来完成。但是,没有说明如何实现这一点,以及无论如何都需要调用哪些 Core Video 库。