Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Transcoding Audio/Video/Image file in Android Device

I am working on a chat application like whatsApp, I want to transcode media file before uploading to server,I have gone through so many links but not able to decide which method i should use, is there any straight forward way of transcoding in android ?

  • FFMPEG i found it is highly cpu intensive process ,it will consume more battery power

  • Media Codec i want to do the transcoding using mediacodec but not able to get proper steps to understand the process.

Best link to give idea about transcoding

Library to transcode using media codec (It has many bugs)

like image 933
Anshu P Avatar asked Sep 28 '16 16:09

Anshu P


People also ask

What is media transcoding in Android?

Compatible media transcoding, introduced in Android 12, is a feature that allows devices to use more modern, storage-efficient media formats for video capture, such as HEVC, while maintaining compatibility with apps.

What is video audio transcoding?

Transcoding (which is a process of decoding, reformatting and re-encoding files) takes source footage of various types and recodes it into a single video codec or file format.

How do you transcode a video?

Video encoding, or video transcoding, involves a two-step process. First, the original file is decoded to an uncompressed format. Second, this uncompressed format is then encoded into the target format.


1 Answers

We used both implementation for our video editing app. Basically we used MediaCodec implementation if android version >= 4.3 and use FFMPEG otherwise.

The problem with using FFMPEG:

  1. As you said, cpu intensive process thus consume more battery
  2. x264 encoder is licensed under GPL, so you might want to use OpenH264 encoder instead which only support Baseline Profile, therefore video quality is not the best
  3. Since it used software encoder, processing speed is relatively slow, at least compared to the MediaCodec implementation

MediaCodec also have some cons though, for example:

  1. If you want to do transcoding, android version need to be >= 4.3 unless you want to deal with color format conversion yourself, which is completely mess, since each vendor may have it's own color format implementation. (Since 4.3, MediaCodec support encoding using input surface)
  2. Hardware encoder may behave differently for different models. (For example some encoder may produces B frames which is not supported yet by android MediaMuxer, so you may want to use ffmpeg for the muxing part)

So I should say if you only support new android version, you should use mediacodec, but if you want to be safe (easier to write code that works on all device) and does not really mind the performance, use FFMPEG with OpenH264

like image 167
jfawkes Avatar answered Oct 19 '22 00:10

jfawkes