问题标签 [cmsamplebuffer]

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 回答
187 浏览

ios - 将音频 CMSampleBuffer 转换为 MTLBuffer

CMSampleBuffer将音频缓冲区转换为缓冲区的最有效方法是什么MTLBuffer?我还想尽可能有效地将MTLBuffer缓冲区转换回CMSampleBuffer缓冲区。

我是否需要先将音频转换CMSampleBuffer为 NSData,然后使用makeBuffer(bytesNoCopy pointer: UnsafeMutableRawPointer, length: Int, ...)?还是有更直接的方法?

0 投票
1 回答
2479 浏览

ios - 将 CMSampleBuffer 旋转任意角度并在 swift 3 中附加到 AVAssetWriterInput

我将样本缓冲区转换为CGContext. 然后我将转换应用于上下文并CIImage从中创建一个,然后将其显示在一个UIImageView.

同时,我想将其附加到AVAssetWriterInput以创建这些转换的电影。

到目前为止,我应用于上下文的转换没有任何效果。当我在图像视图中显示所谓的转换图像时。它看起来完全一样。

更新: 我设法将样本缓冲区记录到视频文件中(尽管方向错误,它仍然被拉伸)。我已将此代码用作基础

http://geek-is-stupid.github.io/blog/2017/04/13/how-to-record-detect-face-overlay-video-at-real-time-using-swift/

但我仍在努力将旋转应用于 CGContext。基本上我对上下文所做的一切都被完全忽略了。

0 投票
0 回答
1456 浏览

ios - AVFoundation captureOutput didOutputSampleBuffer 延迟

我正在使用AVFoundation captureOutput didOutputSampleBuffer来提取图像,然后用于过滤器。

上面只是更新self.cameraBufferImage每当有一个新的输出样本缓冲区。

然后,当按下过滤器按钮时,我使用self.cameraBufferImage如下:

调用上述方法时,它会抓取“当前” self.cameraBufferImage并使用它来应用过滤器。这在正常曝光持续时间(低于 1/15 秒左右......)中工作正常

问题

当曝光时间较慢时,即 1/3 秒时,应用滤镜需要一段时间(约 1/3 秒)。此延迟仅在启动后第一次出现。如果再做一次,就完全没有延迟了。


想法

我了解如果曝光持续时间为 1/3 秒,didOutputSampleBuffer 仅每 1/3 秒更新一次。但是,为什么会出现初始延迟?它不应该只是抓住那个确切时间可用的任何self.cameraBufferImage,而不是等待吗?

  1. 排队问题?
  2. CMSampleBuffer 保留问题?(虽然在 Swift 3 上,没有 CFRetain)

更新

苹果的文档

每当输出捕获并输出新的视频帧、解码或重新编码由其 videoSettings 属性指定时,代表都会收到此消息。代表可以将提供的视频帧与其他 API 结合使用以进行进一步处理。

此方法在输出的 sampleBufferCallbackQueue 属性指定的调度队列上调用。它会定期调用,因此必须有效地防止捕获性能问题,包括丢帧。

如果您需要在此方法范围之外引用 CMSampleBuffer 对象,则必须先对其进行 CFRetain,然后在完成后对其进行 CFRelease。

为了保持最佳性能,一些样本缓冲区直接引用可能需要由设备系统和其他捕获输入重用的内存池。对于未压缩的设备本机捕获,这种情况经常发生,其中内存块被复制得越少越好。如果多个样本缓冲区引用此类内存池的时间过长,则输入将不再能够将新样本复制到内存中,并且这些样本将被丢弃。

如果您的应用程序由于保留提供的 CMSampleBuffer 对象太久而导致样本被丢弃,但它需要长时间访问样本数据,请考虑将数据复制到新缓冲区中,然后释放样本缓冲区(如果它以前被保留)以便它引用的内存可以被重用。

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 投票
0 回答
1254 浏览

swift - 有什么方法可以在 Swift 上将 UIImage 转换为 CMSampleBuffer?

我正在使用 ABBYY OCR SDK,它非常适合直接从 CMSampleBuffer 的相机进行文本识别:

他们有另一个用于图像识别的 SDK,但是会增加几十 Mb 的应用程序大小。

所以想知道是否有任何方法可以将 UIImage 转换为 CMSampleBuffer。

0 投票
1 回答
307 浏览

ios - 执行 CMSampleBuffer OpenGL Swift 的平移/旋转

我正在尝试读取 AVAsset 并在资产的每一帧中,使用 GPU 进行平移或旋转操作。

从我的研究中,我发现了一种将 CMSampleBuffer 转换为 GPU 纹理的方法。我正在使用以下方法来做到这一点:

现在我需要用这个纹理做我想要的操作,但这就是我卡住的地方。从一个 Objc 示例中,我翻译了一个函数,该函数接收一个纹理作为参数并返回一个 CGImage。

这是方法:

但是我找不到在哪里可以对这段代码执行平移和旋转的操作,或者我该怎么做。

很高兴有人已经在 iOS 上使用过 OpenGL,可以给我帮助,甚至告诉我在哪里可以找到此类操作的示例。

0 投票
0 回答
456 浏览

ios - 用于转换为 UIImage 的 CMSampleBuffer 扩展:内存太贵

我正在尝试使用 Swift 3.0 将 a 转换为CMSampleBuffera UIImage。一种流行的解决方案是为CMSampleBuffer该类编写一个扩展并添加一个 getter 以将缓冲区转换为图像。这是它的样子:

它工作正常,但占用了大量内存,占应用程序总内存的 40%。有没有更高效的内存解决方案?

编辑

我已经更改了我的代码,它看起来像这样:

内存泄漏与 CGContext 有关。除了使用自动释放池之外,还有其他方法可以释放/释放/释放它吗?

0 投票
1 回答
2642 浏览

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

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

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

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


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

0 投票
2 回答
7512 浏览

ios - 如何在 Swift 中将 CMSampleBuffer 转换为数据?

我需要转换CMSampleBufferData格式。我正在为音频相关任务使用一个第三方框架。该框架为我提供了对象中的流式(即实时音频)音频CMSampleBuffer

像这样:

请向我提供转换CMSampleBufferData.

供参考

0 投票
0 回答
1273 浏览

ios - 使用 AVAssetWriter 停止视频录制 (finishWriting) 且不会崩溃的正确方法

我用 录制视频AVAssetWriter。用户可以发送视频,然后我打电话finishWriting,或者取消录制,然后我打电话cancelWriting

我如何记录:

我如何停止录制:

当我打电话时stop_record,有时它会崩溃。即使file_writer应该停止写作并且如果我在 中进行了多次验证,也会didOutputSampleBuffer调用此行:

video_writer.append(sb)

我得到:

停止记录

文件写入器状态 1

视频完成

音频完成

libc++abi.dylib:以 NSException 类型的未捕获异常终止

我在没有调用的情况下尝试了相同的代码,markAsFinished但它也崩溃了(我更经常说)。

我想知道这是否是线程问题(因为stop_recorddidOutputSampleBuffer方法没有在同一个线程上调用)。无论如何,我不知道我做错了什么。如果有人可以帮助我,我将不胜感激。