我想访问视频的YUV图像,并将ImageReader表面传递给MediaCodec (as refered in the documentation)看起来像一个非常聪明的方法。但是,我无法理解onImageAvailable回调提供的Image实例中的数据。只要看看它的Y平面,无论我提供什么视频,它看起来都是0值。 我读了一些看起来有点老的@fadden评论,指的是ImageReader表面还没有用于MediaCodec,这是否仍然如此?有没有人成功地将ImageCodec解码实现到ImageReader表面解决方案?
为了说明这一点,我正在为Y飞机跳这样:
它出现了:
感谢您的任何指示
答案 0 :(得分:0)
我遇到了同样的问题。就我而言,这是因为我没有指定MediaCodec输出与ImageReader相同格式的图像。
int imageFormat = ImageFormat.YUV_420_888;
mImageReader = ImageReader.newInstance(
videoFormat.getInteger(MediaFormat.KEY_WIDTH),
videoFormat.getInteger(MediaFormat.KEY_HEIGHT),
imageFormat,
3
);
// I add the following line of code.
videoFormat.setInteger(MediaFormat.KEY_COLOR_FORMAT, MediaCodecInfo.CodecCapabilities.COLOR_FormatYUV420Flexible);
// Then initialize the MediaCodec with videoFormat.