2012-12-19 37 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)这个问题是指。 –