【发布时间】:2019-07-17 14:00:38
【问题描述】:
我正在创建一个 AR 应用来检测立方体上的图像(立方体上打印了 6 张图像)。根据检测到的图像,正在播放相关视频。不幸的是,即使识别出另一张图片,AVplayer 也不会停止播放视频 --> 可能会同时播放多个视频(对视频来说不是超级糟糕,但尤其是重叠的音频太可怕了)。
我的假设是,以下函数实际上会停止当前播放的视频,但没有任何反应 --> 即使相机不再捕获立方体,音频也会继续。
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()
//sceneView?.removeFromSuperview()
}
func renderer(_ renderer: SCNSceneRenderer, didAdd node: SCNNode, for anchor: ARAnchor) {
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()
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: player.currentItem, queue: nil) { (notification) in
player.seek(to: CMTime.zero)
player.play()
}
let videoScene = SKScene(size: CGSize(width: 960, height: 720))
videoNode.position = CGPoint(x: videoScene.size.width / 2, y: videoScene.size.height / 2)
videoNode.yScale = -1.0
videoScene.addChild(videoNode)
let plane = SCNPlane(width: imageAnchor.referenceImage.physicalSize.width, height: imageAnchor.referenceImage.physicalSize.height)
plane.firstMaterial?.diffuse.contents = videoScene
let planeNode = SCNNode(geometry: plane)
planeNode.eulerAngles.x = -Float.pi / 2
node.addChildNode(planeNode)
}
有没有人知道如何调用“player.pause()”或“player.stop()”函数在不再检测到捕获的图像时停止播放视频?
感谢您的支持!
【问题讨论】:
-
你需要替换AVPlayer中的视频,我就是这么做的。可以看看添加视频的代码吗?
-
嗨,Alok,我将代码添加到原始帖子中。