如何在与vuforia SDK运行时改变视频 [英] How to change video at runtime with 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屋!