Синхронизация видео с анимацией openGL

Я пытаюсь синхронизировать видео с анимацией, созданной с помощью openGL на iPad, и есть две вещи, которые я не уверен, как это сделать:

  • Найдите текущий видеокадр.
  • Убедитесь, что обновление видео и обновление чертежа openGL происходит в одно и то же время, так как даже небольшая проблема синхронизации может вызвать визуальные артефакты.

Ответ 1

Не уверен, что это сработает, но вместо MPMoviePlayerController вы можете использовать AVPlayer и использовать AVSynchronizedLayer, чтобы синхронизировать синхронизацию слоя OpenGL с AVPlayerLayer.

Вы можете создать видеоплеер следующим образом:

NSURL *videoURL = [NSURL fileURLWithPath:@"your_url"];
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:videoURL options:nil];
AVPlayerItem *playerItem = [AVPlayerItem playerItemWithAsset:asset];

UIView *playerView = [[UIView alloc] initWithFrame:frame];
AVPlayer *player = [AVPlayer playerWithPlayerItem:playerItem];
AVPlayerLayer *playerLayer = [AVPlayerLayer playerLayerWithPlayer:player];
[playerLayer setFrame:[[playerView layer] bounds]];

Затем создайте слой AVSynchronizedLayer и синхронизируйте его с playerLayer:

AVSynchronizedLayer *syncLayer = [AVSynchronizedLayer synchronizedLayerWithPlayerItem:playerItem];
[syncLayer addSublayer:yourGlView.layer];

[playerView.layer addSublayer:playerLayer];
[playerView.layer addSublayer:syncLayer];

[self.view addSubview:playerView];
...