问题标签 [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.
swift - 使用 AVCaptureVideoDataOutput 正确录制视频
背景:
我正在使用AVCaptureVideoDataOutput
其他AVCaptureSession
各种AV
工具来创建视频会话,以便我可以创建相机会话。我有相机在屏幕上看到的实时信息。
我使用AVCaptureVideoDataOutput
而不是AVCaptureMovieFileOutput
因为我通过实时提要获得的图像是使用CIFilter
's. 现在,我想记录按下按钮时向用户显示的内容。我这样做的想法是使用下面的函数,因为我认为这个函数会捕获每一帧。我从Apple 的页面中推断出这一点,该页面指出:
每当输出捕获并输出新的视频帧、解码或重新编码它的 videoSettings 属性时,代表就会收到此消息。代表可以将提供的视频帧与其他 API 结合使用以进行进一步处理。
我希望每一帧都在这里,这样我就可以使用一个AVAssetWriter
并将缓冲区添加到videoWriterInput
. 这可以在这里看到,其中答案表明该方法每次都func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)
添加。sampleBuffer
videoWriterInput
我的努力:
我试图模拟上面的 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
导致它不调用委托函数。有任何想法吗?
ios - AVCaptureSession - 并行添加多个输出
我正在尝试将捕获的帧记录为视频,同时同时对帧执行图像处理任务。
我有一个 AVCaptureSession,我添加了两个单独的输出到 -
- AVCaptureVideoData输出
- AVCaptureMovieFile输出
我确认了AVCaptureVideoDataOutputSampleBufferDelegate和AVCaptureFileOutputRecordingDelegate
我captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)
用于帧捕获和分析以及func fileOutput(_ output: AVCaptureFileOutput, didStartRecordingTo fileURL: URL, from connections: [AVCaptureConnection])
视频录制
出于某种原因,每种方法都单独工作,但是当我添加两个输出时,只有视频录制工作并且根本不调用“captureOutput”函数。
任何想法为什么会发生这种情况,我做错了什么?或者在设置和配置会话时我应该确保什么?
ios - AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 同一个队列
Apple 最近的示例代码之一使用相同的串行队列从 AVCaptureVideoDataOutput 和 AVCaptureAudioDataOutput 委托接收样本。从性能的角度来看,我需要知道这是否是可接受的做法。两个样本缓冲区代表应该有不同的队列还是单个队列?特别是在设置多个相机输入/输出时,这一点变得很重要。
swift - 快速检测 AVCaptureSession 中的相机状况
我正在开发一个快速应用程序,我想在相机不移动或用户专注于某物时在视频期间拍照。我使用了AVCaptureVideoDataOutputSampleBufferDelegate *captureOutput 方法,每次启动相机后都会给我图像。但我只想在相机不移动或不聚焦时拍摄。
有什么解决办法吗
cocoa - CMSampleBufferGetDataBuffer() 返回 nil 值 - Cocoa Swift
我正在尝试捕获系统的屏幕并处理数据。但是我在委托方法CMSampleBufferGetDataBuffer
中获得的样本缓冲区的值为零。captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)
任何想法?下面是我的代码:
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。
swift - kCVPixelBufferHeightKey 和宽度不起作用
有没有办法为所需的输出设置设置自定义 AVCaptureVideoDataOutput。我试图达到的目标如下。但是缓冲区的宽度和高度永远不会改变。我试图实现的是视频像素输出的自定义高度和宽度。我错过了什么?
因此,我尝试使用会话预设来实现相同的目标,但它们无法设置自定义宽度和高度。如果我能获得 300x300 的输出,那就是胜利