2015-09-04 13 views
6

द्वारा एक साधारण वीआर वीडियो प्लेयर कैसे बनाएं, मैं इन क्षेत्रों में एक नया व्यक्ति हूं। मैं अब कार्डबोर्ड के लिए वीडियो चलाने के लिए जिथब में program बदलने की कोशिश कर रहा हूं।Google CardBoard एंड्रॉइड एसडीके और राजवाली

मैं StreamingTexture का उपयोग करके MyRenderer संशोधित।

public class MyRenderer extends RajawaliCardboardRenderer { 

public MyRenderer(Context context) { 
    super(context); 
} 

private MediaPlayer mMediaPlayer; 
private StreamingTexture streamingTexture; 

@Override 
protected void initScene() { 
    mMediaPlayer = MediaPlayer.create(this.getContext(), R.raw.test); 

    streamingTexture = new StreamingTexture("video", mMediaPlayer); 
    Sphere sphere = createPhotoSphereWithTexture(streamingTexture); 

    getCurrentScene().addChild(sphere); 

    getCurrentCamera().setPosition(Vector3.ZERO); 
    getCurrentCamera().setFieldOfView(75); 
} 

private static Sphere createPhotoSphereWithTexture(ATexture texture) { 

    Material material = new Material(); 
    material.setColor(0); 

    try { 
     material.addTexture(texture); 
    } catch (ATexture.TextureException e) { 
     throw new RuntimeException(e); 
    } 

    Sphere sphere = new Sphere(50, 64, 32); 
    sphere.setScaleX(-1); 
    sphere.setMaterial(material); 

    return sphere; 
} 
} 

मैं कच्चे फ़ोल्डर में test.mp4 के रूप में मेरी छोटी वीडियो बचाया, फिर भी, के बाद मैं अपने ऐप दोनों पक्षों ने खाली कर रहे हैं शुरू करते हैं, और वीडियो की ध्वनि वास्तव में खेल रहा है।

मुझे कुछ मदद चाहिए। आपका बहुत बहुत धन्यवाद!

+0

आप मेरा उत्तर http कोशिश कर सकते हैं: // stackoverflow.com/questions/32391282/how-to-use-rajawalivr-or-rajawali-to-play-a-360- वीडियो –

उत्तर

5

मैं एक carboard इस तरह काम करने में सिर पर नज़र रखने के साथ 360 वीडियो मिला है।

अपनी कक्षा निम्नलिखित initScene() RajawaliVRRenderer

अगले उपयोग का उपयोग कर बढ़ाएँ:

@Override 
public void initScene() { 

    // setup sphere 
    Sphere sphere = new Sphere(1, 100, 100); 
    sphere.setPosition(0, 0, 0); 
    // invert the sphere normals 
    // factor "1" is two small and result in rendering glitches 
    sphere.setScaleX(100); 
    sphere.setScaleY(100); 
    sphere.setScaleZ(-100); 

    //initiate MediaPlayer 
    mediaPlayer = new MediaPlayer(); 
    mediaPlayer.setLooping(true); 
    try { 
     Uri videoUrl = Uri.parse("android.resource://" + getContext().getPackageName() + "/" 
       + R.raw.test); 
     mediaPlayer.setDataSource(getContext(),Uri.parse(videoUrl)); 
     mediaPlayer.prepareAsync(); //prepare the player (asynchronous) 
     mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
      @Override 
      public void onPrepared(MediaPlayer mp) { 
       mp.start(); //start the player only when it is prepared 
      } 
     }); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 

    // create texture from media player video 
    videoTexture = new StreamingTexture("video", mediaPlayer); 

    // set material with video texture 
    Material material = new Material(); 
    material.setColorInfluence(0f); 
    try { 
     material.addTexture(videoTexture); 
    } catch (ATexture.TextureException e){ 
     throw new RuntimeException(e); 
    } 
    sphere.setMaterial(material); 

    // add sphere to scene 
    getCurrentScene().addChild(sphere); 

    super.initScene(); 
} 

दृश्य की शुरुआत के बाद आप videoTexture अपडेट करने के लिए प्रस्तुत करना पर चाहते हैं, इसलिए जोड़ें:

@Override 
public void onRender(long elapsedRealTime, double deltaTime) { 
    super.onRender(elapsedRealTime, deltaTime); 

    if (videoTexture != null) { 
     // update texture from video content 
     videoTexture.update(); 
    } 
} 

और अंत में कम से कम आप आया अपडेट करना चाहते हैं इस तरह गत्ता के लिए आंदोलन पर नज़र रखने के लिए रा:

@Override 
public void onDrawEye(Eye eye) { 
    // Rajawali camera 
    org.rajawali3d.cameras.Camera currentCamera = getCurrentCamera(); 

    // cardboard field of view 
    FieldOfView fov = eye.getFov(); 

    // update Rajawali camera from cardboard sdk 
    currentCamera.updatePerspective(fov.getLeft(), fov.getRight(), fov.getBottom(), fov.getTop()); 
    eyeMatrix.setAll(eye.getEyeView()); 
    // orientation 
    eyeOrientation.fromMatrix(eyeMatrix); 
    currentCamera.setOrientation(eyeOrientation); 
    // position 
    eyePosition = eyeMatrix.getTranslation().inverse(); 
    currentCamera.setPosition(eyePosition); 

    // render with Rajawali 
    super.onRenderFrame(null); 
} 

इसके अलावा, carboard के लिए आगे कुछ अन्य श्रोताओं पारित करने के लिए एसडीके आप इन कार्यों की आवश्यकता होगी:

@Override 
public void onSurfaceChanged(int width, int height) { 
    // tell Rajawali that cardboard sdk detected a size change 
    super.onRenderSurfaceSizeChanged(null, width, height); 
} 

@Override 
public void onSurfaceCreated(EGLConfig eglConfig) { 
    // pass opengl config to Rajawali 
    super.onRenderSurfaceCreated(eglConfig, null, -1, -1); 
} 

@Override 
public void onRenderSurfaceDestroyed(SurfaceTexture surface) { 
    super.onRenderSurfaceDestroyed(surface); 
} 
+0

बहुत बहुत धन्यवाद! आपने इतना विस्तृत समाधान दिखाया है। मैंने इसे [लिंक] (http://stackoverflow.com/questions/32391282/how-to-use-rajawalivr-or-rajawali-to-play-a-360-video) से पहले कार्यान्वित किया है। आपका जवाब भी मेरे लिए बहुत उपयोगी होना चाहिए। – Dobbie

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