【发布时间】:2013-08-13 20:45:07
【问题描述】:
我正在创建一个应用程序,用户应该在其中录制自己的视频,而另一个视频正在相机视图旁边的屏幕上播放。结果将是两个视频文件、一个源和一个录制文件。使用 AVCaptureSession 等,我成功地录制了一个视频,同时另一个视频正在屏幕上播放。问题是它不完全同步。
这就是我现在的设置方式:
-(void)playAndRecordInSync //Session is already set etc.
{
player = [AVPlayer playerWithURL:url];
playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
[playerLayer setFrame:leftCameraView.bounds];
[playerLayer setVideoGravity:AVLayerVideoGravityResizeAspectFill];
[leftCameraView.layer addSublayer:playerLayer];
//Will stop recording camera when source video reaches end(notification):
player.actionAtItemEnd = AVPlayerActionAtItemEndNone;
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(playerItemDidReachEnd:)
name:AVPlayerItemDidPlayToEndTimeNotification
object:[player currentItem]];
//Start playback:
[player play];
//Start recording:
[movieOutput startRecordingToOutputFileURL:outputURL recordingDelegate:self];
}
- (void)playerItemDidReachEnd:(NSNotification *)notification {
[movieOutput stopRecording];
}
这样做的结果是两个视频,但第二个(录制的)视频比源/原始视频稍长。当它们相互叠加播放时(同时),然后播放视频 nr。 2 有将近半秒的延迟。由于“额外”的时间,感觉 video2 已经开始录制得太早了。也可能是播放开始得太晚了。无论哪种方式,我都不知道如何在此基础上做出任何一致性。我可能可以在睡眠等方面玩很多,但这仅适用于我的手机,因为这与手机的速度有关。
即使AVPlayer 有像-(void)willStartPlaying 这样的委托方法,我认为不存在,同步仍然存在问题,因为在返回之前有一个小的等待。有没有办法一次触发两个命令?或者有其他解决方案吗?
编辑
我一直在阅读this (AVSynchronizedLayer),但我不确定这是否适用于我的情况,我不明白如何继续。
【问题讨论】:
标签: ios cocoa synchronization avfoundation avplayer