我正在编写一个应用程序,使用AVCaptureSession
作为输出AVCaptureVideoDataOutput
进行实时视频处理,并使用相机作为输入AVCaptureDeviceInput
。然后需求发生变化,现在我需要保存视频文件,并处理视频(不再需要实时)
是否可以a)将AVCaptureMovieFileOutput
和AVCaptureVideoDataOutput
附加到同一AVCaptureSession
?尝试它和初步搜索都表明这是不可能的,但是这里有人可能知道一种方式。
b)使用AVCaptureMovieFileOutput
录制到文件,然后将文件用作AVCaptureSession
的输入而不是相机?这将允许我重用之前的所有代码。我找不到使用文件作为AVCaptureSession
的输入的方法了。
如果这些方法都不可能,那么在iOS上保存和处理视频的最佳方法是什么(同时或顺序)?
答案 0 :(得分:1)
我知道这篇文章差不多有三年了,但是它帮助我朝着正确的方向发展,我想我会回答一下我的所作所为。
为了捕捉"来自文件的视频,我使用了通常的AVPlayer设置,例如:
然后使用AVPlayerItem addOutput方法添加AVPlayerItemVideoOutput实例,就像在GreenScreen演示中一样:
但是没有过滤,而是使用了CVDisplayLink,我只使用了间隔为33ms的计时器,并在AVPlayerItems currentTime值上使用了hasNewPixelBufferForItemTime和copyPixelBufferForItemTime。这足以“捕获”#34;大约25fps,这足以达到目的。
我使用Delphi实现了这一点,但是上面应该提供足够的线索,以便能够在ObjectiveC,Swift,C#或任何您支持的语言选择中做同样的事情。
答案 1 :(得分:0)
这是另一篇暗示可能出现的情况:
How do i save a video (mp4 format) using AVCaptureVideoDataOutput?
基本上,使用AVCaptureVideoDataOutputSampleBufferDelegate方法:
captureOutput:didOutputSampleBuffer:fromConnection:
根据需要处理框架。然后,您可以使用AVAssetWriter实际存储数据。
关于你的观点a),你是对的,你不能同时使用AVCaptureMovieFileOutput和AVCaptureVideoDataOutput。