首页 > 解决方案 > 删除 SKVideoNode 不会停止来自视频节点的音频

问题描述

我在我的 GameScene 中添加了一个 SKVideoNode。当我尝试删除视频时,视频图像消失,但音频继续播放。我试图在删除之前停止并暂停视频,但无论如何音频都会继续播放。

var introVideoIsPlaying = false
var introVideo: SKVideoNode!

func playIntroVideo() {

    introVideoIsPlaying = true

    if let videoURL = Bundle.main.url(forResource: "video", withExtension: "mp4") {

        introVideo = SKVideoNode(url: videoURL)
        introVideo.position = CGPoint(x: frame.midX, y: frame.midY)
        introVideo.size = self.frame.size

        self.addChild(introVideo)
        introVideo.play()

    }
}

然后我删除了 touchesBegan 中的视频 -

if introVideoIsPlaying == true {

        introVideo.removeFromParent()
    }

我会错过什么?有没有办法独立停止 SKVideoNode 中的音频?

标签: swiftaudiopauseskvideonode

解决方案


最好将 AVPlayer 与 SKVideoNose 结合使用,如下所示:

(您将有更多选项来控制视频)

var player: AVPlayer?
player = AVPlayer(url: videoURL)
let videoNode = SKVideoNode(avPlayer: player!)

然后,您可以使用在节点更改时触发的函数 didUpdate。您可以在节点看不见时暂停视频,如下所示

func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
    if node.isHidden == true {
        print("Node is out of view")
        self.player?.pause()

    }

}

推荐阅读