我正在尝试创建一个应用程序,在录制的视频中添加滤镜。基本上,我想复制Instagram视频或Viddy现有的功能。
我已经进行了研究,但无法将所有内容拼凑在一起。我研究了使用GLSurfaceView播放录制视频的方法,并且知道可以使用NDK进行像素操作并将其发送回SurfaceView或以某种方式保存它。问题是,我不知道如何发送像素数据,因为似乎没有函数可以访问它。这个想法来自于Camera函数“onPreviewFrame”。该函数返回一个字节数组,允许我操纵像素并显示它。
另一个想法是使用GLSurfaceView并使用OpenGL渲染过滤器。GLSurfaceView具有您可以设置的渲染器,但我对OpenGL不是很熟悉。但是,这又回到实际获取每个视频帧的像素。我还阅读了关于将每个帧作为纹理撕裂然后在OpenGL中操作纹理的方法,但我遇到的答案并不是非常详细。
最后,我研究了JavaCV。我尝试使用FFmpegFrameGrabber,但也没有什么效果。我只想抓取一帧,但当我尝试将帧的ByteBuffer写入ImageView时,我会收到“像素不够大”的错误。
任何指导都将是极好的。