2016-03-25 2 views

ответ

0

Вам нужно это:

https://github.com/Rajawali/RajawaliVR

Он хорошо работает с медиа-плеер и локальными файлами, но если вы хотите, чтобы поток видео, медиа-плеер не является надежным вариантом.

вот мой пример:

PlayerActivity

public class PlayerActivity extends RajawaliVRActivity { 
private RajawaliVRExampleRenderer mRenderer; 
private MediaPlayer mediaPlayer; 
SurfaceView surfaceView; 
SurfaceHolder surfaceHolder; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    requestWindowFeature(Window.FEATURE_NO_TITLE); 
    getWindow().setFlags(
      WindowManager.LayoutParams.FLAG_FULLSCREEN 
        | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN 
        | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); 

    super.onCreate(savedInstanceState); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    mRenderer = new RajawaliVRExampleRenderer(PlayerActivity.this); 
    setRenderer(mRenderer); 
    setConvertTapIntoTrigger(true); 

} 

/** 
* Called when the Cardboard trigger is pulled. 
*/ 
@Override 
public void onCardboardTrigger() { 
    RajLog.i("onCardboardTrigger"); 
} 


@Override 
protected void onDestroy() { 
    super.onDestroy(); 
} 
} 

И вам нужен класс визуализации (я уверен, что вы можете изменить MediaPlayer, чтобы удовлетворить ваши потребности)

public class RajawaliVRExampleRenderer extends RajawaliVRRenderer { 
//"https://ia700401.us.archive.org/19/items/ksnn_compilation_master_the_internet/ksnn_compilation_master_the_internet_512kb.mp4" 
Context mContext; 

private MediaPlayer mMediaPlayer; 
private StreamingTexture mVideoTexture; 
AppController appController; 
boolean playing=false; 
public RajawaliVRExampleRenderer(Context context) { 
    super(context); 
    mContext = context; 
} 

@Override 
public void initScene() { 

    appController=(AppController)getContext().getApplicationContext(); 
    //mMediaPlayer = MediaPlayer.create(getContext(),R.raw.video1); 
    mMediaPlayer=new MediaPlayer(); 

    try { 
     mMediaPlayer.setAudioStreamType(AudioManager.USE_DEFAULT_STREAM_TYPE); 
     mMediaPlayer.setDataSource("*URL*"); 

     mMediaPlayer.prepareAsync(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
    mMediaPlayer.setLooping(true); 
    mVideoTexture = new StreamingTexture("sintelTrailer", mMediaPlayer); 
    Material material = new Material(); 
    material.setColorInfluence(0); 
    try { 
     material.addTexture(mVideoTexture); 
    } catch (ATexture.TextureException e) { 
     e.printStackTrace(); 
    } 

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

    getCurrentScene().addChild(sphere); 

    getCurrentCamera().setPosition(Vector3.ZERO); 

    getCurrentCamera().setFieldOfView(75); 

    mMediaPlayer.setOnBufferingUpdateListener(new MediaPlayer.OnBufferingUpdateListener() { 
     @Override 
     public void onBufferingUpdate(MediaPlayer mp, int percent) { 
      Log.v("grebuf", "buffer (%):" + percent); 
      if (percent >= 20) { 
       if (!playing) { 
        //mMediaPlayer.start(); 
        playing = true; 
       } 
      } 
     } 
    }); 
    mMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
      Log.v("grega", "media start"); 
      mp.start(); 
     } 
    }); 
    mMediaPlayer.setOnErrorListener(new MediaPlayer.OnErrorListener() { 
     @Override 
     public boolean onError(MediaPlayer mp, int what, int extra) { 
      Log.d("grebuf",what+" "+extra); 
      return false; 
     } 
    }); 

} 

@Override 
public void onRender(long ellapsedRealtime, double deltaTime) { 
    super.onRender(ellapsedRealtime, deltaTime); 
    mVideoTexture.update(); 
} 

@Override 
public void onPause() { 
    super.onPause(); 
    if (mMediaPlayer != null) 
     mMediaPlayer.pause(); 
} 

@Override 
public void onResume() { 
    super.onResume(); 
    if (mMediaPlayer != null) 
     mMediaPlayer.start(); 
} 

@Override 
public void onRenderSurfaceDestroyed(SurfaceTexture surfaceTexture) { 
    super.onRenderSurfaceDestroyed(surfaceTexture); 
    mMediaPlayer.stop(); 
    mMediaPlayer.release(); 
} 
} 
+0

Спасибо за ваш ответ. Что было бы лучшим вариантом для потоковой передачи контента? Я читал, что медиаплеер может обрабатывать потоки rtsp ... – Michael

+0

Для потокового содержимого вы можете проверить ExoPlayer. Он просто обеспечивает воспроизведение видео, хотя вам нужно будет реализовать часть рендеринга VR сверху. – dcoz

Смежные вопросы