问题标签 [avcapturevideodataoutput]

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

swift - 使用 AVCaptureVideoDataOutput 正确录制视频

背景:

我正在使用AVCaptureVideoDataOutput其他AVCaptureSession各种AV工具来创建视频会话,以便我可以创建相机会话。我有相机在屏幕上看到的实时信息。

我使用AVCaptureVideoDataOutput而不是AVCaptureMovieFileOutput因为我通过实时提要获得的图像是使用CIFilter's. 现在,我想记录按下按钮时向用户显示的内容。我这样做的想法是使用下面的函数,因为我认为这个函数会捕获每一帧。我从Apple 的页面中推断出这一点,该页面指出:

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

我希望每一帧都在这里,这样我就可以使用一个AVAssetWriter并将缓冲区添加到videoWriterInput. 这可以在这里看到,其中答案表明该方法每次都func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)添加。sampleBuffervideoWriterInput

我的努力:

我试图模拟上面的 SO 帖子,其中答案AVAssetWriter用于写入AVCaptureVideoDataOutput文件。但是,我的代码(如下所示)没有调用AVCaptureVideoDataOutputSampleBufferDelegate func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)委托方法。

注意:这不是所有代码 - 我只添加相关部分 - 如果缺少您需要的东西,请告诉我

VideoCapture.swift

另一个文件.swift

我的期望:

我期待这个方法

被调用并至少打印出上面示例中的缓冲区。这没有发生,所以我无法进一步开发并将我的缓冲区插入到videoWriteInput记录中。

实际发生的事情:

它永远不会被调用。我确保使用设置委托videoDataOutput.setSampleBufferDelegate(self, queue: dataOutputQueue)并清楚地表明委托方法已创建。我肯定会使用自动完成功能,以便从 XCode 创建该方法,所以我没有弄乱方法名称,例如这个 SO post

问题:

我怎样才能适当地获取要调用的方法——假设我的直觉是正确的,这个方法是为每一帧调用的,并且是我可以插入到我的缓冲区中videoWriterInput——这样我就可以从AVCaptureSession屏幕上看到的视频录制?

值得注意的是:

这个项目在调用方面不起作用

虽然 确实有效。

编辑:

我发现由于某种原因,AVCaptureDataOutputSynchronizer导致它不调用委托函数。有任何想法吗?

0 投票
1 回答
107 浏览

avfoundation - CIFilter的输出对于同一图像的不同尺寸有不同的效果

在此处输入图像描述 在此处输入图像描述

我有两个输出:

  • 用于预览的 AVCaptureVideoDataOutput
  • AVCapturePhotoOutput 用于在 hightResolution 中保存照片。

应用过滤器后,我得到不同的结果

请帮我解决这个问题。

0 投票
2 回答
969 浏览

ios - AVCaptureSession - 并行添加多个输出

我正在尝试将捕获的帧记录为视频,同时同时对帧执行图像处理任务。

我有一个 AVCaptureSession,我添加了两个单独的输出到 -

  1. AVCaptureVideoData输出
  2. AVCaptureMovieFile输出

我确认了AVCaptureVideoDataOutputSampleBufferDelegateAVCaptureFileOutputRecordingDelegate

captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) 用于帧捕获和分析以及func fileOutput(_ output: AVCaptureFileOutput, didStartRecordingTo fileURL: URL, from connections: [AVCaptureConnection])视频录制

出于某种原因,每种方法都单独工作,但是当我添加两个输出时,只有视频录制工作并且根本不调用“captureOutput”函数。

任何想法为什么会发生这种情况,我做错了什么?或者在设置和配置会话时我应该确保什么?

0 投票
1 回答
222 浏览

ios - AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 同一个队列

Apple 最近的示例代码之一使用相同的串行队列从 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 委托接收样本。从性能的角度来看,我需要知道这是否是可接受的做法。两个样本缓冲区代表应该有不同的队列还是单个队列?特别是在设置多个相机输入/输出时,这一点变得很重要。

0 投票
1 回答
509 浏览

swift - 使用 avfoundation 录制视频并将其保存到照片库 ~ Swift5

我下面的快速代码使用 avfoundation 拍摄照片并将其放在一个类中的 imageview 上。我想将此代码用作基础,并且仅当用户调用 func startVideo 进行录制时,然后当用户调用 saveVideo func 时,它会停止录制并将其保存到 imageivew 中。

在此处输入图像描述

0 投票
1 回答
533 浏览

swift - 快速实时相机中的文本检测

我正在使用 swift 在实时摄像头中检测文本,但帧未识别出正确的单词。当我尝试检测图像中的文本并且帧绘制在世界各地时,该应用程序运行良好。

看图片

对于实时摄像头,我所做的是创建一个捕获视频会话 并实现AVCaptureVideoDataOutputSampleBufferDelegate然后在didOutput我正在获取缓冲图像并将其转换为UIImage并检测其中的文本。但在这种情况下,相同的策略无法正常工作。

在实时相机中检查结果 此外,在开始视频会话后每次调用didOutput,我想要的是仅在用户移动他的相机或查找文本时调用一个函数。

有什么解决办法吗?//转换函数

0 投票
1 回答
127 浏览

swift - 快速检测 AVCaptureSession 中的相机状况

我正在开发一个快速应用程序,我想在相机不移动或用户专注于某物时在视频期间拍照。我使用了AVCaptureVideoDataOutputSampleBufferDelegate *captureOutput 方法,每次启动相机后都会给我图像。但我只想在相机不移动或不聚焦时拍摄。

有什么解决办法吗

0 投票
0 回答
280 浏览

cocoa - CMSampleBufferGetDataBuffer() 返回 nil 值 - Cocoa Swift

我正在尝试捕获系统的屏幕并处理数据。但是我在委托方法CMSampleBufferGetDataBuffer中获得的样本缓冲区的值为零。captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)任何想法?下面是我的代码:

0 投票
5 回答
2547 浏览

ios - AVFoundation 在 iPhone 12 上录制 10 位 HDR 视频

iPhone 12/12 pro 支持以 10 位格式而不是 8 位录制杜比视界 HDR 视频,但从 iOS 14.1 SDK 中尚不清楚 AVCaptureVideoDataOutput 是否支持交付可使用 AVAssetWriter 附加到视频文件的 10 位样本缓冲区。有没有人弄清楚它是否可能在SDK中?

编辑:许多应用程序,如 Apple 的 Clips 应用程序已经开始支持杜比视界 10 位视频录制。但我尝试了所有可用的 API,包括 videoHDREnabled,但它不起作用。因此,明确的问题是如何使用 AVFoundation API 录制 HDR(杜比视界)视频?

EDIT2:我能够找出支持 10 位像素缓冲区格式的设备格式(即“x420”,而不是以 420v 或 420f 作为媒体子类型的设备格式)。在 iPhone 12 mini 上,4 种设备格式支持 kCVPixelFormatType_420YpCbCr10BiPlanarVideoRange 中的 10 位像素缓冲区交付,即使 AVFoundation 文档说这不是受支持的像素格式(引用 - “iOS 上,唯一支持的键是 kCVPixelBufferPixelFormatTypeKey。支持的像素格式是 kCVPixelFormatType_420YpCbCr8BiFullPlanarVideoRange、kCVPixelFormatPlanType_420YpCbCrArnge和 kCVPixelFormatType_32BGRA。”)。下一步是确定是否可以手动选择用于录制的 HDR 格式为杜比视界、HLG 或 HDR10。

0 投票
1 回答
33 浏览

swift - kCVPixelBufferHeightKey 和宽度不起作用

有没有办法为所需的输出设置设置自定义 AVCaptureVideoDataOutput。我试图达到的目标如下。但是缓冲区的宽度和高度永远不会改变。我试图实现的是视频像素输出的自定义高度和宽度。我错过了什么?

因此,我尝试使用会话预设来实现相同的目标,但它们无法设置自定义宽度和高度。如果我能获得 300x300 的输出,那就是胜利