Hi, I have been playing around with the videoplayback demo, it works fine until I add more video to it.
I have make 6 trackables for 6 videos, on one of my phone, it can play all 6 videos successfully.
But for another android phone, it can only play 4 and for another tablet it can only play 3
I have checked the log, the error occurs when it prepare the mediaplayer at mMediaPlayer.prepareAsync(); in VideoPlayerHelper.java
related logs:
12-13 17:15:10.247: E/OMXNodeInstance(14298): OMX_UseBuffer failed with error -2147479528 (0x80001018)
12-13 17:15:10.247: E/OMXCodec(14298): [OMX.TI.DUCATI1.VIDEO.DECODER] ERROR(0x80001000, 0)
12-13 17:15:10.247: W/AwesomePlayer(14298): onPrepareAsyncEvent() initVideoDecoder error(-2147483648)
12-13 17:15:10.247: E/MediaPlayer(15561): error (1, -2147483648)
12-13 17:15:10.247: D/DOMX(14298): ERROR: failed check:(eError == OMX_ErrorNone) || (eError == OMX_ErrorNoMore) - returning error: 0x80001000 - Error returned from OMX API in ducati
12-13 17:15:10.247: D/DOMX(14298): ERROR: Error From ComponentDeInit..
12-13 17:15:10.286: E/MediaPlayer(15561): Error (1,-2147483648)
12-13 17:15:10.286: E/QCAR(15561): Error while opening the file for fullscreen. Unloading the media player (Unspecified media player error, -2147483648)
12-13 17:15:10.286: E/MediaPlayer(15561): error (-38, 0)
1/Remove this code from onSurfaceCreated in VideoPlaybackRenderer.java :
if (mLoadRequested[i])
{
mVideoPlayerHelper[i].load(mMovieName[i],
mCanRequestType[i], mShouldPlayImmediately[i],
mSeekPosition[i]);
mLoadRequested[i] = false;
}
2/ Remove this code from onSurfaceChanged in VideoPlaybackRenderer.java :
if (mLoadRequested[i] && mVideoPlayerHelper[i] != null)
{
mVideoPlayerHelper[i].load(mMovieName[i], mCanRequestType[i],
mShouldPlayImmediately[i], mSeekPosition[i]);
mLoadRequested[i] = false;
}
3/Replace onDrawFrame(GL10 gl) function in VideoPlaybackRenderer.java with this code :
public void onDrawFrame(GL10 gl)
{
if (!mIsActive)
return;
for (int i = 0; i < VideoPlayback.NUM_TARGETS; i++)
{
if (mVideoPlayerHelper[i] != null)
{
if (mVideoPlayerHelper[i].isPlayableOnTexture())
{
if (mVideoPlayerHelper[i].getStatus() == MEDIA_STATE.PLAYING)
{
mVideoPlayerHelper[i].updateVideoData();
}
mVideoPlayerHelper[i]
.getSurfaceTextureTransformMatrix(mTexCoordTransformationMatrix[i]);
setVideoDimensions(i,
mVideoPlayerHelper[i].getVideoWidth(),
mVideoPlayerHelper[i].getVideoHeight(),
mTexCoordTransformationMatrix[i]);
}
setStatus(i, mVideoPlayerHelper[i].getStatus().getNumericType());
}
}
// Call our function to render content from SampleAppRenderer class
mSampleAppRenderer.render();
for (int i = 0; i < VideoPlayback.NUM_TARGETS; i++)
{
if (isTracking(i))
{
if (mLoadRequested[i])
{
try{
if(last != -1){
mVideoPlayerHelper[last].unload();
}
}catch (Exception e){
}
mVideoPlayerHelper[i].load(mMovieName[i], mCanRequestType[i],
mShouldPlayImmediately[i], mSeekPosition[i]);
mLoadRequested[i] = false;
last = i ;
}
if (mVideoPlayerHelper[i] != null)
mVideoPlayerHelper[i].play(false, -1);
}
else
{
if (mVideoPlayerHelper[i] != null)
mVideoPlayerHelper[i].pause();
}
}
}
PS: the last variable is defined to store the index of last played video, you define it in the classe and give it an initial value of -1