我正在编写一个应用程序来抓取视频中的每一帧,以便我可以进行一些cv处理。 根据Android的API doc的描述,我应该将Mediaplayer的表面设置为ImageReader.getSurface()。这样我就可以在回调OnImageAvailableListener上获得每个视频帧。它确实适用于某些设备和一些视频。 但是,在我的Nexus5(API24-25)上。当ImageAvailable时,我几乎得到了绿色像素。 我已经检查了图像的Yuv平面中的byte [],我发现从视频中读取的字节必须有些错误!大多数字节都是Y = 0,UV = 0,这导致了一个奇怪的成像器绿色像素。 我确保视频是YUV420sp。有人可以帮我吗?或者推荐另一种方式让我抓住框架?(我试过javacv但抓取器太慢了)
答案 0 :(得分:0)
我解决了我的问题!! 在使用Image时,我们应该使用getCropRect来获取Image的有效区域。 例如,当我解码1920 * 1080帧时,我得到image.width == 1088,我应该使用image.getCropImage()来获得图像的正确大小,即1920,1080