【问题标题】:AvFoundation - How to connect AVCaptureSession and AVAssetWriter?AvFoundation - 如何连接 AVCaptureSession 和 AVAssetWriter?
【发布时间】:2013-04-08 22:11:11
【问题描述】:

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

【问题讨论】:

    标签: ios avfoundation avcapturesession avassetwriter


    【解决方案1】:

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

    G

    【讨论】:

      【解决方案2】:

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

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

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

      要记住的最后一件事:AVAssetReader 已记录在案,不能保证实时操作。

      【讨论】:

      • 嗯,很有趣。我试图摆脱我在答案 here 和被赞成的 cmets here (以及其他)中找到的内容,他们建议可以通过创建两个 AVAssetWriters 并一次使用一个来实现流式传输。
      • 根据我的搜索,这似乎是实现从 iphone 流式传输实时摄像头视频的最常见方式。既然您已经提到了这一点,我对为什么这是建议的方法感到更加困惑......
      • 您不需要使用AVAssetWriter 将视频分成 10 秒的块。你可以用AVCaptureMovieFileOutput 做到这一点;将maxRecordedDuration 属性设置为10s,然后在-captureOutput:didFinishRecordingToOutputFileAtURL:fromConnections:error: 中重新开始录制(到新文件)以获得接下来的10s。
      • 我仍然很想知道为什么其他人会使用双 AVAssetWriters,但这将是一个专门问他们的问题。
      • @Adam 稍微扩展一下,AVFoundation 作为一个框架,不以支持 @golmschenk 试图完成的格式输出视频(即使用 iPhone 实时流式传输视频-时间。)。基本上,解码视频所需的重要元数据位被写入文件的end,即使设置了AVCaptureOutputexpectsMediaDataInRealTime 属性。否则,任何关于如何编写视频文件的假设都是危险的。
      猜你喜欢
      • 1970-01-01
      • 2018-04-03
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-19
      相关资源
      最近更新 更多