Я разрабатываю простое приложение: оно должно обнаружить объект в активном AR-сеансе (Vuforia UserDefinedTarget), прикрепить поверхность к этому объекту и начать отображать кадры из видеофайла в текстуру. Но вместо видеокадра я вижу кадр из камеры в этой текстуре. Я не уверен, что это указанная c проблема Vuforia или просто неправильная настройка MediaPlayer.
Вот инициализация MediaPlayer:
videoPlayer.setSurface(mRenderer?.planeSurface)
videoPlayer.isLooping = true
val afd: AssetFileDescriptor
try {
afd = assets.openFd("test.mp4")
videoPlayer.setDataSource(afd.fileDescriptor, afd.startOffset, afd.length)
videoPlayer.prepare()
videoPlayer.start()
} catch (e: IOException) {
e.printStackTrace()
}
Создание текстуры:
GLES20.glGenTextures(1, planeSurfaceTextureId, 0)
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, planeSurfaceTextureId[0])
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR)
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR)
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE)
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE)
planeSurfaceTexture = SurfaceTexture(planeSurfaceTextureId[0])
planeSurfaceTexture.setOnFrameAvailableListener(mActivity)
planeSurface = Surface(planeSurfaceTexture)
И вот рендеринг:
GLES20.glGenTextures(1, planeSurfaceTextureId, 0)
GLES20.glBindTexture(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, planeSurfaceTextureId[0])
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MIN_FILTER, GLES20.GL_LINEAR)
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_MAG_FILTER, GLES20.GL_LINEAR)
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_S, GLES20.GL_CLAMP_TO_EDGE)
GLES20.glTexParameteri(GLES11Ext.GL_TEXTURE_EXTERNAL_OES, GLES20.GL_TEXTURE_WRAP_T, GLES20.GL_CLAMP_TO_EDGE)
planeSurfaceTexture = SurfaceTexture(planeSurfaceTextureId[0])
planeSurfaceTexture.setOnFrameAvailableListener(mActivity)
planeSurface = Surface(planeSurfaceTexture)
Я новичок в Android, так что это может быть какая-то глупая проблема, пожалуйста, помогите мне разобраться :) Возможно, это можно было бы сделать без GLES ..
Заранее спасибо!