同步录制/播放ios
我正在创建一个应用程序,当另一个视频在摄像机视图旁边的屏幕上播放时,用户应该自己录制视频。结果将是两个视频文件、一个源和一个录制。使用AVCaptureSession等,我成功地在屏幕上播放另一个视频的同时录制了一个视频。问题是它并不完全同步 我现在就是这样设置的:同步录制/播放ios,ios,cocoa,synchronization,avfoundation,avplayer,Ios,Cocoa,Synchronization,Avfoundation,Avplayer,我正在创建一个应用程序,当另一个视频在摄像机视图旁边的屏幕上播放时,用户应该自己录制视频。结果将是两个视频文件、一个源和一个录制。使用AVCaptureSession等,我成功地在屏幕上播放另一个视频的同时录制了一个视频。问题是它并不完全同步 我现在就是这样设置的: -(void)playAndRecordInSync //Session is already set etc. { player = [AVPlayer playerWithURL:url]; pl
-(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];
}
结果是两个视频,但第二个(录制的)视频略长于源/原始视频。当播放它们时(在同一时间),则视频编号2有将近半秒的延迟。感觉video2开始录制的时间太早了,因为有“额外”的时间。也可能是播放开始得太晚。不管怎样,我都不知道如何在此基础上保持一致性。我可能会经常玩睡眠等游戏,但这只适用于我的手机,因为这与手机的速度有关。
即使对于AVPlayer
,存在类似-(void)willStartPlaying
的委托方法(我认为没有),同步仍然会有问题,因为在返回之前会有一个小的等待。有办法同时发出两个命令吗?还是有其他解决办法
编辑
我一直在阅读(
AVSynchronizedLayer
),但我不确定这是否适用于我的情况,我不知道如何继续。我发现延迟总是因为播放开始太晚,但录制和播放同时停止,因此,我通过查找v2.duration-v1.duration
,并使用avassetxportsession
从v2开头减去结果,解决了这个问题。现在在不同的层中同时播放这两个视频时,启动这两个视频仍然会有一些延迟,但通过导出视频,我已经确认它们的长度相同,并且现在是同步的