How to compress mp4 video using MediaCodec Android?

TOP picture TOP · Jun 15, 2015 · Viewed 17.4k times · Source

In my Android app, I want to compress mp4 video by changing its resolution, bitrate. I don't want to use FFmpeg (because I don't want to use NDK), so I decided to use MediaCodec API.

Here are my logical steps:

  1. Extract video file with MediaExtractor, then decode data.
  2. Create new encoder with my new resolution, bitrate and encode data.
  3. Using MediaMuxer to create a new mp4 file.

My problem is: I don't know how to setup the connection between output of decoder and input of encoder. I can decode the video to a Surface or encode a new video from a surface. But I don't understand how to connect them.

I read these links: Android MediaCodec: Reduce mp4 video size, Video compression on android using new MediaCodec Library and the example from Bigflake: https://android.googlesource.com/platform/cts/+/jb-mr2-release/tests/tests/media/src/android/media/cts/DecodeEditEncodeTest.java

Can anybody give me a clear explanation what I have to do?

Answer

isma3l picture isma3l · Oct 24, 2015

I have used this to see how to manipulate video in android: https://github.com/hoolrory/AndroidVideoSamples , check the VideoResampler.java in the CommonVideoLibrary .