Это в основном дубликат этого вопроса , который остался без ответа. Я знаю, что мне нужно реализовать SurfaceProvider, чтобы предоставить Surfacetexture для SurfaceView или GLSurfaceView, но подробности того, как это следует реализовать, на данный момент не документированы.
Ниже приведен код, который я написал, но, к сожалению, он не работает (onFrameAvailable вызывается только один раз и отображает черный экран):
// SurfaceProvider.onSurfaceRequested
override fun onSurfaceRequested(surfaceRequest: SurfaceRequest) {
Log.e("NM", "surfaceRequestFlag")
val surfaceTexture = SurfaceTexture(textureArray[0])
surfaceTexture.setDefaultBufferSize(640, 480)
val surface = Surface(surfaceTexture)
val parent = view.parent as ViewGroup
parent.removeView(view)
provideSurfaceTexture(surfaceTexture)
parent.addView(view)
//updateTransform()
surfaceRequest?.provideSurface(surface, ContextCompat.getMainExecutor(view.context), Consumer<SurfaceRequest.Result> { result ->
surface.release()
surfaceTexture.release()
Log.e("NM", "SurfaceConsumer")
})
}
// provideSurfaceTexture
fun provideSurfaceTexture(_surfaceTexture: SurfaceTexture) {
Log.e("NM", "ProvideSurfaceTexture")
surfaceTexture = _surfaceTexture
surfaceTexture?.setOnFrameAvailableListener(this)
}