在 Android 设备中转码 Audio/Video/Image 文件
Transcoding Audio/Video/Image file in Android Device
我正在开发像 whatsApp 这样的聊天应用程序,我想在上传到服务器之前对媒体文件进行转码,我浏览了很多链接但无法决定我应该使用哪种方法,有没有直接的方法android 中的转码 ?
FFMPEG 我发现它是高度 cpu 密集型进程,它会消耗更多电池电量
Media Codec 我想使用 mediacodec 进行转码,但无法获得正确的步骤来理解该过程。
Android 的 MediaCodec 是一种相对更好的客户端转码方式,因为它使用自己的低级缓冲区处理。但是它不像 FFMpeg 那样提供精细的调整自由度。
至于 MediaCodec 源代码,它也是 CPU 大量保存缓冲区和处理它们,但实际上它比 FFmpeg 少得多。
我们将这两种实现都用于我们的视频编辑应用程序。基本上,如果 android 版本 >= 4.3,我们使用 MediaCodec 实现,否则使用 FFMPEG。
使用FFMPEG的问题:
- 正如您所说,cpu 密集型进程因此消耗更多电量
- x264 编码器在 GPL 下获得许可,因此您可能想使用仅支持 Baseline Profile 的 OpenH264 编码器,因此视频质量不是最好的
- 由于使用了软件编码器,处理速度相对较慢,至少与MediaCodec实现相比
MediaCodec 也有一些缺点,例如:
- 如果要转码,android版本需要>=4.3,除非你想自己处理颜色格式转换,这完全是一团糟,因为每个供应商可能都有自己的颜色格式实现. (自 4.3 起,MediaCodec 支持使用输入表面进行编码)
- 不同型号的硬件编码器可能表现不同。 (例如,某些编码器可能会生成 android MediaMuxer 尚不支持的 B 帧,因此您可能希望将 ffmpeg 用于 muxing 部分)
所以我应该说如果你只支持新的 android 版本,你应该使用 mediacodec,但如果你想安全(更容易编写适用于所有设备的代码)并且不介意性能,使用 FFMPEG 和 OpenH264
我正在开发像 whatsApp 这样的聊天应用程序,我想在上传到服务器之前对媒体文件进行转码,我浏览了很多链接但无法决定我应该使用哪种方法,有没有直接的方法android 中的转码 ?
FFMPEG 我发现它是高度 cpu 密集型进程,它会消耗更多电池电量
Media Codec 我想使用 mediacodec 进行转码,但无法获得正确的步骤来理解该过程。
Android 的 MediaCodec 是一种相对更好的客户端转码方式,因为它使用自己的低级缓冲区处理。但是它不像 FFMpeg 那样提供精细的调整自由度。 至于 MediaCodec 源代码,它也是 CPU 大量保存缓冲区和处理它们,但实际上它比 FFmpeg 少得多。
我们将这两种实现都用于我们的视频编辑应用程序。基本上,如果 android 版本 >= 4.3,我们使用 MediaCodec 实现,否则使用 FFMPEG。
使用FFMPEG的问题:
- 正如您所说,cpu 密集型进程因此消耗更多电量
- x264 编码器在 GPL 下获得许可,因此您可能想使用仅支持 Baseline Profile 的 OpenH264 编码器,因此视频质量不是最好的
- 由于使用了软件编码器,处理速度相对较慢,至少与MediaCodec实现相比
MediaCodec 也有一些缺点,例如:
- 如果要转码,android版本需要>=4.3,除非你想自己处理颜色格式转换,这完全是一团糟,因为每个供应商可能都有自己的颜色格式实现. (自 4.3 起,MediaCodec 支持使用输入表面进行编码)
- 不同型号的硬件编码器可能表现不同。 (例如,某些编码器可能会生成 android MediaMuxer 尚不支持的 B 帧,因此您可能希望将 ffmpeg 用于 muxing 部分)
所以我应该说如果你只支持新的 android 版本,你应该使用 mediacodec,但如果你想安全(更容易编写适用于所有设备的代码)并且不介意性能,使用 FFMPEG 和 OpenH264