You have to render the texture.
If it were a normal texture, and you were using GLES 2 or later, you could attach it to an FBO and read directly from that. A SurfaceTexture
is backed by an "external texture", and might be in a format that the GL driver doesn't support a full set of operations on, so you can't do that. You need to render it, and read the result.
FWIW, the way you go about saving the frame can have a significant performance impact. A full example demonstrating the use of MediaExtractor
, MediaCodec
, glReadPixels()
, and PNG file creation is now up on bigflake (ExtractMpegFramesTest).
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…