eyu*_*elt 14 ios avcapturesession
我正在使用AVCaptureSession录制带有音频的视频.对于短视频,一切似乎都能正常工作,但出于某种原因,如果我录制的视频长度超过12秒,则音频不起作用.
eyu*_*elt 27
我发现解决方案是一个完全不同的问题的答案.
问题是movieFragmentInterval
AVCaptureMovieFileOutput中的属性.
此属性的文档说明了这些片段是什么:
QuickTime影片由媒体样本和标识其在文件中的位置的样本表组成.没有样本表的电影文件是不可读的.
在已处理的文件中,示例表通常显示在文件的开头.它也可能出现在文件的末尾,在这种情况下,标题包含指向结尾的样本表的指针.当正在记录新的电影文件时,由于尚不知道文件的大小,因此无法编写样本表.相反,必须在录制完成时写入表格.如果不采取其他操作,这意味着如果录制未成功完成(例如,在发生崩溃的情况下),则文件数据不可用(因为没有样本表).通过定期将"电影片段"插入电影文件中,可以逐步建立样本表.这意味着如果文件没有完全写入,则电影文件仍然可用(直到最后一个片段被写入的位置).
它还说:
默认值为10秒.设置为kCMTimeInvalid以禁用电影片段写入(通常不推荐).
因此,出于某种原因,无论何时写入片段,我的录音都会变得混乱.我刚刚添加了一行movieFileOutput.movieFragmentInterval = kCMTimeInvalid;
(movieFileOutput
我在AVCaptureSession中添加了AVCaptureMovieFileOutput)以禁用片段写入,现在音频正常工作.
我们也遇到过这个问题.基本上禁用电影片段写入将起作用,但它实际上并没有解释这个问题.您很可能使用不支持此功能的文件扩展名录制到输出文件,例如mp4
.如果传递带扩展名的输出文件,则mov
使用电影片段写入时应该没有问题,输出文件将具有音频.
小智 5
更新videoFileOutput.movieFragmentInterval = kCMTimeInvalid
为我解决了这个问题。
但是,我不小心movieFragmentInterval
在调用后设置了startRecordingToOutputFileURL
. 痛苦的一个小时后,我意识到我的错误。对于像我这样的新手,请注意这个明显的顺序。
videoFileOutput.movieFragmentInterval = kCMTimeInvalid
videoFileOutput.startRecordingToOutputFileURL(filePath, recordingDelegate: recordingDelegate)
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2005 次 |
最近记录: |