【问题标题】:AVCaptureSession audio doesn't work for long videosAVCaptureSession 音频不适用于长视频
【发布时间】:2014-11-05 23:16:14
【问题描述】:

我正在使用 AVCaptureSession 录制带音频的视频。对于短视频来说,一切似乎都可以正常工作,但由于某种原因,如果我录制的视频长度超过 12 秒,音频就无法正常工作。

【问题讨论】:

  • 实际上超过 10 秒

标签: ios avcapturesession


【解决方案1】:

编辑因为这个答案仍然得到支持):这个答案可以缓解问题,但问题的可能根本原因已在@jfeldman's answer 中解决。


我找到了an answer to a completely different question的解决方案。

问题在于 AVCaptureMovieFileOutput 中的 movieFragmentInterval 属性。

该属性的文档解释了这些片段是什么:

QuickTime 影片由媒体样本和样本表组成 识别它们在文件中的位置。没有样本的电影文件 表格不可读。

在处理过的文件中,样本表通常出现在 文件的开头。它也可能出现在文件的末尾,在 在这种情况下,标题包含指向样本表的指针 结尾。正在录制新的电影文件时,无法 编写示例表,因为文件的大小尚不清楚。 相反,必须在记录完成时写入表。如果 没有采取其他行动,这意味着如果录音没有 成功完成(例如,在崩溃的情况下),文件 数据不可用(因为没有样本表)。通过定期 将“电影片段”插入电影文件,样本表可以 逐步建立起来。这意味着如果文件没有被写入 完全,电影文件仍然可用(直到 最后一个片段被写入)。

它还说:

默认值为 10 秒。设置为 kCMTimeInvalid 以禁用电影 片段写作(通常不推荐)。

因此,由于某种原因,每当写入片段时,我的录音就会变得混乱。我刚刚添加了movieFileOutput.movieFragmentInterval = kCMTimeInvalid; 行(其中movieFileOutput 是我添加到AVCaptureSession 中的AVCaptureMovieFileOutput)来禁用片段写入,音频现在可以工作了。

【讨论】:

    【解决方案2】:

    我们也遇到过这个问题。基本上禁用电影片段写入会起作用,但它实际上并不能解释问题。您很可能正在使用不支持此功能的文件扩展名录制到输出文件,例如mp4。如果您传递扩展名为 mov 的输出文件,则使用电影片段写入应该没有问题,并且输出文件将包含音频。

    【讨论】:

      【解决方案3】:

      更新videoFileOutput.movieFragmentInterval = kCMTimeInvalid 为我解决了这个问题。

      但是,我在调用startRecordingToOutputFileURL 后不小心设置了movieFragmentInterval。痛苦的一个小时后,我意识到我的错误。对于像我这样的新手,请注意这个明显的顺序

      videoFileOutput.movieFragmentInterval = kCMTimeInvalid
      videoFileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: recordingDelegate)
      

      【讨论】:

        【解决方案4】:

        kCMTimeInvalid 现在已弃用。这是现在分配它的方法:

        videoFileOutput?.movieFragmentInterval = CMTime.invalid

        【讨论】:

          猜你喜欢
          • 2012-05-08
          • 1970-01-01
          • 2012-02-28
          • 1970-01-01
          • 1970-01-01
          • 2016-10-15
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多