2016-03-28 117 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];