如何不使用FFmpeg将图像转换成视频?或 JCodec , 仅适用于 android MediaCodec .视频图像是位图文件,可以是 ARGB888 或 YUV420(我的选择)。最重要的是视频必须可以在安卓设备上播放,最大 API 是 16。我知道 API 18 MediaMuxer我不能使用它。
请帮助我,我被困在这个问题上很多天了。 (JCodec 很慢,而 FFmpeg 使用起来很复杂)。
最佳答案
在适用于所有设备的 API 16 中,没有简单的方法可以做到这一点。
你会遇到 buffer alignment 的问题, color spaces ,并且需要使用不同的YUV layouts在不同的devices .
考虑缓冲区对齐问题。在具有高通 SOC 的 API 18 之前的设备上,您必须将 CbCr 平面与缓冲区起点对齐 2K 偏移量。在 API 18 上,所有设备都使用相同的布局;这是由 Android 4.3 中添加的 CTS 测试强制执行的。
即使使用 API 18,您仍然必须在运行时检测编码器需要平面值还是半平面值。 (这可能与您的情况无关,但是 MediaCodec
不接受相机输出的任何 YUV 格式。)请注意 MediaCodec
没有 RGB 输入。 .
如果可移植性不是问题,即您的目标是特定设备,您的代码会简单得多。
上面链接的 SO 页面中有代码 fragment 。最接近的“官方”示例是 EncodeDecodeTest 中的缓冲区到缓冲区/缓冲区到表面测试。 .这些是 API 18 测试,这意味着它们不会执行“如果 QC 和 API16 则更改缓冲区对齐方式”的舞蹈,但它们确实展示了如何进行平面布局与半平面布局检测。它不包括 RGB 到 YUV 颜色转换器,但网络上有这样的示例。
好的一面是,编码器输出似乎在任何设备和 API 版本上都很好。
将原始 H.264 流转换为 .mp4 文件需要第 3 方库,因为正如您所说 MediaMuxer
不可用。我相信有人安装了ffmpeg作为命令行实用程序并以这种方式执行(可能类似于 this ?)。
关于android - 将图像转换为视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21262797/