【问题标题】:Pause & resume video capture for same file with AVFoundation in iOS在 iOS 中使用 AVFoundation 暂停和恢复相同文件的视频捕获
【发布时间】:2013-02-16 01:17:32
【问题描述】:

我试图弄清楚如何实现在单个会话中重复暂停和恢复视频捕获的功能,但将每个新片段(每次暂停后捕获的片段)添加到同一个视频文件中,使用 AVFoundation。目前,每次我按“停止”然后再次“录制”时,它只是将一个新的视频文件保存到我的 iphone 相册并开始捕获到一个单独的/新文件。我需要能够一遍又一遍地按下“录制/停止”按钮......仅在录制处于活动状态时捕获视频和音频......然后当按下“完成”按钮时,拥有一个包含所有段在一起。所有这些都需要在同一个捕获会话/预览会话中进行。

我能想到的唯一方法是按下“完成”按钮,获取每个单独的输出文件并将它们组合到一个文件中......但我很确定基本上粘贴的处理时间一堆单独的剪辑在一起是不可接受的。另外,这似乎是一种非常混乱且不必要的方式,代码太多了。

是否有任何简单的方法可以在单个会话中暂停视频捕获并简单地恢复对同一文件的捕获?还是有其他想法?

如果不是太麻烦,示例代码会帮助我很多...我仍在自学和自学,所以我不太擅长在解释中遵循术语和术语。谢谢

编辑:这是我开始学习 AVFoundation 的项目...所以这是我希望更改以实现上述功能的代码:http://developer.apple.com/library/ios/#samplecode/AVCam/Introduction/Intro.html

【问题讨论】:

  • 如果你最终找到了这个问题的答案,请联系我。
  • @Daniel 你得到解决方案了吗?

标签: iphone ios objective-c avfoundation video-capture


【解决方案1】:

您可以使用AVCaptureVideoDataOutput 并在您的委托中将样本传递给AVAssetWriterInput 的实例,而不是使用捕获会话的电影文件输出。然后,您可以将预览与录制分离。如果您的代理不将缓冲区转发给资产写入器,则该部分没有记录。

当您想开始将第二个(及后续)会话记录到同一个文件时,您需要调整时间戳,以便它们从您停止的点开始按顺序排列,并且您需要确保您对音频和视频进行相同的调整,使它们保持同步。所以有点繁琐,但肯定是可行的。

编辑:有一个 sample iPhone app 证明了这一点。

【讨论】:

  • 感谢 Gerraint 的回复。我对objective-c还是新手,并试图摸索理解你所说的内容。我当然理解你的回答背后的逻辑,而且看起来它可能会奏效。对我来说,问题是弄清楚如何实际实施。我一直在四处寻找示例/示例代码,以获取您所建议的点点滴滴,但我遇到了困难。我将继续寻找,如果我能让这个工作,我会立即接受你的回答。同时,如果您有任何示例代码或链接可以帮助我入门,这将对我有很大帮助!谢谢
  • 我有一些代码。我会把它整理成一个可发布的样本。如果您在几天内没有看到任何内容,请联系我。
  • @Geraint Davies - 我正在寻找完全相同的东西。能否请您在 github 上发布您的代码。我也找不到任何关于此的文章或示例。谢谢
  • @GeraintDavies 非常感谢,我等不及要看了。我想出了实现同一目的的另一种方法,即通过 AVMutableComposition,记录单独的文件,然后将帧分开并在最后将所有内容组合在一起....但是在运行时编译和创建合成剪辑的处理时间是绝对的噩梦...再次感谢,期待您的更新:)
  • 我已经上传了示例并编辑了文本以包含一个链接。如果您有任何问题或问题,请随时与我们联系。
【解决方案2】:

一般来说,如果我使用 AVCaptureSession,我会使用 startRunning 和 stopRunning。我想你会的。

请参阅 AVCaptureSession 的文档。

【讨论】:

  • Wont stopRunning 会停止整个会话并结束实际录制时相机将捕获的内容的实时预览?
  • 正确,因为当您实例化 AVCaptureVideoPreviewLayer 时,您会使用特定会话来执行此操作。您是否希望保持预览层继续运行并能够开始捕获/停止捕获?类似于录像机?
  • 是的,我需要保持预览层继续运行。用户需要基本上能够指向,捕捉几秒钟,停止......看别的东西,指向,捕捉,停止......看别的东西,指向,射击,停止......等等,都在同一个会话中。然后完成后,拥有一个视频文件,该文件仅在单个流动文件中播放每个捕获。我还稍微编辑了我的问题,希望能更清楚一点,更有意义
  • Daniel 完成后能否请您发布示例代码?我正在寻找完全相同的事情,我一生都无法在任何地方找到任何示例代码
  • @SamB 你得到解决方案了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多