2013-07-18 83 views
12

我正在尝试创建一个应用程序,可以将过滤器添加到录制的视频中。基本上,我想复制Instagram视频或Viddy中存在的功能。Android视频过滤器

我已经完成了研究,但我无法将它们拼凑在一起。我已经研究过使用GLSurfaceView播放录制的视频,我知道我可以使用NDK进行像素操作并将其发送回SurfaceView或以某种方式保存。问题是,我不知道如何发送像素数据,因为似乎没有功能来访问它。这个想法来自相机功能“onPreviewFrame”。该函数返回一个字节数组,允许我操作像素并显示它。

另一个想法是使用GLSurfaceView并使用OpenGL渲染过滤器。 GLSurfaceView有一个你可以设置的渲染器,但我对OpenGL不是很熟悉。但是,这又回到实际获得每个视频帧的像素。我也读过关于将每一帧翻译为纹理,然后在OpenGL中操纵纹理的问题,但我所遇到的答案并不十分详细。

最后,我研究了JavaCV。试图使用FFmpegFrameGrabber,但我还没有太多。我只想抓住一帧,但是当我尝试将帧的ByteBuffer写入ImageView时,我得到一个“缓冲区不够大”的错误。

任何指导都会很棒。

回答

5

从Android 4.3开始,您可以使用Surface作为编码器的输入。 http://developer.android.com/about/versions/android-4.3.html#Multimedia

因此,您可以使用GLSurfaceView并使用片段着色器应用滤镜。

你可以在这里找到一些很好的例子。 http://bigflake.com/mediacodec/

+0

特别是,DecodeEditEncodeTest是一个CTS测试,它可以对视频进行解码,使用GLES着色器对其进行修改,然后对其进行重新编码。 – fadden

0

这是很好的使用exoplayer过滤器库,这一个会做你的工作,但为了合并过滤分层与视频你必须做一个额外的工作。

链接exoplayer过滤器是有你:ExoplayerFilter

你得瑟了这个exoplayer但按照他们的指示,你就可以做任务。如果出现问题,请给我打电话。