2013-10-14 30 views
4

我有錄製應用程序實現,用戶可以點擊「錄製」按鈕開始/停止錄製。我通過基本的GPUImageVideoCamera實現了這一點,輸出設置爲GPUImageView以及GPUImageMovieWriterGPUImageMovieWriter - 記錄視頻兩端偶爾出現黑框

50%的時間內,錄製的剪輯最後會在兩端有兩個(或一個)黑色框架,有時兩個都會結束。實現相當簡單,但無論如何都是這樣。

gpuImageView = [[GPUImageView alloc] initWithFrame:cameraView.frame]; 
gpuImageView.fillMode = kGPUImageFillModePreserveAspectRatioAndFill; 

[cameraView addSubview:gpuImageView]; 

videoCamera = [[GPUImageVideoCamera alloc] initWithSessionPreset:AVCaptureSessionPresetHigh cameraPosition:(usingBackCamera) ? AVCaptureDevicePositionBack : AVCaptureDevicePositionFront]; 

[videoCamera addTarget:gpuImageView]; 
[videoCamera addTarget:movieWriter]; 
videoCamera.audioEncodingTarget = movieWriter; 
[videoCamera startCameraCapture]; 

double delayToStartRecording = 0.5; 
dispatch_time_t startTime = dispatch_time(DISPATCH_TIME_NOW, delayToStartRecording * NSEC_PER_SEC); 
     dispatch_after(startTime, dispatch_get_main_queue(), ^(void){ 
      NSLog(@"Start recording"); 
      [movieWriter startRecording]; 
     }); 

,然後停止以下的(同時直播相機繼續出現在GPUImageView

[movieWriter finishRecording]; 

有其他人遇到這個和/或找到了解決方案,以避免黑幀的記錄?我無法暫停/恢復攝像頭捕捉,以確保無縫的用戶體驗

回答

5

通常發生這種情況是因爲在獲取任何視頻幀之前,隊列正在將音頻寫入文件中,難以從您的實現中得知,但如果您確保你寫入文件的第一件事是一個視頻幀,並且在寫入第一個視頻幀之前不要寫任何音頻,你將不會有任何黑色幀。