2016-03-28 111 views
0

我基于AVCaptureSession创建了一个简单的AVCaptureVideoPreviewLayer,并将该图层添加到UIView中。AVCaptureSession的AVCaptureVideoPreviewLayer随机停止视频流

AVCaptureSession *session = [[AVCaptureSession alloc] init]; 
session.sessionPreset = AVCaptureSessionPresetHigh; 

AVCaptureDevice *device = [AVCaptureDevice defaultDeviceWithMediaType:AVMediaTypeVideo]; 

NSError *error = nil; 
AVCaptureDeviceInput *input = [AVCaptureDeviceInput deviceInputWithDevice:device error:&error]; 

[session addInput:input]; 

AVCaptureVideoPreviewLayer *previewLayer = [[AVCaptureVideoPreviewLayer alloc] initWithSession:session]; 
previewLayer.frame = self.cameraView.bounds; 

[self.cameraView.layer addSublayer:previewLayer]; 

[session startRunning]; 

运行的应用程序后,代码似乎很好地工作 - 但经过一段时间(约60 - 90秒)视频随机冻结!

我增加了一个按钮来停止和启动AVCaptureSession阿恩,如果我冷冻后按下按钮,视频将重新开始工作......

是否有人知道随机停止视频流的原因是什么?

回答

4

尝试为AVCaptureMovieFileOutput集maxRecordedDuration添加,在你的AVCaptureSession,这里是5000第二个记录时间的示例代码

AVCaptureMovieFileOutput *MovieFileOutput; =[[AVCaptureMovieFileOutput alloc] init]; 

Float64 MaxRecordDuration = 5000;   //Maximum RecordDuration in seconds replace 5000 with YOUR_MAX_DURATION 
int32_t preferredTimeScale = 30; //Frames per second 
CMTime maxDuration = CMTimeMakeWithSeconds(MaxRecordDuration, preferredTimeScale); //<<SET MAX DURATION 

MovieFileOutput.maxRecordedDuration = maxDuration; 
MovieFileOutput.minFreeDiskSpaceLimit = 1024 * 1024;       
if ([session canAddOutput:MovieFileOutput]) 
{ 
    [session addOutput:MovieFileOutput]; 
} 
[session commitConfiguration]; 
[session startRunning];