【问题标题】:Android video filter安卓视频过滤器
【发布时间】:2013-07-17 19:03:36
【问题描述】:

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

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

另一个思路是使用GLSurfaceView,使用OpenGL来渲染滤镜。 GLSurfaceView 有一个可以设置的渲染器,但我对 OpenGL 不是很熟悉。但同样,这又回到了实际获取每个视频帧的像素。我还阅读了关于将每一帧作为纹理翻录,然后在 OpenGL 中操作纹理,但我遇到的答案不是很详细。

最后,我研究了 JavaCV。尝试使用 FFmpegFrameGrabber,但我也没有太多。我只想抓取一帧,但是当我尝试将帧的 ByteBuffer 写入 ImageView 时,出现“缓冲区不足以容纳像素”错误。

任何指导都会很棒。

【问题讨论】:

    标签: android video opengl-es filter


    【解决方案1】:

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

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

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

    【讨论】:

    • 特别是,DecodeEditEncodeTest 是一个 CTS 测试,它练习解码视频,使用 GLES 着色器对其进行修改,然后重新编码。
    【解决方案2】:

    最好使用 exoplayer 过滤器库,它可以完成您的工作,但为了将过滤后的分层与视频合并,您必须做额外的工作。

    exoplayer 过滤器的链接在那里:ExoplayerFilter

    您必须为此设置 exoplayer,但请按照他们的说明进行操作。如果出现问题,请联系我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-03-13
      • 1970-01-01
      • 2011-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-03
      相关资源
      最近更新 更多