Android视频帧处理

Android视频帧处理,android,video,image-processing,camera,computer-vision,Android,Video,Image Processing,Camera,Computer Vision,我正在开发一个应用程序,它可以对相机帧进行实时图像处理。为此,我使用preview回调的方法onPreviewFrame这适用于支持分辨率至少为640x480或更高的预览帧的相机。但当相机不支持如此大的相机预览分辨率时,应用程序被编程为拒绝处理这样的帧。现在,我遇到的问题是像索尼Xperia这样的手机。这是一个非常好的设备,可以录制分辨率高达1280x720的视频,但不幸的是,相机预览的最大尺寸是480x320,这对于我的需要来说太小了 我想知道的是如何获得这些更大的相机帧(高达1280x720

我正在开发一个应用程序,它可以对相机帧进行实时图像处理。为此,我使用preview回调的方法
onPreviewFrame

这适用于支持分辨率至少为640x480或更高的预览帧的相机。但当相机不支持如此大的相机预览分辨率时,应用程序被编程为拒绝处理这样的帧。现在,我遇到的问题是像索尼Xperia这样的手机。这是一个非常好的设备,可以录制分辨率高达1280x720的视频,但不幸的是,相机预览的最大尺寸是480x320,这对于我的需要来说太小了

我想知道的是如何获得这些
更大的相机帧
(高达1280x720或更多)?显然,这是可能的,因为相机应用程序能够以该分辨率录制视频-因此,该应用程序必须能够访问那些较大的帧。如何从我的应用程序中执行相同的操作

应用程序必须支持安卓2.1及更高版本,但即使我只为安卓4.0或更高版本找到问题的解决方案,我也会非常高兴


这个问题类似于
http://stackoverflow.com/questions/8839109/processing-android-video-frame-by-frame-while-recording
,但我不需要保存视频-我只需要那些高分辨率的视频帧…

您可能应该看看库。
它具有允许您接收完整帧的方法。

我有一个印象:视频预览大小小,速度慢,比设置的视频录制帧速率慢

我曾经试图寻找解决这个问题的办法。似乎更好的方法是从录像机获取视频流,然后直接处理视频流中的数据


你可以在安卓ip摄像头上找到一些例子

看来你唯一能做的就是从MediaRecorder数据中解码帧。 您可以使用ffmpeg对LocalSocket中的录制器数据进行解码

希望以下开源项目能有所帮助:

适用于android的ipcamera:

sphydroid ipcamera:

Salam。 您可以使用此库:

此库具有
addFrameProcessor
侦听器,该侦听器在
process
函数中具有
Frame
参数

如果需要在帧处理过程中录制视频,则需要使用
CameraView
的from
takeVideoSnapshot
功能。
takeVideo
停止帧处理,直到在我测试的最新版本中完成视频录制
2.6.4

如果可以跳转到SDK 11+,则可以使用
SurfaceTexture
进行相机预览。如果OpenGL足以满足您的图像处理需求,您可以试一试,看看基于SurfaceTexture的预览是否具有更高的分辨率。这一点很好。我认为Camera.Parameters.getSupportedPreviewSizes()只取决于摄影机,而不取决于摄影机正在预览的曲面。我试试看。另一方面,是否可以通过V4L2(VideoForLinux2)接口访问摄像头?也许使用V4L,我可以更好地控制相机…首先,要考虑onPreviewFrame为您提供YUV(NV21)图像,除非您在相机对象中指定另一种预览格式。由于android sdk中缺少使用这种格式的方法,这将是一个麻烦。这种格式是默认格式,因此如果你想与所有设备100%兼容,你必须管理它。当然,您可以将图像转换为更易于管理的格式,但这在性能方面代价高昂,因此正如您所说的,如果您想要实时处理,这对youMario来说将是一个问题,我知道方法onPreviewFrame中给出的图像格式,我已经有了处理此格式的方法。问题只是在某些设备上(如索尼Xperia Go),预览帧的最大尺寸为480x320,但该设备能够录制高清视频(1280x720)。这意味着该设备的摄像头传感器能够产生高分辨率视频帧。我只想访问它们。如果我使用MediaRecorder,那么我可以录制高清视频,但我希望在onPreviewFrame中有高清帧。感谢分享这些项目和想法。看起来这就是我一直在寻找的。