【问题标题】:Synchronized recording/playback ios同步录音/回放ios
【发布时间】: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


    【解决方案1】:

    我发现延迟总是因为播放开始太晚造成的,但是录制和播放同时停止,所以我通过查找v2.duration - v1.duration解决了这个问题,并从开头减去结果v2,使用AVAssetExportSession。现在在不同层同时播放两个视频时,启动两个视频仍有一些延迟,但通过导出视频,我已经确认它们的长度相同并且现在是同步的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-17
      • 1970-01-01
      • 1970-01-01
      • 2018-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      相关资源
      最近更新 更多