在SceneKit中使用MPMoviePlayerController作为纹理

我在scenekit中创build了一个多维数据集,并试图使用一个MPMoviePlayerController的实例作为它的材质。 这种方法虽然不错,但是效果不是很好:video看起来非常跳跃,就像在video帧之间跳转一样(基本上是从头到尾重放帧)。 声音是好的。

我做了一个简短的截图发生了什么,我想这是显而易见的video: Youtube的video

这是处理映射到多维数据集和创build播放器的代码:

var moviePlayer: MPMoviePlayerController? func startPlayingVideo(){ let mainBundle = NSBundle.mainBundle() let url = mainBundle.URLForResource("Sample", withExtension: "m4v") moviePlayer = MPMoviePlayerController(contentURL: url) if let player = moviePlayer{ /* Listen for the notification that the movie player sends us whenever it finishes playing */ NSNotificationCenter.defaultCenter().addObserver(self, selector: "videoHasFinishedPlaying:", name: MPMoviePlayerPlaybackDidFinishNotification, object: nil) println("Successfully instantiated the movie player") player.scalingMode = .AspectFit var materials = [SCNMaterial]() for i in 1...6 { let material = SCNMaterial() material.diffuse.contents = player.view.layer player.view.frame = CGRectMake(0, 0, 200, 200) materials.append(material) } boxGeometry.materials = materials player.controlStyle = MPMovieControlStyle.None player.play() } else { println("Failed to instantiate the movie player") } } 

任何想法如何解决这个框架跳跃,为什么会发生? 非常感谢

我打开了一个关于AVPlayerLayer不能作为SceneKit纹理工作的雷达 (在设备上…在模拟器上工作!)。 苹果很友善地回答说,这是按预期工作,并提供了一个替代scheme:

AVPlayerLayer在设备上渲染出来,不能用作纹理。 相反,请使用SKVideoNode。