【Android】在安卓中使用 `mobile-ffmpeg` 压缩后的视频,浏览器在线播放提示“没有找到支持的视频格式和 MIME 类型”的解决方案

在安卓中使用 mobile-ffmpeg 压缩后的视频,浏览器在线播放提示"没有找到支持的视频格式和 MIME 类型"的解决方案

你可能在安卓开发中使用了 mobile-ffmpeg 进行视频压缩,而当你尝试在浏览器中在线播放压缩后的视频时,看到提示:"没有找到支持的视频格式和 MIME 类型。" 这个问题的原因以及如何解决?今天咱们就用大白话来聊聊。

问题的原因是什么?

你在安卓项目中用 mobile-ffmpeg 压缩视频时,可能默认使用了 H.265 (HEVC) 编码格式。这个格式确实厉害,能把视频压得更小,同时还能保持不错的画质。但是,H.265 并不是所有浏览器都支持的,尤其是在 HTML5 视频播放的环境下。像 Chrome 和 Firefox,虽然在某些情况下支持 H.265,但它并不是默认支持,而且许多移动端浏览器也无法识别这个格式。

当浏览器无法识别视频的编码格式或者容器格式时,就会显示"没有找到支持的视频格式和 MIME 类型"的错误。

浏览器支持的主流视频格式

要保证压缩后的视频能够在大多数浏览器中播放,视频编码格式容器格式必须符合浏览器的要求。这里是主流浏览器普遍支持的格式:

  • 容器格式mp4, webm, ogv
  • 视频编码H.264 (AVC), VP8, VP9
  • 音频编码AAC, Vorbis, Opus

问题就在于,你压缩后的视频可能用了 H.265 (HEVC) 作为视频编码,这种格式并不是浏览器最友好的选择。

解决方案:改用 H.264 视频编码

要让视频在浏览器中顺利播放,最稳妥的做法是将编码格式从 H.265 改为 H.264,这种编码格式兼容性最好,几乎所有浏览器和设备都支持。

如何在安卓中用 mobile-ffmpeg 压缩视频并确保兼容性?

mobile-ffmpeg 中,你可能原本使用了这样的命令来压缩视频:

java 复制代码
String cmd = String.format(
    "-i %s -strict -2 -vf scale=%d:%d -c:v libx265 -x265-params crf=28:preset=fast -r 30 %s",
    videoPath,
    newWidth,
    newHeight,
    outputFilePath
);

这里的 libx265 就是告诉 mobile-ffmpeg 用 H.265 编码压缩视频。为了确保视频能在浏览器中播放,我们可以把这个编码器换成 libx264,也就是使用 H.264 编码。修改后的命令如下:

java 复制代码
String cmd = String.format(
    "-i %s -strict -2 -vf scale=%d:%d -c:v libx264 -preset fast -crf 28 -r 30 %s",
    videoPath,
    newWidth,
    newHeight,
    outputFilePath
);

解释这些参数

  • -i %s:输入文件的路径。
  • -vf scale=%d:%d:缩放视频到指定的宽高。
  • -c:v libx264:使用 H.264 编码压缩视频。
  • -preset fast:使用快速压缩设置,减少压缩时间。
  • -crf 28:控制视频质量(数值越低,质量越好,文件越大)。
  • -r 30:设置帧率为 30 帧每秒。
确保音频也兼容:使用 AAC 编码

同样重要的是音频编码。为了确保音频部分在浏览器中也能正常播放,我们需要使用浏览器广泛支持的 AAC 编码。因此,我们的命令中还要加上音频编码的设置:

java 复制代码
String cmd = String.format(
    "-i %s -strict -2 -vf scale=%d:%d -c:v libx264 -preset fast -crf 28 -c:a aac -b:a 128k -r 30 %s",
    videoPath,
    newWidth,
    newHeight,
    outputFilePath
);
  • -c:a aac:使用 AAC 作为音频编码。
  • -b:a 128k:设置音频比特率为 128kbps,保证音质不错。

使用正确的 mobile-ffmpeg

在引入 mobile-ffmpeg 时,确保使用的包是 com.arthenica:mobile-ffmpeg-full-gpl:4.4,而不是 com.arthenica:mobile-ffmpeg-full:4.4。前者包含了 H.264 编码所需的支持库,确保编码时不会出现问题。如果你只用到了视频压缩,可以使用com.arthenica:mobile-ffmpeg-min-gpl:4.4包,其他包所包含的格式如下:

min min-gpl https https-gpl audio video full full-gpl
^external libraries^ - vid.stab x264 x265 xvidcore gmp gnutls gmp gnutls vid.stab x264 x265 xvidcore lame libilbc libvorbis opencore-amr opus shine soxr speex twolame vo-amrwbenc wavpack fontconfig freetype fribidi kvazaar libaom libass libiconv libtheora libvpx libwebp snappy fontconfig freetype fribidi gmp gnutls kvazaar lame libaom libass libiconv libilbc libtheora libvorbis libvpx libwebp libxml2 opencore-amr opus shine snappy soxr speex twolame vo-amrwbenc wavpack fontconfig freetype fribidi gmp gnutls kvazaar lame libaom libass libiconv libilbc libtheora libvorbis libvpx libwebp libxml2 opencore-amr opus shine snappy soxr speex twolame vid.stab vo-amrwbenc wavpack x264 x265 xvidcore
^android system libraries^ zlib MediaCodec
^ios system libraries^ zlib AudioToolbox AVFoundation iconv VideoToolbox bzip2
^tvos system libraries^ zlib AudioToolbox iconv VideoToolbox bzip2

为什么选择 H.264 编码?

H.264 之所以是最好的选择,是因为它兼容性好。几乎所有的主流浏览器、移动设备、视频播放器等都支持 H.264 编码。这样,无论用户是在 Chrome、Safari 还是 Firefox 浏览器上,都可以轻松播放你压缩后的视频。

总结

如果你在安卓开发中使用 mobile-ffmpeg 进行视频压缩,遇到了浏览器无法播放压缩后视频的情况,多半是因为你使用了 H.265 编码。要解决这个问题:

  1. 改用 H.264 编码来压缩视频。
  2. 确保音频使用 AAC 编码,保证最大兼容性。
  3. 使用正确的 mobile-ffmpegcom.arthenica:mobile-ffmpeg-full-gpl:4.4

只要你按照这些步骤调整,压缩后的视频应该能够顺利在浏览器中播放,再也不会看到"没有找到支持的视频格式和 MIME 类型"的错误提示了。

小贴士:
  • 容器格式mp4
  • 视频编码H.264
  • 音频编码AAC

这样做,不仅能压缩视频,还能让它在所有主流浏览器里轻松播放!

相关推荐
TA远方1 小时前
【Android】adb常用的命令用法详解
android·adb·管理·控制·命令
贺biubiu9 小时前
2025 年终总结|总有那么一个人,会让你千里奔赴...
android·程序员·年终总结
xuekai200809019 小时前
mysql-组复制 -8.4.7 主从搭建
android·adb
nono牛10 小时前
ps -A|grep gate
android
未知名Android用户11 小时前
Android动态变化渐变背景
android
行业探路者11 小时前
二维码标签是什么?主要有线上生成二维码和文件生成二维码功能吗?
学习·音视频·语音识别·二维码·设备巡检
nono牛12 小时前
Gatekeeper 的精确定义
android
stevenzqzq13 小时前
android启动初始化和注入理解3
android
城东米粉儿15 小时前
compose 状态提升 笔记
android
粤M温同学16 小时前
Android 实现沉浸式状态栏
android