如何从ImageReader android获取InputStream

ome*_*erk 0 java android file-descriptor fileinputstream surfaceview

我正在看这个课程:https://developer.android.com/reference/android/media/ImageReader.html

我想要的是从ImageReader类中获取一个InputStream,并获取正在渲染到当前表面的图像数据.Current Surface表示当前显示的android屏幕.我在AOSP代码中查看了一个示例,但实际上很难理解.如果有人为我提供了一个很好的ImageReader类示例,那将非常有用.

fad*_*den 5

听起来你正试图用来ImageReader从任意数据中提取数据Surface.它不起作用.

ImageReader是一个缓冲队列"CPU使用者",这是一种奇特的方式,说当你向它发送数据时Surface,在CPU上运行的代码可以直接检查数据.并非所有曲面都可以这样处理 - 在创建曲面时设置使用标志 - 因此您需要创建Surfacewith ImageReader#getSurface()然后将其传递给想要将数据发送到的东西Surface.

正如文档所述,"几个Android媒体API类接受Surface对象作为渲染目标,包括MediaPlayer,MediaCodec和RenderScript Allocations."

主要客户ImageReader是相机,在您链接的CTS测试中展示.它实际上并不适用于MediaCodec解码器,因为输出格式与相机不同(其中一些是专有的).

虚拟显示测试更接近您想要的,因为您可以将虚拟显示的输出定向到Surface.对于具有普通权限的应用,您只能在那里发送自己的应用输出.Android 4.4"screenrecord"命令做了类似的事情.

(如果你想记录你正在绘制的内容SurfaceView,并且你使用OpenGL进行渲染,那么这里这里展示一些替代方案.)