使用AVFoundation - (void)startRecordingToOutputFileURL:(NSURL*)outputFileURL recordingDelegate:(id<AVCaptureFileOutputRecordingDelegate>)delegate;
方法录制视频时,如果视频持续时间超过12秒,则输出文件中没有音轨。如果视频持续时间少于12秒,一切正常......
收到输出文件URL的代理是:
- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didFinishRecordingToOutputFileAtURL:(NSURL *)outputFileURL fromConnections:(NSArray *)connections error:(NSError *)error
{
NSLog(@"AUDIO %@", [[AVAsset assetWithURL:outputFileURL] tracksWithMediaType:AVMediaTypeAudio] objectAtIndex:0]); //App crashes here...
NSLog(@"VIDEO %@", [[AVAsset assetWithURL:outputFileURL] tracksWithMediaType:AVMediaTypeVideo]);
}
我的应用因超过12秒的视频崩溃而导致此错误:*** -[__NSArrayM objectAtIndex:]: index 0 beyond bounds for empty array'
答案 0 :(得分:4)
我的猜测是AVCaptureMovieFileOutput比mp4更好地支持QuickTime容器(.qt,.mov),尽管它是行业标准。例如,当将片段中的电影文件写入.mp4时,片段表(样本表)可能会发生某种情况。
因此,您可以将文件格式更改为.mov,或者将文件转换为片段。看到这个问题: ios-8-ipad-avcapturemoviefileoutput-drops-loses-never-gets-audio-track-after
答案 1 :(得分:0)
刚刚将录制视频的路径的扩展名更改为来自mp4的mov并且有效...
答案 2 :(得分:0)
花了将近1天的时间来解决此问题,这是此问题的完美解决方案...
只需添加此行
avCaptureMovieFileOutput.movieFragmentInterval = kCMTimeInvalid