android - 将图像转换为视频

标签 android video android-mediaplayer h.264 android-mediacodec

如何使用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/

相关文章:

Android - Wifimanager 处理 wifi 连接状态

android - 我正在尝试将Firebase添加到我的flutter项目中,但我不断收到此错误找不到方法实现()

python - 如何使用带有 OpenCV 2.4.6 的 Python 2.7.5 在 AVI 容器中打开 M-JPEG 视频?

java - Android 中视频文件的唯一标识符

android - 通话的最佳音源设置是什么?

Android:如何在已经显示 Camara 预览的 Surfaceview 上绘图

android - 将自定义 boxshadow 添加到 Flutter 卡

php - 使用YouTube API V3 PHP获得视频分级

android - 如何播放不在 url 或存储中的音频文件的 InputStream?

Android VideoView MediaPlayer OnInfoListener - 事件未触发