tibewww
tibewww

Reputation: 603

Google VR Player SDK ( GVRSDK) To start in carboard mode by default?

I'd like to be able to start the video on my app in cardboard mode enabled.

I have install successfully the Gooogle VR player SDK, I created a button to start the video in full screen mode enabled, with success as well !!

I'd like another button, starting this time the video in Cardboard mode, but I can't make it work !!

Below is the code of my controller having the button:

 //
 //  FeedDetails.swift
 //  MobileAppDemo
 //
//  Created by Mikko Hilpinen on 31.10.2016.
//  Copyright © 2016 Mikkomario. All rights reserved.
//

 import UIKit
 import FirebaseAuth
 import FirebaseDatabase
 import FirebaseStorage
 import SwiftKeychainWrapper
 import SwiftyJSON

 class FeedDetailsController: UIViewController, UIImagePickerControllerDelegate, UINavigationControllerDelegate {

@IBOutlet weak var textView: UITextView!
@IBOutlet weak var titleLabel: UITextView!
@IBOutlet weak var imageView: UIImageView!
@IBOutlet var videoVRView: GVRVideoView!

@IBOutlet var imageVRView: GVRPanoramaView!

@IBOutlet var cardboardVRview: GVRCardboardView!
@IBOutlet var imageLabel: UILabel!
@IBOutlet var videoLabel: UILabel!

enum Media {

    static var photoArray = ["test.jpg"]
    static let videoURL = "https:/myserver.com/videolight.mp4"
}


var currentView: UIView?
var currentDisplayMode = GVRWidgetDisplayMode.embedded
var isPaused = true


     override func viewDidLoad() {
      super.viewDidLoad()


    imageLabel.isHidden = true
    imageVRView.isHidden = true
    videoLabel.isHidden = true
    videoVRView.isHidden = true
    cardboardVRview.isHidden = true

    imageVRView.load(UIImage(named: Media.photoArray.first!),
                     of: GVRPanoramaImageType.mono)
    imageVRView.enableCardboardButton = true
    imageVRView.enableFullscreenButton = true
    //        imageVRView.delegate = self

    videoVRView.load(from: URL(string: Media.videoURL))
    videoVRView.enableCardboardButton = true
    videoVRView.enableFullscreenButton = true


    //        videoVRView.delegate = self

    cardboardVRview.load(from: URL(string: Media.videoURL))
    cardboardVRview.enableCardboardButton = true
    cardboardVRview.enableFullscreenButton = true
    // change to your specification

    textView.isEditable = false
    textView.isSelectable = false
    titleLabel.isEditable = false
    titleLabel.isSelectable = false

    textView.text = posts[selectedIndexPath].caption
    titleLabel.text = posts[selectedIndexPath].title

    Storage.getImage(with: posts[selectedIndexPath].imageUrl){
        postPic in
        self.imageView.image = postPic

    }

}

// TRIGER VIDEO 360 //

@IBAction func videoButton(_ sender: UIButton) {

if let button = self.videoVRView.subviews[1] as? UIButton {
    button.sendActions(for: .touchUpInside)

}

}
  func widgetView(widgetView: GVRWidgetView!, didLoadContent content: AnyObject!) {
    self.videoVRView.isHidden = false;

 }

// END TRIGGER 360 //

// TRIGER CARDBOARD //

@IBAction func cardboardButton(_ sender: UIButton) {

    if let button = self.cardboardVRview.subviews[1] as? UIButton {
        button.sendActions(for: .touchUpInside)
    }

}
func widgetViewcardboard(widgetView: GVRCardboardView!, didLoadContent content: AnyObject!) {
    self.cardboardVRview.isHidden = false
}

// END CARDBOARD //

@IBAction func closeButton(_ sender: UIButton) {
    self.dismiss(animated: true, completion: nil)
}


func refreshVideoPlayStatus() {
    if currentView == videoVRView && currentDisplayMode != GVRWidgetDisplayMode.embedded {
        videoVRView?.resume()
        isPaused = false
    } else {
        videoVRView?.pause()
        isPaused = true
    }
}

func setCurrentViewFromTouch(touchPoint point:CGPoint) {
    if imageVRView!.frame.contains(point) {
        currentView = imageVRView
    }
    if videoVRView!.frame.contains(point) {
        currentView = videoVRView
    }
    }

    }
  extension FeedDetailsController: GVRWidgetViewDelegate {
func widgetView(_ widgetView: GVRWidgetView!, didLoadContent content: Any!) {
    if content is UIImage {
        imageVRView.isHidden = false
        imageLabel.isHidden = false
    } else if content is NSURL {
        videoVRView.isHidden = false
        videoLabel.isHidden = false
        refreshVideoPlayStatus()
    }
}

func widgetView(_ widgetView: GVRWidgetView!, didFailToLoadContent content: Any!, withErrorMessage errorMessage: String!)  {
    print(errorMessage)
}

func widgetView(_ widgetView: GVRWidgetView!, didChange displayMode: GVRWidgetDisplayMode) {
    currentView = widgetView
    currentDisplayMode = displayMode
    refreshVideoPlayStatus()
    if currentView == imageVRView && currentDisplayMode != GVRWidgetDisplayMode.embedded {
        view.isHidden = true
    } else {
        view.isHidden = false
    }
}

func widgetViewDidTap(_ widgetView: GVRWidgetView!) {
    guard currentDisplayMode != GVRWidgetDisplayMode.embedded else {return}
    if currentView == imageVRView {
        Media.photoArray.append(Media.photoArray.removeFirst())
        imageVRView?.load(UIImage(named: Media.photoArray.first!), of: GVRPanoramaImageType.mono)
    } else {
        if isPaused {
            videoVRView?.resume()
        } else {
            videoVRView?.pause()
        }
        isPaused = !isPaused
    }
}
 }



 extension FeedDetailsController: GVRVideoViewDelegate {
func videoView(_ videoView: GVRVideoView!, didUpdatePosition position: TimeInterval) {
    OperationQueue.main.addOperation() {
        if position >= videoView.duration() {
            videoView.seek(to: 0)
            videoView.resume()
        }
    }
}
}

 class TouchView: UIView {
override func point(inside point: CGPoint, with event: UIEvent?) -> Bool {
    if let FeedDetailsController = viewController() as? FeedDetailsController , event?.type == UIEventType.touches {
        FeedDetailsController.setCurrentViewFromTouch(touchPoint: point)
    }
    return true
}

func viewController() -> UIViewController? {
    if self.next!.isKind(of: FeedDetailsController.self) {
        return self.next as? UIViewController
    } else {
        return nil
    }
}


  }

I did the same process as to start to play a video in full screen mode, but by calling the GVRCardboardView instead of the GVRVideoView as you can see, but it doenst work ... I'm having error on those line:

      cardboardVRview.load(from: URL(string: Media.videoURL))
    cardboardVRview.enableCardboardButton = true
    cardboardVRview.enableFullscreenButton = true

for the first line 'static member 'load' cannot be used in instance of type GVRCardboardView

and value of type 'GVRCardboardView' has no member 'enableFullscreenButton' and 'enableCardboardBUtton' for the two other lines . .

Does anybody know how I can make this work ??

It will fantastic ! Thank you guys !

Upvotes: 1

Views: 369

Answers (1)

kaymuda
kaymuda

Reputation: 31

if you want to start in Cardboard mode by default. You should set the view as such. Meaning you would enter:

videoVRView.displayMode = GVRWidgetDisplayMode.fullscreenVR

Upvotes: 2

Related Questions