AR приложение для воспроизведения разных видео в зависимости от ARImageAnchor - PullRequest
1 голос
/ 09 июля 2019

Я создаю AR-приложение для iOS для обнаружения изображений в кубе (-> 6 различных изображений, которые необходимо распознать).Когда обнаруживается одно изображение, должно воспроизводиться видео - другое видео для каждого отдельного изображения (для изображения 1 должно воспроизводиться видео 1 ...).

Моя проблема в том, что я понятия не имею, как отследить, какое изображение отслеживается в данный момент, и на основании этого, какое видео воспроизводить

. В настоящее время приложение отслеживает различные изображения, но всегда воспроизводитто же видео (видео "1" .mp4)

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)
    let configuration = ARImageTrackingConfiguration()

    if let trackedImages = ARReferenceImage.referenceImages(inGroupNamed: "ARImages", bundle: Bundle.main) {
        configuration.trackingImages = trackedImages
        configuration.maximumNumberOfTrackedImages = 6
    }
    sceneView.session.run(configuration)
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    sceneView.session.pause()
}

func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {

    guard let imageAnchor = anchor as? ARImageAnchor, 
          let fileUrlString = Bundle.main.path(forResource: "1", ofType: "mp4") else {
        return
    }
    let videoItem = AVPlayerItem(url: URL(fileURLWithPath: fileUrlString))
    let player = AVPlayer(playerItem: videoItem)
    let videoNode = SKVideoNode(avPlayer: player)

    player.play()
    ...
}

Как я могу определить текущий ImageAnchor и связать соответствующее видео?

1 Ответ

1 голос
/ 09 июля 2019

вы можете присвоить ARReferenceImage имя, чтобы одним из способов было присвоить изображению и соответствующему видеофайлу одно и то же имя.

guard let imageAnchor = anchor as? ARImageAnchor,
             let name = imageAnchor.referenceImage.name,
             let fileUrlString = Bundle.main.path(forResource: name, ofType: "mp4") else {
    return
}

let videoItem = AVPlayerItem(url: URL(fileURLWithPath: fileUrlString))
let player = AVPlayer(playerItem: videoItem)
let videoNode = SKVideoNode(avPlayer: player)

player.play()
...