我正在尝试创建一个应用程序,我可以在其中向录制的视频添加过滤器。基本上,我想复制 Instagram 视频或 Viddy 中存在的功能。
我做了研究,我不能把它们拼凑在一起。我研究过使用 GLSurfaceView 播放录制的视频,我知道我可以使用 NDK 进行像素操作并将其发送回 SurfaceView 或以某种方式保存。问题是,我不知道如何发送像素数据,因为似乎没有访问它的功能。这个想法来自相机功能“onPreviewFrame”。该函数返回一个字节数组,允许我操作像素并显示它。
另一个想法是使用 GLSurfaceView 并使用 OpenGL 来渲染过滤器。GLSurfaceView 有一个可以设置的渲染器,但我对 OpenGL 不是很熟悉。但同样,这又回到了实际获取每个视频帧的像素。我还阅读了关于将每一帧作为纹理翻录然后在 OpenGL 中操作纹理的信息,但我遇到的答案不是很详细。
最后,我研究了 JavaCV。尝试使用 FFmpegFrameGrabber,但我也没有太多。我只想抓取一帧,但是当我尝试将帧的 ByteBuffer 写入 ImageView 时,出现“缓冲区不够大以容纳像素”错误。
任何指导都会很棒。