AvFoundation - 如何连接AVCaptureSession和AVAssetWriter?

gol*_*enk 8 avfoundation ios avcapturesession avassetwriter

我正在尝试使用AVCaptureSession从摄像头捕获视频,然后我想使用AVAssetWriter将结果写入文件(具体来说,使用多个AVAssetWriters将捕获写入块视频,但我们不需要复杂化这个问题).但是,我无法确定实际需要将数据传递到AVAssetWriter的位置.在Apple Developer文档中,我只看到AVCaptureSession数据被传递给AVCaptureFileOutput.也许我只是错过了一些东西.AVAssetWriter可以用作捕获会话的输出吗?可以理解相关的示例或代码位(虽然不是必需的).非常感谢!

Ger*_*ies 6

请访问http://www.gdcl.co.uk/2013/02/20/iOS-Video-Encoding.html.这显示了如何将捕获输出与资产编写器连接,然后从资产编写器中提取数据以进行流式处理.

G


zad*_*adr 5

你的目标到底是什么?因为您要求(使用 AVAssetWriter 作为 AVCaptureSession 的输出)是不可能的。

基本上,一个AVCaptureSession对象具有输入(例如:相机,由某个AVCaptureInput子类表示)和输出(以 的形式AVCaptureOutput)。并且 anAVAssetWriter不是AVCaptureOutput子类,因此无法直接从 AVCaptureSession 使用它。

如果您想使用 AVAssetWriter,则必须使用实例将数据写出AVCaptureFileOutput,然后使用 读回AVAssetReader,以某种方式修改数据,然后通过 输出AVAssetWriter

最后要记住的一点AVAssetReader是:记录下来并不能保证实时操作。

  • 您不需要使用“AVAssetWriter”将视频分成 10 秒的块。您可以使用“AVCaptureMovieFileOutput”来做到这一点;将 `maxRecordedDuration` 属性设置为 10 秒,并在 `-captureOutput:didFinishRecordingToOutputFileAtURL:fromConnections:error:` 中重新开始录制(到新文件)以获取接下来的 10 秒。 (3认同)
  • 根据我的搜索,这似乎是从 iPhone 流式传输实时摄像头视频的最常见方式。既然你提到了这一点,我更困惑为什么这是建议的方法...... (2认同)