Я немного поигрался с ARKit и хотел разместить видео внутри SCNPlane. Моя проблема в том, что я не вижу контент игроков вообще. Имеются элементы управления с правильной продолжительностью и т. Д., Поэтому игрок, кажется, настроен правильно. Тем не менее, он не появляется.
Все SO-ответы, которые я обнаружил, были решены путем предоставления playerLayer правильного размера, но это, безусловно, не моя проблема, потому что, если я задаю playerLayer цвет фона, он отображается (и перед всем остальным, как и должно быть)
let videoPlayerController = AVVideoPlayerController()
private func handleFoundMagazine(_ imageAnchor: ARImageAnchor, _ node: SCNNode) {
let size = imageAnchor.referenceImage.physicalSize
if let videoNode = createVideoNode(size: size) {
videoNode.name = "Magazine Video"
node.addChildNode(videoNode)
node.opacity = 1
}
}
private func createVideoNode(size: CGSize) -> SCNNode? {
guard let videoPath = Bundle.main.url(forResource: "Video_1_Alle", withExtension: "mp4") else { print("not found in ressource"); return nil }
let videoItem = AVPlayerItem(url: videoPath)
let videoPlayer = AVPlayer(playerItem: videoItem)
videoPlayerController.player = videoPlayer
let avMaterial = SCNMaterial()
avMaterial.diffuse.contents = videoPlayerController.view
let videoPlane = SCNPlane(width: size.width, height: size.height)
videoPlane.materials = [avMaterial]
let videoNode = SCNNode(geometry: videoPlane)
videoNode.eulerAngles.x = -.pi / 2
print("successfully created Video Node")
return videoNode
}
import UIKit
import AVKit
class AVVideoPlayerController: AVPlayerViewController {
var playerLayer = AVPlayerLayer()
var isPlaying = false
override func viewDidLoad() {
super.viewDidLoad()
self.view.backgroundColor = .red
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
setupPlayerLayer()
player?.play()
}
fileprivate func setupPlayerLayer() {
self.playerLayer = AVPlayerLayer(player: self.player)
self.view.layer.addSublayer(playerLayer)
playerLayer.frame = self.view.frame
//playerLayer.backgroundColor = .blue
}
}
Не выглядит слишком сложным, верно?
Кстати: как только он немного запаздывал, а потом я смог посмотреть видео, позади красного фона представления viewcontrollers.
Изображение: