如何使此渲染器功能连续?

问题描述 投票:0回答:2

您好,我正在使用AR摄像机,一旦摄像机识别出锚定图像,它就会播放视频。视频播放完毕并返回到摄像机后,我将再次查看同一锚定图像,但视频无法播放。我希望能够尽可能多地查看图像和播放视频。

这是我播放视频的功能。

    func playVideo() {
    guard let videoLink = URL(string: "string") else {
        return
    }
    DispatchQueue.main.async {
        let player = AVPlayer(url: videoLink)
        let controller = AVPlayerViewController()
        controller.player = player
            self.present(controller, animated: true){
               player.play()
           }
        }
}

这是我识别图像的功能。

    func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
    if let imageAnchor = anchor as? ARImageAnchor{
        switch imageAnchor.name{
        case "image":
            playVideo()
        default:
            break
        }
    }
    return nil
}

有人可以帮助我或指出正确的方向来解决这个问题吗?

ios swift avfoundation avkit
2个回答
0
投票

当AVPlayer完成演示后,它会发送系统通知,因此您可以将VC添加为观察者,并且当通知将在该功能中发送时,您可以再次调用视频的播放。这是将VC添加为通知的观察者的代码

NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: .AVPlayerItemDidPlayToEndTime, object: nil)

0
投票

首先您需要创建一个“ SKVideoNode”对象。

videoNode = SKVideoNode(avPlayer: videoPlayer)

然后您可以使用以下代码重播视频。

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

        guard let imageAnchor = (anchor as? ARImageAnchor) else {
            return
        }

        if imageAnchor.isTracked {
            videoNode.play()
        }
    }

希望对您有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.