gpt4 book ai didi

ios - 同步录音/回放ios

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:20:54 25 4
gpt4 key购买 nike

我正在创建一个应用程序,用户应该在其中录制自己的视频,同时另一个视频正在相机 View 旁边的屏幕上播放。结果将是两个视频文件、一个来源和一个录音。使用 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 开始录制的时间太早了。也可能是播放开始得太晚了。无论哪种方式,我都不知道如何在此基础上保持一致性。我可能可以在 sleep 等方面玩很多东西,但这只适用于我的手机,因为这与手机的速度有关。即使 AVPlayer 有一个像 -(void)willStartPlaying 这样的委托(delegate)方法,我认为没有,但同步仍然会有问题,因为有一个小的等待,直到返回。有没有办法同时触发两个命令?或者有其他解决方案吗?

编辑

我一直在阅读 this (AVSynchronizedLayer),但我不确定这是否适用于我的情况,而且我不明白如何继续。

最佳答案

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

关于ios - 同步录音/回放ios,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18218892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com