11
我試圖同步到iPad上用openGL繪製的動畫視頻,並有兩件事情我不知道該怎麼做:同步視頻OpenGL的動畫
- 查找當前正在播放的視頻幀。
- 確保更新的視頻和更新的OpenGL繪圖發生在同一時間,即使輕微的同步問題可能會導致視覺工件。
我試圖同步到iPad上用openGL繪製的動畫視頻,並有兩件事情我不知道該怎麼做:同步視頻OpenGL的動畫
不知道它會工作,但不是使用MPMoviePlayerController
你可以使用一個AVPlayer使用和AVSynchronizedLayer與AVPlayerLayer
的一個你的OpenGL層定時同步。
你可以創建視頻播放器這樣的:
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];
...
通過什麼方式,你播放視頻?使用內置的封閉視頻播放器視圖或控制器,還是通過AVFoundation逐幀拖出幀,然後將它們從某處推出? – Tommy
我正在通過MPMoviePlayerController播放視頻。然後,我可以使用與幀速率相乘的CurrentPlaybackTime來獲取幀數,但問題在於視頻以不同於我的opengl渲染器的幀率播放。有沒有辦法將兩者同步,這樣我就可以在渲染下一個視頻幀之前始終確保我的opengl圖層在視頻中的每幀之上呈現? – sinsro
您是否找到解決方案?我有同樣的問題。 –