是否可以同时运行2个独立的ARSession?

时间:2019-08-20 14:13:50

标签: swift arkit arscnview

由于ARKit3,可以同时运行支持后置和前置摄像头的ARSession()。

例如,这将为支持世界追踪的前置摄像头创建一个ARConfiguration。

    // session for the front camera
    let configuration = ARFaceTrackingConfiguration()
    configuration.isWorldTrackingEnabled
    sceneView.session.run(configuration)

此示例为启用了面部跟踪的后置摄像头会话创建配置:

    // session for the back camera
    let configuration = ARWorldTrackingConfiguration()
    configuration.userFaceTrackingEnabled = true
    sceneView.session.run(configuration)

我想创建2个独立的ARConfigurations和ARSessions同时运行。像这样:

enter image description here

到目前为止,我尝试了以下代码:

import UIKit
import SceneKit
import ARKit

class ViewController: UIViewController, ARSCNViewDelegate {

// back camera view
@IBOutlet var backView: ARSCNView!

// front camera view
@IBOutlet weak var frontView: ARSCNView!

override func viewDidLoad() {
    super.viewDidLoad()

    // Set the view's delegate
    sceneView.delegate = self
    frontView.delegate = self

    // Create a new scene for back camera
    let scene = SCNScene(named: "art.scnassets/ship.scn")!
    backView.scene = scene
}

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    // session for the back camera
    let configuration = ARWorldTrackingConfiguration()
    configuration.userFaceTrackingEnabled = true
    backView.session.run(configuration)

    // session for the front camera
    guard ARFaceTrackingConfiguration.isSupported else { return }
    let configurationFront = ARFaceTrackingConfiguration()
    configurationFront.isLightEstimationEnabled = true
    frontView.session.run(configurationFront, options: [])
}

override func viewWillDisappear(_ animated: Bool) {
    super.viewWillDisappear(animated)
    // Pause the view's session
    sceneView.session.pause()
}

func session(_ session: ARSession, didFailWithError error: Error) {
    // Present an error message to the user
}

func sessionWasInterrupted(_ session: ARSession) {
    // Inform the user that the session has been interrupted, for example, by presenting an overlay
}

func sessionInterruptionEnded(_ session: ARSession) {
    // Reset tracking and/or remove existing anchors if consistent tracking is required
}
}

当前置摄像头正常工作时,后置摄像头停止视频输入。有机会解决吗?

在另一台摄像机上运行一个ARSession和一个低级视频捕获会话也是一种解决方案,但我遇到了同样的问题。

0 个答案:

没有答案