【问题标题】:How to compress mp4 video using MediaCodec Android?如何使用 MediaCodec Android 压缩 mp4 视频?
【发布时间】:2015-06-15 10:18:17
【问题描述】:

在我的 Android 应用中,我想通过更改分辨率和比特率来压缩 mp4 视频。我不想用FFmpeg(因为我不想用NDK),所以我决定用MediaCodec API。

这是我的逻辑步骤:

  1. 使用 MediaExtractor 提取视频文件,然后解码数据。
  2. 使用我的新分辨率、比特率和编码数据创建新编码器。
  3. 使用 MediaMuxer 创建新的 mp4 文件。

我的问题是:我不知道如何设置解码器输出和编码器输入之间的连接。我可以将视频解码到 Surface 或从 Surface 编码新视频。但我不明白如何连接它们。

我阅读了这些链接:Android MediaCodec: Reduce mp4 video sizeVideo compression on android using new MediaCodec Library 和 Bigflake 的示例:https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java

谁能给我一个清楚的解释我必须做什么?

【问题讨论】:

  • 要直接复制,您只需从编码器获取输入表面(通过getInputSurface())并将其作为输出表面传递给解码器(通过configure())。
  • MediaCodec API 非常晦涩且没有文档记录。我已经开始在这个问题上悬赏。希望有人会发布他们已经拥有的课程。磁盘上的大 mp4 文件 -> 磁盘上的小 mp4 文件。全部使用 MediaCodec。那将挽救无数生命! (好吧,也许不是,但肯定会救我的^^)
  • @TOP 我正在使用下面的答案压缩库来压缩视频文件..但我没有从中获取音频..你能帮我解决这个问题吗跨度>
  • 您能否分享一下您最终是如何做到的?谢谢

标签: android android-mediacodec


【解决方案1】:

我用这个来看看如何在android中操作视频:https://github.com/hoolrory/AndroidVideoSamples,检查CommonVideoLibrary中的VideoResampler.java

【讨论】:

  • 示例使用:VideoResampler resampler = new VideoResampler(); resampler.addSamplerClip(new SamplerClip(inputUri));重采样器.setOutput(outputUri); resampler.setOutputResolution(Resolution.RESOLUTION_720P.getWidth(), Resolution.RESOLUTION_720P.getHeight());尝试{重新采样器.start(); } catch ( Throwable e ) { e.printStackTrace();它就像魔术一样工作!
  • @Taiko 压缩后没有音频。是否缺少任何代码?
  • @SkyWalker 对不起。就我而言,我只使用了视频。随时用音频更新我的帖子!
  • @SkyWalker 有点晚了,但是检查这个答案github.com/hoolrory/AndroidVideoSamples/issues/… mux 函数添加了音轨,我试过了,和我一起工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-03
  • 2012-08-09
  • 2023-04-01
  • 1970-01-01
相关资源
最近更新 更多