注册
登录
虚拟现实VR
如何在没有Unity的情况下构建虚拟现实视频播放器?
返回
如何在没有Unity的情况下构建虚拟现实视频播放器?
作者:
春风助手
发布时间:
2024-02-18 06:20:59 (1月前)
我想构建一个不使用Unity的虚拟现实视频播放器。有没有一种使用媒体播放器的方法?
收藏
举报
2 条回复
1#
回复此人
只怕再见是故人
|
2020-08-20 17-40
您将需要以下内容: https://github.com/Rajawali/RajawaliVR 它可以很好地与媒体播放器和本地文件配合使用,但是如果您要流式传输视频,则媒体播放器不是一个可靠的选择。 这是我的例子: 玩家活动 ``` 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(); } } ```
编辑
登录
后才能参与评论