当我将视频解码到表面时,我想将我想要的帧另存为位图/jpeg文件。我不想在屏幕上绘制,只想将SurfaceTexture的内容另存为图像文件。

最佳答案

您必须渲染纹理。

如果它是正常纹理,并且您使用的是GLES 2或更高版本,则可以将其附加到FBO并直接从中读取。 SurfaceTexture由“external texture”支持,并且格式可能是GL驱动程序不支持其上的全部操作,因此您不能这样做。您需要渲染它,并读取结果。

FWIW,保存框架的方式可能会对性能产生重大影响。 bigflake(ExtractMpegFramesTest)上有一个完整的示例,演示了MediaExtractorMediaCodecglReadPixels()和PNG文件创建的用法。

10-08 05:19