Как убить прогресс AVQueuePlayer в фоновом режиме, когда ARViewContainer исчезает в swiftUI, и как вызвать функцию stopPlayer, пожалуйста?

как убить прогресс avplayer при увольнении UIView? Я делаю ARView, видеоплеер не убивается при возврате страницы, что мне делать, пожалуйста?

как убить прогресс avplayer при увольнении UIView? Я делаю ARView, видеоплеер не убивается при возврате страницы, что мне делать, пожалуйста?

      struct ARViewContainer: UIViewRepresentable {
    let arView = ARView(frame: .zero)

    func makeCoordinator() -> Coordinator {
        Coordinator(parenenter code heret: self)
    }
    
    func clear() {
        arView.session.pause()
        arView.removeFromSuperview()
    }
    
    class Coordinator: NSObject, ARSessionDelegate{
        var parent: ARViewContainer
        var playerLooper: AVPlayerLooper! // should be defined in class
        var queuePlayer: AVQueuePlayer!
        
        init(parent: ARViewContainer) {
            self.parent = parent
        }
        
        func session(_ session: ARSession, didAdd anchors: [ARAnchor]) {
            guard let imageAnchor = anchors[0] as? ARImageAnchor else {
                print("Problems loading anchor.")
                return
            }
            
            guard let path = Bundle.main.path(forResource: "video", ofType: "mp4") else {
            
            let videoURL = URL(fileURLWithPath: "http://cdn-wallpaper.x.com")
            let playerItem = AVPlayerItem(url: videoURL)
            
            queuePlayer = AVQueuePlayer(playerItem: playerItem)
            playerLooper = AVPlayerLooper(player: queuePlayer, templateItem: playerItem)
            
            let videoMaterial = VideoMaterial(avPlayer: queuePlayer)

            let videoPlane = ModelEntity(mesh: .generatePlane(width: 18, depth: 10, cornerRadius: 0), materials: [videoMaterial])
            
                let anchor = AnchorEntity(anchor: imageAnchor)
                anchor.addChild(videoPlane)
                parent.arView.scene.addAnchor(anchor)
        }
        
        func session(_ session: ARSession, didUpdate anchors: [ARAnchor]) {
            guard let imageAnchor = anchors[0] as? ARImageAnchor else {
                print("Problems loading anchor.")
                return
            }
            
            if imageAnchor.isTracked {
                queuePlayer.play()
            } else {
                queuePlayer.pause()
            }
        }
        
        func session(_ session: ARSession, didRemove anchors: [ARAnchor]) {
            print("stopPlayer")
            stopPlayer()
        }
        // stop av player, how to call in ARContainer? 
        func stopPlayer() {
            queuePlayer.pause()
            queuePlayer.removeAllItems()
        }
    }

    func makeUIView(context: Context) -> ARView {
        arView.session.delegate = context.coordinator
        return arView
    }
    
    func updateUIView(_ uiView: ARView, context: Context) {}
}

как убить прогресс avplayer при увольнении UIView? Я делаю ARView, видеоплеер не убивается при возврате страницы, что мне делать, пожалуйста?

0 ответов

Другие вопросы по тегам