问题标签 [avcaptureoutput]

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 投票
1 回答
715 浏览

ios - AVCapturePhotoOutput jpegPhotoDataRepresentation 访问预览照片

我看到 iOS 10 引入AVCapturePhotoOutput了新类来处理捕获照片,并且能够通过将两个缓冲区传递给AVCapturePhotoCaptureDelegate方法来在主图像旁边创建预览/缩略图图像capture

然后可以通过 将其表示为 JPEG 数据jpegPhotoDataRepresentation,但是我很感兴趣并且无法找出预览图像是如何存储然后访问的。我猜aUIImageView会根据视图边界自动选择任一图像吗?您将如何手动选择任一图像?

0 投票
2 回答
837 浏览

ios - 如何快速从 AVCaptureStillImageOutput 创建 CIImage?

所以我正在使用一些在 Objective C 中执行此操作的代码,并且我一直在将其转换为 swift 并且我正在努力创建一个CIImagefrom AVCaptureStillImageOutput. 因此,如果有人可以查看这段代码并告诉我哪里出错了,那就太好了。

这是目标 C 代码

}

现在基本上它会捕获内容,如果某些if陈述为真,那么它会捕获显示中的内容CIRectangleFeature,然后将其转换为CIImageCGImage在保存函数中调用的 a。

我已经把它翻译成这样的swift。

因此,它需要AVCaptureStillImageOutput将其转换CIImage为所有需要的用途,然后将其转换为以CGImage进行保存。我在翻译中到底做错了什么?还是有更好的方法来做到这一点?

我真的不想问这个问题,但我似乎找不到任何像这样的问题,或者至少找不到任何将捕获作为CIImagefrom 的问题AVCaptureStillImageOutput

谢谢你的帮助!

0 投票
0 回答
165 浏览

ios - AVCaptureVideoDataOutput 和 AVCaptureVideoStabilizationModeCinematic 预览滞后

多年来我一直摸不着头脑,但对此没有任何结果。当我设置 AVCaptureVideoDataOutput 并使用 AVCaptureVideoStabilizationModeCinematic 对帧进行 OpenGLES 渲染时,预览会有相当大的延迟。如果我使用 AVCaptureVideoPreviewLayer,延迟会少得多。有没有人找到解决方法?

0 投票
1 回答
1248 浏览

ios - 使用 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput

我有一个运行设置如下的 AVCaptureVideoDataOutput 会话,它运行良好并将缓冲区记录到文件中。

我还想录制音频,但缓冲区中似乎没有任何音频,即使我已将麦克风添加为 captureSession 的输入。

我怀疑我还需要使用 AVCaptureAudioDataOutput。

然后这是我获取视频缓冲区并将其发送到文件中的方法

0 投票
1 回答
1174 浏览

swift - AVCapturePhotoOutput 不提供预览缓冲区

使用 AVCapturePhotoOutput 设置自定义相机。配置 AVCapturePhotoOutput 以在主 JPEG 缓冲区之外提供预览缓冲区(缩略图)。

问题是我只接收一次预览缓冲区(第一次捕获),然后从第二次开始接收 nil(始终正确接收主 photoSampleBuffer)。

这是我设置捕获的方式:

在我的 PhotoCaptureDelegate(实现 AVCapturePhotoCaptureDelegate)中:

发生的情况是,我第一次拍摄时同时收到 photoSampleBuffer 和 previewPhotoSampleBuffer。第二次以后我只收到photoSampleBufferpreviewPhotoSampleBuffer = nil虽然当我检查时resolvedSettings.previewDimensions我得到: CMVideoDimensions(width: 160, height: 120)

如果我通过重新配置捕获会话来切换相机(从前到后),那么之后的第一次捕获就可以了,然后再次没有预览缓冲区。委托回调中的error参数始终为零。

在运行 iOS 10.3.1 的 iPhone 6 上测试

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

ios - ios didOutputSampleBuffer 丢弃前几帧

我正在制作一个需要使用录制视频和音频的应用程序AVCaptureVideoDataOutputSampleBufferDelegate

我使用的功能是:

和编码帧功能:

问题是当我开始录制(将 isCapturing 标志设置为 true)时,前几帧被丢弃(原因是 FrameWasLate),Apple 的文档说这是因为 sampleBuffer 没有足够快地释放!,但我所做的只是初始化Avassetwriter而已!.

我试图将编码函数放在串行队列中,但没有成功!怎么了 ?!

0 投票
0 回答
228 浏览

avfoundation - AVCaptureVideoDataOutput 不给出任何帧

创建AVCaptureVideoDataOutput会话后不会产生任何帧。没有丢帧,检查了设备日志,但里面没有任何内容,设备也没有产生错误。

这已经过测试,可以在 iPod 上运行,但不能在 iPad Pro 上运行。

我正在使用的当前代码实现是:

0 投票
0 回答
435 浏览

ios - 每个单个 AVCaptureDevice 同时有多个 AVCaptureVideoDataOutput

设想

我正在开发一个进行视频处理和流式传输的应用程序。我已经完美地从后置摄像头流式传输视频。问题是我还必须对视频数据进行处理,但只能在本地进行。事实证明,我用来进行本地视频处理的 API需要与我用来将数据流式传输到服务器的 API 不同的像素格式。看来我需要两个单独的会话同时从后置摄像头捕获视频。这将允许一个会话进行处理,一个会话用于流式传输。

问题

每次我尝试创建一个新会话以使用相同的AVCaptureDevice(返回)时,我的流媒体立即停止。下面的代码:

我收到中断原因 videoDeviceInUseByAnotherClient

videoDeviceInUseByAnotherClient:由于视频设备暂时不可用(例如,当另一个捕获会话使用时)而导致的中断。

我也尝试将原始捕获会话的输出添加到新会话中,但每次canAddOutput:方法返回时NO。我的猜测是因为已经有一个与该输出关联的会话。

问题

我如何使用它同时输出AVCaptureDevice到两个单独AVCaptureVideoDataOutput的 s ?或者我怎样才能达到与下图相同的效果?

在此处输入图像描述

0 投票
1 回答
643 浏览

ios - 迁移到 Swift 4 后,是否已停止调用 AVCaptureOutput 函数?

迁移 Swift 4 后,已停止调用以下函数。我找不到原因。