问题标签 [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 回答
2503 浏览

swift - create CMSampleBuffer from CVPixelBuffer

I am provided with pixelbuffer, which I need to attach to rtmpStream object from lf.swift library to stream it to youtube. it looks like this: rtmpStream.appendSampleBuffer(sampleBuffer: CMSampleBuffer, withType: CMSampleBufferType)

So, I need to convert somehow CVPixelbuffer to CMSampleBuffer to append to rtmpStream.

but, unfortunately this doesn't work. Streaming library is tested and works fine when I stream camera input or screenCapture. I think problem may be sampleTimingInfo, because it requrires decodeTime and Duration which I have no idea how to get for provided CVPixelBuffer.

0 投票
2 回答
1483 浏览

ios - ios / CoreML - keras 模型转换为 CoreML 时输入类型为 MultiArray

我正在尝试训练keras模型并将其转换为coreML使用keras 1.2.2TensorFlow后端的模型。这是一个分类任务。CoreML 的输入显示为MultiArray。我需要这个Image <BGR, 32, 32>或类似的东西CVPixelBuffer。我尝试image_input_names='data'按照此处所述添加。我input shape的也是(height, width, depth)我认为是必需的。

请帮助解决此问题。我使用了 cifar10数据集和以下代码(参考):

0 投票
0 回答
567 浏览

ios - 检查 CVPixelBufferRef 是否有白色像素的最有效方法是什么?

检查 CVPixelBufferRef 是否有白色像素的最有效方法是什么?

下面是我目前正在使用的代码,但当照片明显有白色像素时,它不会返回白色像素。

0 投票
1 回答
2642 浏览

ios - 如何将 CVPixelBuffer / CVImageBuffer 转换为数据?

我的相机应用程序捕捉照片,以某种方式增强并保存它。

为此,我以 CVPixelBuffer(包装在 CMSampleBuffer 中)的形式从相机获取输入图像。我对像素缓冲区进行了一些修改,然后我想将其转换为 Data 对象。我该怎么做呢?

请注意,我不想将像素缓冲区/图像缓冲区转换为 UIImage 或 CGImage,因为它们没有元数据(如 EXIF)。我需要一个数据对象。如何从 CVPixelBuffer / CVImageBuffer 中获取一个?


PS:我试过打电话AVCapturePhotoOutput.jpegPhotoDataRepresentation(),但没有说“不是JPEG样本缓冲区”。这是有道理的,因为 CMSampleBuffer 包含一个像素缓冲区(位图),而不是 JPEG。

0 投票
0 回答
280 浏览

swift - FBSimulatorControl : 将 CVPixelBufferRef 数据转换为 jpeg 数据以进行流式传输

我正在快速开发一个 CLI 并在其中使用 FBSimulatorControl。我想流式传输从 consumeData: 委托方法获得的数据。根据方法中获取的数据是从 CVPixelBufferRef 获取的数据

我在 FBSimulatorControl 的 github 存储库中记录了一个问题。

我尝试从数据中重新生成 CVPixelBuffer 并尝试从中获取 CIImage 并将其转换为 jpeg 数据。但这似乎不起作用。谁能帮我这个?在我尝试过的代码下面添加

0 投票
3 回答
2159 浏览

ios - AVAssetWriterInput 追加失败,错误代码 -11800 AVErrorUnknown -12780

我正在尝试使用 AVCaptureSession 在内存中捕获相机视频,以便以后可以将视频数据写入电影文件。虽然我已经能够成功启动捕获会话,但我无法使用 AVAssetWriter 将捕获的 CMSampleBuffers 成功写入压缩电影文件。

使用 AVAssetWriterInput 的 append 方法附加样本缓冲区失败,当我检查 AVAssetWriter 的错误属性时,我得到以下信息:

错误域=AVFoundationErrorDomain 代码=-11800“操作无法完成” UserInfo={NSUnderlyingError=0x17005d070 {错误域=NSOSStatusErrorDomain 代码=-12780“(null)”},NSLocalizedFailureReason=发生未知错误(-12780),NSLocalizedDescription =操作无法完成}

据我所知,-11800 表示 AVErrorUnknown,但是我无法找到有关 -12780 错误代码的信息,据我所知,这是未记录的。下面我将主要文件粘贴到我设置的示例项目中以演示该问题。

任何指导将不胜感激。谢谢!

ViewController.swift

CVPixelBuffer+Copy.swift:

CMSampleBuffer+Copy.swift:

0 投票
1 回答
1346 浏览

objective-c - 在 SceneKit 下可靠访问和修改捕获的相机帧

我尝试将黑白滤镜添加到 ARSCNView 的相机图像中,然后在其上渲染彩色 AR 对象。

在此处输入图像描述

我几乎在那里,在开头添加了以下代码- (void)renderer:(id<SCNSceneRenderer>)aRenderer updateAtTime:(NSTimeInterval)time

这在移动设备上运行得非常快,但事情是这样的:有时会显示一个彩色框架。我已经检查并执行了我的过滤代码,但我认为为时已晚,SceneKit 的管道已经处理了相机输入。

早点调用代码会有所帮助,但updateAtTime最早可以逐帧添加自定义代码。

获取有关帧捕获的通知可能会有所帮助,但看起来整个AVCapturesession 都无法访问。

Metal ARKit 示例展示了如何将相机图像转换为 RGB,这就是我要进行过滤的地方,但是在使用 SceneKit 时该着色器被隐藏了。

我已经尝试过这个可能的答案,但它太慢了。

那么如何克服帧丢失并将相机馈送可靠地转换为 BW 呢?

0 投票
2 回答
864 浏览

swift - 转换为 vImage 的 CMSampleBuffer 帧颜色错误

我正在尝试CMSampleBuffer从相机输出转换为vImage稍后应用一些处理。不幸的是,即使没有任何进一步的编辑,我从缓冲区获得的帧颜色也错误:

当前实现的示例图像

实施(不考虑内存管理和错误):

配置视频输出设备:

vImageCASampleBuffer从相机接收到的创建:

将缓冲区转换为 UIImage:

为了测试 CVPixelBuffer 被导出到 UIImage,但将其添加到视频缓冲区具有相同的结果。

0 投票
1 回答
1026 浏览

macos - 将 CVPixelBuffer 渲染到 NSView (macOS)

我有一个CVPixelBuffer我正在尝试有效地在屏幕上绘制的东西。

转化为NSImage作品的效率不高,但速度很慢,丢掉了大约 40% 的帧。

因此,我尝试使用CIContext's在屏幕上渲染它drawImage:inRect:fromRect。使用谁的视图进行CIContext了初始化,该NSOpenGLContext视图设置为我的 VC 的视图。当我有一个新图像时,我调用drawImage不会吐出任何错误的方法......但也不会在屏幕上显示任何内容(当我的上下文设置不正确时它确实记录了错误)。

我试图找到一个如何在 MacOS 上完成此操作的示例,但现在一切似乎都适用于 iOS。

编辑:

这是我正在使用的一些代码。我省略了不相关的部分

viewDidLoad我初始化 GL 和 CI 上下文时

然后,当一个新框架准备好时,我会:

我不确定我在正确的地方调用 draw,但我似乎无法找出这应该去哪里。

0 投票
0 回答
661 浏览

avplayer - 金属渲染循环优化

我正在寻找有关如何正确实现金属渲染循环的方向。我的渲染循环从AVPlayer.

这是我当前的实现:

  1. A以 60hz 的频率CVDisplayLink查询播放器的。AVPlayerItemVideoOutput如果有一个新帧,它会CVPixelBufferRef被捕获/保存*作为MTKView它将被渲染到的属性。(此时,之前捕获的视频帧被释放)。
  2. MyMTKView设置为isPausedenableSetNeedsDisplayto NO。换句话说,内部计时器的MTKView任务是定期调用其drawRect方法。
  3. drawRect我首先将 new-arrived* 转换CVPixelBuffer为 a MTLTexture,然后出现一堆渲染阶段。
  4. 最后,我presentDrawable在方法结束时调用drawRect

*注意:对 的互斥访问CVPixelBufferRef由一对 dispatch_semaphore_wait和控制dispatch_semaphore_signal

这是一种正确的做事方式吗? 尽管偶尔会丢失一些帧,但它似乎相当高效。在时间方面,Metal 的 Xcode 分析告诉我,我MTLCommandBuffer的运行时间通常不到 3 毫秒。

话虽如此,我看到了一些替代的可能性:

  • 放弃CVDisplayLink实现并抓住其中的框架drawRect
  • 反转渲染过程;显示之前捕获的帧并MTLTexture首先在drawRect方法中渲染,然后commit是 Metal 命令缓冲区并presentDrawable立即调用。在那之后,捕获下一个视频帧并在下一次调用之前运行它的渲染阶段(在退出drawRect之前这样做吗?)。drawRect

另一个问题:我的印象是CVDisplayLinkdrawRect方法都没有在这个配置的主线程上运行。我感到困扰的是,每当我松开应用程序的一个菜单时,视频帧的传递就会出现明显的卡顿——这是主线程进行 UI 更新并阻塞的症状。NSCollectionView当重新加载屏幕并在屏幕上显示其内容时,会观察到相同的行为。这让我相信我的假设是不正确的。如何MTKView制作这些渲染循环来避免这些问题? 想知道整个打开/配置是否也AVPlayer需要脱离主线程。

更新#1

我修复了鼠标悬停在任何项目上时会出现的“另一个问题”口吃问题。NSMenu这是我的解决方案:

  1. MTKViewisPaused=YES和配置每个enableSetNeedsDisplay=NO。这意味着draw视图需要显式调用才能呈现其内容。
  2. CVDisplayLink回调中,发出对on a的draw调用,因此:MTKViewdispatch_global_queue