您好,我正在使用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
}
有人可以帮助我或指出正确的方向来解决这个问题吗?
当AVPlayer完成演示后,它会发送系统通知,因此您可以将VC添加为观察者,并且当通知将在该功能中发送时,您可以再次调用视频的播放。这是将VC添加为通知的观察者的代码
NotificationCenter.default.addObserver(self, selector: #selector(playerDidFinishPlaying), name: .AVPlayerItemDidPlayToEndTime, object: nil)
首先您需要创建一个“ 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()
}
}
希望对您有帮助。