代码之家  ›  专栏  ›  技术社区  ›  Diolor

Android中的视频:更改视觉属性(例如饱和度、亮度)

  •  6
  • Diolor  · 技术社区  · 8 年前

    Surface 在使用MediaPlayer显示视频(例如h264)的Android中:

    setColorFilter Android中有没有类似的东西来处理视频帧?

    备选问题(如果第1题太难):

    2) 如果我们想以更高的饱和度导出此视频,我们应该使用编解码器,例如。 MediaCodec

    2 回复  |  直到 8 年前
        1
  •  2
  •   Dave    8 年前

    仅用于显示,一种简单的方法是使用 GLSurfaceView SurfaceTexture 渲染视频帧,以及 MediaPlayer . Prokash的答案链接到一个开源库,展示了如何实现这一点。如果你一起搜索这些词,还有很多其他的例子。通过这种方式,可以将视频帧绘制到OpenGL纹理,并创建OpenGL着色器来处理纹理的渲染方式。(我建议向Prokash询问更多细节,并接受他的回答,如果这足以满足您的要求。)

    MediaCodec MediaExtractor MediaCodec 将配置为输出到 ,因此,只需编写一些样板就可以得到渲染的输出缓冲区。过滤过程与 MediaPlayer 作为可用的解码器,例如。 here here TextureView SurfaceView 在这些示例中使用 普罗卡什的例子。

    这种方法的优点是,您可以访问媒体文件中所有单独的曲目。因此,您应该能够使用OpenGL过滤视频轨迹,并直接复制其他轨迹进行导出。你会使用 Surface GLSurfaceView 作为输入和a MediaMuxer BigFlake .

    MediaCodec 表面 This example 说明了该方法。您可以操作数据并将其发送到编码器进行导出,或根据需要进行渲染。处理原始字节数据有一些额外的复杂性。注意,我喜欢这个例子,因为它演示了分别处理音频和视频轨迹。

    FFMpeg here here 对于一些试图使FFMpeg对Java可用的库。它们基本上是命令行界面的包装。您需要做一些额外的工作来通过FFMpeg管理播放,但这绝对是可行的。

    如果您有问题,请随时提问,我将尝试阐述对您的用例最有意义的任何选项。

        2
  •  1
  •   RonTLV    8 年前

    VLC [1] .

    VLC很容易为Android编译。然后你所需要的就是libvlc(aar文件),你可以构建自己的应用程序。参见编译说明 here .

    write your own module . 只需复制一个现有的并修改它。不用说,VLC提供了强大的转码和流能力。


    其他选项是在GLSurfaceView和TextureView等曲面上使用GLSL/OpenGL。这保证了GPU的能力。