2012-12-19 36 views
5

我嘗試創建應用程序,在此可以在錄製過程中從設備上的不同相機錄製視頻。例如, 。用戶按下前面攝像頭的「開始錄像」按鈕,5秒鐘錄像後,按下「切換攝像頭」按鈕,應用程序將視頻源從前置攝像頭改爲後置攝像頭,並繼續錄像。 對於相機交換臺我用下面的代碼:開關相機後音頻/視頻不同步

NSError *error; 
AVCaptureDeviceInput *newVideoInput; 
AVCaptureDevicePosition currentCameraPosition = [[videoInput device] position]; 

if (currentCameraPosition == AVCaptureDevicePositionBack) 
{ 
    currentCameraPosition = AVCaptureDevicePositionFront; 
} 
else 
{ 
    currentCameraPosition = AVCaptureDevicePositionBack; 
} 

AVCaptureDevice *backFacingCamera = nil; 
NSArray *devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; 
for (AVCaptureDevice *device in devices) 
{ 
    if ([device position] == currentCameraPosition) 
    { 
     backFacingCamera = device; 
    } 
} 
newVideoInput = [[AVCaptureDeviceInput alloc] initWithDevice:backFacingCamera error:&error]; 

if (newVideoInput != nil) 
{ 
    [_captureSession beginConfiguration]; 

    [_captureSession removeInput:videoInput]; 
    if ([_captureSession canAddInput:newVideoInput]) 
    { 
     [_captureSession addInput:newVideoInput]; 
     videoInput = newVideoInput; 
    } 
    else 
    { 
     [_captureSession addInput:videoInput]; 
    } 
    //captureSession.sessionPreset = oriPreset; 
    [_captureSession commitConfiguration]; 
} 

_inputCamera = backFacingCamera; 

這種器件的應用改變視頻SOURSE後,繼續寫作,但...音頻/視頻不同步...... 可有人hehp我解決這個問題?

謝謝。

+0

有同樣的問題。 – Liron

回答

1

您需要停止錄製,切換並重新啓動。 相機開關不是即時AFAIK

你不能記錄到n個文件,然後將它們拼接在一起?

嘗試使用單個AVMutableComposition軌道,然後爲音頻設置可變組合,爲視頻設置一個可變組合。 (見Merging two m4v Movie Files Using AVMutableComposition - Videos Will Not Merge

+0

謝謝你的回覆。 如果我停止錄製和更換相機,是否有可能以某種方式繼續錄製在同一個文件 – kroumvud

+0

對不起,我不知道但是...不能你只是記錄到N文件,並將他們一起記錄下來? –

+0

你知道嗎,如果每次停止錄音然後開始一個新的錄音,那每個都停下來並開始一個新的錄音,應用程序會在很短的時間內凍結...並且這是不好的(( – kroumvud

0

切換拍照的時候,你需要暫停的委託方法緩衝區寫:

- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 

您可以檢出的開源項目PBJVision

+0

你真的有這個工作在你的最終?PBJVision有相同的[問題](https://github.com/piemonte/PBJVision/issues/328)這個問題是指。 –