2015-09-04 22 views
6

Bu alanda yeni bir erkeğim. Şimdi karton için video oynatmak için github içinde bir program değiştirmeye çalışıyorum.Google CardBoard Android SDK ve Rajawali tarafından basit bir VR video oynatıcısı nasıl yapılır

StreamingTexture kullanarak MyRenderer'ı değiştirdim. Ben iki taraf boş Uygulamamı başlattıktan sonra

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; 
} 
} 

Ben, ancak, ham klasörde test.mp4 olarak benim kısa bir video kaydedilir ve videonun sesinin aslında oynuyor.

Yardımıma ihtiyacım var. Çok teşekkür ederim!

+0

:

@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); } 
Ayrıca

, kartonlar ileri diğer bazı dinleyicileri geçmek Eğer bu işlevleri gerekecektir sdk // stackoverflow.com/questions/32391282/how-to-use-rajawalivr-or-rajawali-to-play-a-360-video –

cevap

5

Bu şekilde çalışan bir kartonda kafa izli 360 video var.

aşağıdaki InitScene() RajawaliVRRenderer

sonraki kullanımını kullanarak sınıf uzatın: Her kılmak üzerine size videoTexture güncelleştirmek istediğiniz sahneyi önermesinin ardından

@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(); 
} 

, böylece ekleyin:

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

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

Ve en son fakat en az değil, güncellemek istediğiniz Böyle karton için hareket takibi için ra: Eğer cevabım http deneyebilirsiniz

@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

Çok teşekkür ederim such Böylesine ayrıntılı bir çözüm gösterdiniz. Bunu daha önce [link] (http://stackoverflow.com/questions/32391282/how-to-use-rajawalivr-or-rajawali-to-play-a-360-video) ile uyguladım. Cevabınız bana da çok yardımcı olmalı. – Dobbie

İlgili konular