2016-09-28 126 views
8

我正在开发一个像whatsApp这样的聊天应用程序,我想在将代码上传到服务器之前转换媒体文件,我已经经历了如此多的链接,但无法确定我应该使用哪种方法使用,是否有任何在android中转码的直接方式?在Android设备中转码音频/视频/图像文件

  • FFMPEG我发现这是非常CPU密集处理,它会消耗更多的电量

  • 媒体编解码我想用mediacodec,但没能得到适当的措施来办转码了解过程。

Best link to give idea about transcoding

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

回答

1

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

使用FFMPEG的问题:

  1. 正如你所说,CPU密集处理从而消耗更多的电池
  2. X264编码器根据GPL许可,所以你可能需要使用OpenH264编码器,而不是只支持基线资料,因此视频质量并不是最好的
  3. 由于所使用的软件的编码器,处理速度是相对缓慢的,至少相对于MediaCodec实施

MediaCodec也有一些缺点虽然,例如:

  1. 如果你想要做转码,Android版本必须> = 4.3,除非你要处理的彩色格式的转换自己,这是完全混乱,因为每个供应商可能有它自己的颜色格式实现。 (从4.3开始,MediaCodec支持使用输入表面进行编码)
  2. 硬件编码器对于不同型号的行为可能会有所不同。 (例如,某些编码器可产生未由Android MediaMuxer还支持B帧,所以你可能需要使用的ffmpeg的复用的部分)

所以我说,如果你只支持新的Android版本,你应该使用mediacodec,但如果您想要安全(更容易编写适用于所有设备的代码)并且不介意性能,请使用FFMPEG和OpenH264

0

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