android - 如何使用 RajawaliVR 或 Rajawali 播放 360 视频

标签 android video-streaming google-cardboard rajawali rajawalivr

我很难弄清楚如何使用 Rajawali 播放 360 度全景视频。为了实现这一点,我尝试了所有可以在互联网上找到的解决方案,但都失败了。

首先,我使用了 RajawaliCardboard,并让 MainActivity 扩展自 CardboardActivity。同时,在MyRenderer类中,我让这个类继承自RajawaliCardboardRenderer类。在 MyRenderer 类中,我覆盖了 initScene() 函数:

protected void initScene() {
    StreamingTexture mTexture = null;
    if (externalMemoryAvailable())
    {
        mVideoPath = Environment.getExternalStorageDirectory().getAbsolutePath()+"/testVideo.mp4";
        try{
            mPlayer = new MediaPlayer();
            mPlayer.setDataSource(mVideoPath);
        }catch(IllegalArgumentException e){
        e.printStackTrace();
        } catch (SecurityException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        try {
            mPlayer.prepare();
        } catch (IOException t) {
            t.printStackTrace();
        }
        mTexture = new StreamingTexture("video", mPlayer);
    }
    Sphere sphere = createPhotoSphereWithTexture(mTexture);
    getCurrentScene().addChild(sphere);
    getCurrentCamera().setPosition(Vector3.ZERO);
    getCurrentCamera().setFieldOfView(75);
}

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

程序可以正常运行,但黑屏无图像。
我想问一下我应该如何改进我的程序,以及为什么我应该使用 Rajawali 来播放视频。谁能帮帮我?

最佳答案

我成功地使用 Rajawali 播放视频。

public class VideoRenderer extends RajawaliCardboardRenderer {

    Context mContext;

    private MediaPlayer mMediaPlayer;
    private StreamingTexture mVideoTexture;

    public VideoRenderer(Context context) {
        super(context);
        mContext = context;
    }

    @Override
    protected void initScene() {

        mMediaPlayer = MediaPlayer.create(getContext(),
                R.raw.video);
        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.start();

    }

    @Override
    protected 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();
    }
    public void nextVideo(String nextVideoPath){
        try{
            mMediaPlayer.stop();
            mMediaPlayer.reset();

            mMediaPlayer.setDataSource(nextVideoPath);
            mMediaPlayer.prepare();
            mMediaPlayer.start();

      }catch (Exception e){
        e.printStackTrace();
      }
    }
}

关于android - 如何使用 RajawaliVR 或 Rajawali 播放 360 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32391282/

相关文章:

android - GCM onReceive 方法未在 Android 4.0.3 上触发,但适用于 4.0.3 以上的操作系统

java - Android Facebook 分享问题?

android - 如何使用 twitter api 发推文?

linux - UDP 实时网络摄像头在 Linux 上使用 VLC 流式传输到 iPhone

video - 如何使用 FFMpeg -timestamp 语法

api - Unity 表示 API 级别太低

javascript - 在 Javascript 中检测 Google Cardboard 磁性按钮点击

android - 在 Android 的 keystore 中存储私钥

java - 如何通过 Spring Web 服务器将 HTTP 视频流代理到任意数量的客户端

android - 获取一个VR应用程序被识别为 "Cardboard Compatible"