如何在与vuforia SDK运行时改变视频 [英] How to change video at runtime with vuforia SDK

查看:282
本文介绍了如何在与vuforia SDK运行时改变视频的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在Android上使用vuforia SDK和我与videoplayback样品code工作。我想改变的视频源文件在运行时。要做到这一点,当我想加载一个新的视频文件,首先我改变视频文件的名称是这样的:

  mMovieName [0] = Environment.getExternalStorageDirectory()的getPath()+/ video1.mp4。

我从开始时加载它检查的路径,视频文件,它是正确的。
我把这个线在此方法:

  onQCARUpdate(州州)

这是在相等的时间步运行。然后,我加载新的视频像这样在相同的方式:

  mRenderer.requestLoad(0,mMovieName [0],0,FALSE);

所以最后它看起来是这样的:

  @覆盖
公共无效onQCARUpdate(州州)
{
    如果(loadNewVideo)
    {
        。mMovieName [0] = Environment.getExternalStorageDirectory()的getPath()+/ video1.mp4;
        mRenderer.requestLoad(0,mMovieName [0],0,假);
    }
}

但问题是,没有什么变化。最初的视频会继续,因为它是正在播放,并没有任何错误或崩溃。我应该做的事情除了这些也抑或是我完全关闭?


编辑:

我实际上并没有加载视频。现在我打电话videoHelper的加载方法,但仍是视频不会改变。它只是冻结,我可以听到它的声音。

在VideoPlayback.java有一次,我一个水龙头发生添加了这个方法,我在里面叫onQCarUpdate:

 私人布尔changeVideo()
{
    布尔结果= TRUE;    mMovieName [STONES] = Environment.getExternalStorageDirectory()的getPath()+/ video1.mp4。
    mRenderer.requestLoad(石头,mMovieName [STONES],0,FALSE);
    mRenderer.loadVideo(STONES);    返回结果;
}

还增加了这种方法来VideoPlaybackRenderer.java(我只是复制这些从onSurfaceChanged):

 公共无效loadVideo(int i)以
{
    如果(mVideoPlayerHelper [I]!= NULL)
    {
        如果(!mVideoPlayerHelper [I]
            .setupSurfaceTexture(videoPlaybackTextureID [I]))
            mCanRequestType [I] = MEDIA_TYPE.FULLSCREEN;
        其他
            mCanRequestType [I] = MEDIA_TYPE.ON_TEXTURE_FULLSCREEN;        如果(mLoadRequested [I])
        {
            mVideoPlayerHelper [I] .load(mMovieName [I]
                mCanRequestType [I]中,mShouldPlayImmediately [I]
                mSeekPosition [I]);
            mLoadRequested [I] = FALSE;
        }
    }
}

到视频的地址是罚款。我试图加载它作为第一个视频和它起着罚款。这两部影片都在SD存储和我修改VideoHelper.java从SD加载。我还检查它并进入loadVideo一旦我点击目标之外。

编辑:

我装了一个新的视频等什么工作是在此之前卸载:

 公共无效loadVideo(int i)以
{
    如果(mVideoPlayerHelper [I]!= NULL)
    {
        mVideoPlayerHelper [I] .unload();
        如果(!mVideoPlayerHelper [I]
            .setupSurfaceTexture(videoPlaybackTextureID [I]))
            mCanRequestType [I] = MEDIA_TYPE.FULLSCREEN;
        其他
            mCanRequestType [I] = MEDIA_TYPE.ON_TEXTURE_FULLSCREEN;        如果(mLoadRequested [I])
        {
            mVideoPlayerHelper [I] .load(mMovieName [I]
                mCanRequestType [I]中,mShouldPlayImmediately [I]
                mSeekPosition [I]);
            mLoadRequested [I] = FALSE;
        }
    }
}


解决方案

如果你探索code,你可以看到requestLoad方法不做任何事,但equalation:

 公共无效requestLoad(INT目标,弦乐的movieName,INT seekPosition,
        布尔playImmediately)
    {
        mMovieName [目标] =的movieName;
        mSeekPosition [目标] = seekPosition;
        mShouldPlayImmediately [目标] = playImmediately;
        mLoadRequested [目标] =真;
    }

您需要加载视频的渲染器类:

  mVideoPlayerHelper [I] .load(mMovieName,mCanRequestType,mShouldPlayImmediately,mSeekPosition);

I'm using vuforia SDK on android and I'm working with videoplayback sample code. I want to change the source file of the video at runtime. To do that, when I want to load a new video file, first I change the video file name like this:

mMovieName[0] = Environment.getExternalStorageDirectory().getPath()+"/video1.mp4";

I checked the path to the video file by loading it from the begining and it's correct. I put this line in this method:

onQCARUpdate(State state)

which is run in equal time steps. Then I load the new video like this in the same method:

mRenderer.requestLoad(0, mMovieName[0], 0, false);

SO in the end it looks like this:

@Override
public void onQCARUpdate(State state)
{
    if(loadNewVideo)
    {
        mMovieName[0] = Environment.getExternalStorageDirectory().getPath()+"/video1.mp4";
        mRenderer.requestLoad(0, mMovieName[0], 0, false);
    }
}

But the problem is that nothing changes. The initial video continues as it was being played and no errors or crashes. Should I do something aside from these too or is it that I'm completely off?


EDIT:

I was not actually loading the video. I'm calling load method of videoHelper now but still the video doesn't change. It just freezes and I can hear its sounds.

In VideoPlayback.java I added this method which I'm calling inside onQCarUpdate once a single tap happens:

private boolean changeVideo()
{
    boolean result = true;

    mMovieName[STONES] = Environment.getExternalStorageDirectory().getPath()+"/video1.mp4";
    mRenderer.requestLoad(STONES, mMovieName[STONES], 0, false);
    mRenderer.loadVideo(STONES);

    return result;
}

Also added this method to VideoPlaybackRenderer.java (I just copied these from onSurfaceChanged):

public void loadVideo(int i)
{
    if (mVideoPlayerHelper[i] != null)
    {
        if (!mVideoPlayerHelper[i]
            .setupSurfaceTexture(videoPlaybackTextureID[i]))
            mCanRequestType[i] = MEDIA_TYPE.FULLSCREEN;
        else
            mCanRequestType[i] = MEDIA_TYPE.ON_TEXTURE_FULLSCREEN;

        if (mLoadRequested[i])
        {
            mVideoPlayerHelper[i].load(mMovieName[i],
                mCanRequestType[i], mShouldPlayImmediately[i],
                mSeekPosition[i]);
            mLoadRequested[i] = false;
        }
    }
}

The address to the video is fine. I tried loading it as the first video and it plays fine. Both videos are on SD storage and I've modified VideoHelper.java to load from SD. I also checked and it does go into loadVideo once I tap outside the target.

EDIT:

I had to unload before loading a new video so what worked was this:

public void loadVideo(int i)
{
    if (mVideoPlayerHelper[i] != null)
    {
        mVideoPlayerHelper[i].unload();
        if (!mVideoPlayerHelper[i]
            .setupSurfaceTexture(videoPlaybackTextureID[i]))
            mCanRequestType[i] = MEDIA_TYPE.FULLSCREEN;
        else
            mCanRequestType[i] = MEDIA_TYPE.ON_TEXTURE_FULLSCREEN;

        if (mLoadRequested[i])
        {
            mVideoPlayerHelper[i].load(mMovieName[i],
                mCanRequestType[i], mShouldPlayImmediately[i],
                mSeekPosition[i]);
            mLoadRequested[i] = false;
        }
    }
}

解决方案

if you explore the code, you can see the requestLoad method does nothing but equalation:

public void requestLoad(int target, String movieName, int seekPosition,
        boolean playImmediately)
    {
        mMovieName[target] = movieName;
        mSeekPosition[target] = seekPosition;
        mShouldPlayImmediately[target] = playImmediately;
        mLoadRequested[target] = true;
    }

You need to load the video in the Renderer Class:

mVideoPlayerHelper[i].load(mMovieName, mCanRequestType, mShouldPlayImmediately, mSeekPosition);

这篇关于如何在与vuforia SDK运行时改变视频的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆