AVPlayerViewController в узле - PullRequest
       18

AVPlayerViewController в узле

0 голосов
/ 16 ноября 2018

Я немного поигрался с 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.


Изображение: No layer background

...