Android中的视频处理

Mar*_*gal 11 java camera android

我在Eclipse中使用Android 2.2.

我想创建一个捕获视频的应用程序,并且对于每个帧,它将它作为位图发送到处理它的方法并返回一个新的位图并显示处理后的位图.

我对Android不是很熟悉,所以请,有人能把我发送给我需要查看的资源来做这样的事吗?

Dev*_*red 20

使用Android SDK完成以下步骤非常简单:

  • 从相机捕获预览帧作为位图数据. Camera.PreviewCallback将以byte[]多种可能的图像格式返回表示帧的数据.
  • 修改像素数据.由于数据以原始字节的形式返回,因此对数据进行调整相对容易......这里的难点在于为您想要执行的特定图像处理应用算法.没有任何内置效果(4.0之前版本)可以简单地应用于图像,因此您必须自己编写.
  • 还可以将数据解码为Bitmap对象以更容易地处理像素.在2.2中,您可以选择使用NDK和jnigraphics在本机代码中处理Bitmap的像素,这比在Java层快得多.
  • 获取结果的内容Bitmap并显示它.对于快速移动的数据,您可能希望将其显示在SurfaceView; 使用该视图中可用的lockCanvas()unlockCanvasAndPost()方法SurfaceHolder包含.

如果这是您想要做的全部,那么您可以轻松完成此任务.但是,这与捕获视频不同.Android目前不提供钩子,您可以将帧实时流式传输到编码视频容器(MPEG4,3GP等)中.它的视频捕获功能紧密地包含在MediaRecorder其中,从而一直控制从帧捕获到编写编码视频的过程.您需要第三部分库,例如FFMPEG(已在Android应用程序中多次使用NDK层构建和运行),以帮助修改帧的编码过程.

我知道你有一个2.2目标,但Android 4.0确实提供了一些缓解,因为他们已经发布了新版本的NDK,这使得人们可以在将数据流传输到表示层之前从流中读取图像数据时有更多的发言权.但是,我没有花足够的时间来了解它是否可以根据您的情况推荐.


Jai*_*tes 7

如果您想进行更复杂的实时视频处理,我强烈推荐OpenCV for Android.

OpenCV是一个计算机视觉库,使您能够实时处理视频,它具有执行简单任务的库,如检测边缘或更复杂的任务,如检测面和匹配功能.

您可以在一天内在您的Android手机中使用OpenCV,特别是因为它包含大量文档和示例.


Gra*_*ham 5

您可以使用Camera.setPreviewCallbackCamera.PreviewCallback#onPreviewFrame来收听来自相机的预览帧.

二维条码扫描器的代码可能是一个有用的起点: ZXing