【问题标题】:Use MediaCodec and MediaExtractor to decode and code video使用 MediaCodec 和 MediaExtractor 对视频进行解码和编码
【发布时间】:2013-12-26 10:04:44
【问题描述】:

我需要将视频解码为一系列位图,以便我能够修改它们,然后将它们压缩回 android 中的视频文件。

我计划通过使用getFrameAtTime 并将其保存到图像序列来管理它。然后我可以修改序列中的图像并将其编码回电影。但我有两个问题:

  • 首先,当我阅读它时,getFrameAtTime 用于创建缩略图,并不能保证返回正确的帧。这会使视频滞后。
  • 其次,保存图像并重新读取需要很长时间。

我了解到进行解码的正确方法是使用 MediaExtractor,这很好,但我只有示例可以将其直接渲染到 surfaceView。我有什么办法可以将outputBuffer 转换为位图吗?

我需要它来让它在 16 及以上的 api 级别上工作。

【问题讨论】:

    标签: android video bitmap android-mediacodec mediaextractor


    【解决方案1】:

    您可以在bigflake 网站上找到一系列有用的示例。

    特别是,ExtractMpegFramesTest 演示了如何将 .mp4 文件解码为 BitmapDecodeEditEncodeTest 对 H.264 流进行解码和重新编码,使用 GLES 着色器修改帧。

    许多示例使用 API 18 中引入的功能,例如 Surface 输入到 MediaCodec(避免了许多颜色格式问题)和 MediaMuxer(允许您将原始 H. 264 基本流来自MediaCodec 到 .mp4 文件)。某些设备允许您将视频提取为 ByteBuffer 中的 YUV 数据,对其进行修改并重新编码,但其他设备会提取为可能被 API 16 版本的MediaCodec 拒绝的专有 YUV 颜色格式。

    我建议为 API 18(Android 4.3 “Jellybean”MR2)或更高版本编写代码。

    【讨论】:

    • 好吧,问题是我已经看过这个网站,但不幸的是我必须为 API lvl 16 做它。即使它说 ExtractMpegFramesTest.java 需要 API 16,当我尝试构建它时它需要至少 17 岁……所以这不是一个选择。
    • 那么您将面临一场艰苦的战斗。它需要普遍工作还是只是为特定设备构建的? (我会检查 ExtractMpegFramesTest ——我认为它不需要 17 岁以上的任何东西。)
    • 嗯,这就是它需要通用和 api lvl 16+ 的问题......我得到了 getFrameAtTime 解决方案,无需保存到 png 并像这样加速它很多次,但我仍然可能会有问题,它会提取一些帧两次,这会使视频滞后,我仍然不知道如何向它添加音频。因此,任何将视频拆分为位图并创建带有音频的新视频文件的建议都将不胜感激,但它需要与 16+
    • ExtractMpegFramesTest 示例已修改为与 API 16 一起使用(需要 EGL 1.0 而不是 EGL 1.4——参见stackoverflow.com/questions/20495863/…)。在 API 18 引入 MediaMuxer 类之前,无法创建 .mp4 文件(仅视频或视频+音频),因此如果您需要,您可能需要调查外部库(可能是 ffmpeg)。
    • @fadden 嗨,我正在尝试让 ExtractMpegFramesTest 示例工作,但是 SurfaceTexture onFrameAvailable() 调用从未进行过,或者说太晚了。我在这里添加了一个问题 - stackoverflow.com/questions/22457623/…
    【解决方案2】:

    很多人说方法onFrameAvailable() 永远不会被调用。好吧,listener 应该在与主线程不同的线程中。要设置监听器,请执行以下操作:(这是实现 SurfaceTexture.IOnFrameAvailableListener 的类监听器):

    mSurfaceTexture.SetOnFrameAvailableListener(this);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-04-24
      • 2016-03-12
      • 2014-07-21
      • 2015-01-02
      • 2019-10-19
      • 2013-11-18
      • 2020-03-21
      相关资源
      最近更新 更多