カメラビューの横の画面で別のビデオが再生されている間に、ユーザーが自分自身をビデオ録画することになっているアプリを作成しています。その結果、2 つのビデオ ファイル、1 つのソース、および 1 つの録画が作成されます。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];
}
この結果、2 つのビデオが作成されますが、2 番目の (記録された) ビデオはソース/元のビデオよりもわずかに長くなります。それらを重ねて(同時に)再生すると、ビデオ番号。2 はほぼ 0.5 秒の遅延があります。「余分な」時間があったため、video2 の録画開始が早すぎたように感じます。また、再生の開始が遅すぎた可能性もあります。いずれにせよ、これに基づいてここで一貫性を保つ方法がわかりません。おそらくスリープなどでいろいろいじることができますが、これは電話の速度に関係しているため、私の電話でのみ機能します。のようなデリゲートメソッドがあって-(void)willStartPlaying
もAVPlayer
、私はないと思いますが、戻ってくるまで少し待つので、同期にはまだ問題があります。一度に 2 つのコマンドを実行する方法はありますか? または、これに対する別の解決策はありますか?
編集
これ( ) を読んでいますがAVSynchronizedLayer
、これが自分の状況に当てはまるかどうかわかりません。また、どのように進めればよいかわかりません。