2015-03-25 10 views
12

विभिन्न वेब साइटों के माध्यम से देख रहे हैं और विभिन्न संसाधनों का विश्लेषण मुझे पता चला है कि iPhone पर 360 वीडियो खेलने के लिए 3 डी पार्टी lib (Panorama) का उपयोग करना चाहिए पर 360 वीडियो खेलने के लिए। लेकिन मुझे वास्तव में दिलचस्पी है कि इसे अपने आप कैसे करना संभव है। चूंकि मानक आईओएस तत्व ऐसी कार्यक्षमता का समर्थन नहीं करते हैं।कैसे IOS डिवाइस

कृपया उन दृष्टिकोणों के बारे में कुछ सलाह दें जिन्हें मैं 360 वीडियो के लिए अपना प्लेयर बनाने के लिए उपयोग करना चाहिए।

+1

मैं सिर्फ दिशा पूछता हूं कि मुझे –

+0

की जांच करनी चाहिए मेरी पहली टिप्पणी को रद्द करें। मैंने आपकी पोस्ट को गलत तरीके से पढ़ाया। आप इसे स्वयं करना चाहते हैं। –

+0

हाय ओलेग, क्या आपको कोई अच्छा समाधान मिल रहा है? कोई मुफ्त एसडीके? या क्या आपने इसे स्वयं किया (कड़ी मेहनत)? – jlmg5564

उत्तर

8

आप बाहरी पुस्तकालयों या निर्भरताओं के बिना, दृश्यता का उपयोग करके इसे कर सकते हैं।

एससीएनएससीन बनाएं और डिवाइस कैमरे पर अपना कैमरा मैप करें। कैमरे को एक प्रति आंखों को मैप करने और 3 डी स्टीरियोस्कोपिक प्रभाव बनाने के लिए थोड़ा परेशान किया जाता है।

override func viewDidLoad() { 
    super.viewDidLoad() 
    leftSceneView?.backgroundColor = UIColor.blackColor() 
    rightSceneView?.backgroundColor = UIColor.whiteColor() 

    // Create Scene 
    scene = SCNScene() 
    leftSceneView?.scene = scene 
    rightSceneView?.scene = scene 

    // Create cameras 
    let camX = 0.0 as Float 
    let camY = 0.0 as Float 
    let camZ = 0.0 as Float 
    let zFar = 50.0 

    let leftCamera = SCNCamera() 
    let rightCamera = SCNCamera() 

    leftCamera.zFar = zFar 
    rightCamera.zFar = zFar 

    let leftCameraNode = SCNNode() 
    leftCameraNode.camera = leftCamera 
    leftCameraNode.position = SCNVector3(x: camX - 0.5, y: camY, z: camZ) 

    let rightCameraNode = SCNNode() 
    rightCameraNode.camera = rightCamera 
    rightCameraNode.position = SCNVector3(x: camX + 0.5, y: camY, z: camZ) 

    camerasNode = SCNNode() 
    camerasNode!.position = SCNVector3(x: camX, y:camY, z:camZ) 
    camerasNode!.addChildNode(leftCameraNode) 
    camerasNode!.addChildNode(rightCameraNode) 

    camerasNode!.eulerAngles = SCNVector3Make(degreesToRadians(-90.0), 0, 0) 

    cameraRollNode = SCNNode() 
    cameraRollNode!.addChildNode(camerasNode!) 

    cameraPitchNode = SCNNode() 
    cameraPitchNode!.addChildNode(cameraRollNode!) 

    cameraYawNode = SCNNode() 
    cameraYawNode!.addChildNode(cameraPitchNode!) 

    scene!.rootNode.addChildNode(cameraYawNode!) 

    leftSceneView?.pointOfView = leftCameraNode 
    rightSceneView?.pointOfView = rightCameraNode 

    // Respond to user head movement. Refreshes the position of the camera 60 times per second. 
    motionManager = CMMotionManager() 
    motionManager?.deviceMotionUpdateInterval = 1.0/60.0 
    motionManager?.startDeviceMotionUpdatesUsingReferenceFrame(CMAttitudeReferenceFrame.XArbitraryZVertical) 

    leftSceneView?.delegate = self 

    leftSceneView?.playing = true 
    rightSceneView?.playing = true   
} 

अद्यतन sceneRenderer में कैमरे की स्थिति:

func renderer(aRenderer: SCNSceneRenderer, updateAtTime time: NSTimeInterval){ 

    // Render the scene 
    dispatch_async(dispatch_get_main_queue()) {() -> Void in 
     if let mm = self.motionManager, let motion = mm.deviceMotion { 
      let currentAttitude = motion.attitude 

      var orientationMultiplier = 1.0 
      if(UIApplication.sharedApplication().statusBarOrientation == UIInterfaceOrientation.LandscapeRight){ orientationMultiplier = -1.0} 

      self.cameraRollNode!.eulerAngles.x = Float(currentAttitude.roll * orientationMultiplier) 
      self.cameraPitchNode!.eulerAngles.z = Float(currentAttitude.pitch) 
      self.cameraYawNode!.eulerAngles.y = Float(currentAttitude.yaw) 

     } 
    } 
} 

यहाँ एक SCNSphere एक AVPlayer प्रदर्शित जोड़ने के लिए कुछ कोड है।

func play(){ 

    //let fileURL: NSURL? = NSURL(string: "http://www.kolor.com/360-videos-files/noa-neal-graffiti-360-music-video-full-hd.mp4") 
    let fileURL: NSURL? = NSURL.fileURLWithPath(NSBundle.mainBundle().pathForResource("vr", ofType: "mp4")!) 

    if (fileURL != nil){ 
     videoSpriteKitNode = SKVideoNode(AVPlayer: AVPlayer(URL: fileURL!)) 
     videoNode = SCNNode() 
     videoNode!.geometry = SCNSphere(radius: 30) 

     let spriteKitScene = SKScene(size: CGSize(width: 2500, height: 2500)) 
     spriteKitScene.scaleMode = .AspectFit 

     videoSpriteKitNode!.position = CGPoint(x: spriteKitScene.size.width/2.0, y: spriteKitScene.size.height/2.0) 
     videoSpriteKitNode!.size = spriteKitScene.size 

     spriteKitScene.addChild(videoSpriteKitNode!) 

     videoNode!.geometry?.firstMaterial?.diffuse.contents = spriteKitScene 
     videoNode!.geometry?.firstMaterial?.doubleSided = true 

     // Flip video upside down, so that it's shown in the right position 
     var transform = SCNMatrix4MakeRotation(Float(M_PI), 0.0, 0.0, 1.0) 
     transform = SCNMatrix4Translate(transform, 1.0, 1.0, 0.0) 

     videoNode!.pivot = SCNMatrix4MakeRotation(Float(M_PI_2), 0.0, -1.0, 0.0) 
     videoNode!.geometry?.firstMaterial?.diffuse.contentsTransform = transform 
     videoNode!.position = SCNVector3(x: 0, y: 0, z: 0) 

     scene!.rootNode.addChildNode(videoNode!) 
     videoSpriteKitNode!.play() 

     playingVideo = true 
    } 
} 

मैंने जिथब पर एक परियोजना को एक साथ रखा है ताकि यह दिखाया जा सके कि निर्देशों के साथ स्पष्ट होना चाहिए!

वीआर में भी एक Google कार्डबोर्ड के साथ काम करता है। Aralekk's रेपो से

https://github.com/Aralekk/simple360player_iOS

+0

हालांकि यह लिंक प्रश्न का उत्तर दे सकता है, लेकिन यहां उत्तर के आवश्यक हिस्सों को शामिल करना बेहतर है और संदर्भ के लिए लिंक प्रदान करना बेहतर है। लिंक किए गए पृष्ठ में परिवर्तन होने पर लिंक-केवल उत्तर अमान्य हो सकते हैं। - [समीक्षा से] (/ समीक्षा/कम गुणवत्ता वाली पोस्ट/10771260) – skypjack

+0

हो गया! सीखना स्टैक ओवरफ्लो अभी भी – Arthuraw

3

अलावा, मैं hanton's रेपो उपयोगी जब मेरे खुद के वीडियो 360 ° खिलाड़ी बनाने पाया है। Here मेरे रेपो का लिंक है और here संबंधित ब्लॉगपोस्ट है।

0

मैंने आईओएस के लिए सीनकेट का उपयोग करके एक समान समाधान लागू किया: ThreeSixtyPlayer

मेरी राय में यह कोड थोड़ा सरल और अन्य समाधानों की तुलना में अधिक स्केलेबल है। हालांकि यह मूल बातें है (कोई स्टीरियोस्कोपिक प्लेबैक, केवल गोलाकार ज्यामिति का समर्थन नहीं करता है, अभी तक कार्डबोर्ड का समर्थन नहीं करता है)।

संबंधित मुद्दे