在Android设备中转码音频/视频/图像文件

时间:2016-09-28 16:19:03

标签: mediacodec transcoding

我正在开发像whatsApp这样的聊天应用程序,我想在上传到服务器之前对媒体文件进行转码,我已经经历了这么多链接但是无法决定我应该使用哪种方法,是否有任何直接的转码方式在android?

  • FFMPEG 我发现它是高度cpu密集的过程,它会消耗更多的电池电量

  • 媒体编解码器我想使用mediacodec进行转码,但无法正确理解该过程。

Best link to give idea about transcoding

Library to transcode using media codec(它有很多错误)

2 个答案:

答案 0 :(得分:1)

我们为视频编辑应用程序使用了这两种实现。基本上我们使用MediaCodec实现,如果android版本> = 4.3,否则使用FFMPEG。

使用FFMPEG的问题:

  1. 正如你所说,cpu密集型进程因此消耗更多电池
  2. x264编码器是根据GPL许可的,因此您可能希望使用仅支持Baseline Profile的OpenH264编码器,因此视频质量不是最好的
  3. 由于它使用了软件编码器,处理速度相对较慢,至少与MediaCodec实现相比
  4. MediaCodec也有一些缺点,例如:

    1. 如果你想进行转码,Android版本必须是> = 4.3,除非你想自己处理颜色格式转换,这是完全混乱,因为每个供应商可能有它自己的颜色格式实现。 (自4.3以来,MediaCodec支持使用输入表面编码)
    2. 对于不同型号,硬件编码器的行为可能不同。 (例如,某些编码器可能会产生Android MediaMuxer尚不支持的B帧,因此您可能希望将ffmpeg用于多路复用器部分)
    3. 所以我应该说如果你只支持新的Android版本,你应该使用mediacodec,但是如果你想要安全(更容易编写适用于所有设备的代码)并且不介意性能,请使用FFMPEG和OpenH264

答案 1 :(得分:0)

Android的MediaCodec是一种相对更好的在客户端上进行代码转换的方法,因为它使用自己的低级缓冲区处理。但是它并没有像FFMpeg那样提供精细的调整自由。 对于MediaCodec源代码,它也是CPU密集型,用于保存缓冲区并处理它们,但它实际上比FFmpeg小。