一些设备上的Android Video View不能播放MP4文件

9
在我的应用中,我需要从SD卡播放视频。现在在Galaxy S、Galaxy Tab2上运行良好,但是在一些中国平板电脑上(如“Giada”)根本无法工作。
我有4个不同的活动来播放视频。第一个活动播放菜单视频,其中包含导航链接到其他活动。我面临的问题:
  1. 第一个视频播放正常,但循环失败并关闭应用。
  2. 如果我导航到其他活动以播放另一个视频,则会显示“无法播放视频”并关闭应用。有时它会播放相同的视频,但不完整,并在中途关闭应用。
视频扩展名:MP4 分辨率:1024x600 播放来源:SD卡。
目标平板电脑规格。
分辨率:1024x600 Android:4.1
尝试使用Video View和SurfaceView。
帮我解决问题,任何帮助都将不胜感激。
1个回答

18

对于这个问题的答案在所有设备或所有视频上都不会一致。

给定的视频文件是否能在指定的播放器中播放取决于以下三个因素:

  • 视频容器格式(文件类型)
  • 视频(以及可能的音频)流所采用的编解码器 (codec)
  • 您的播放器对该容器格式和编解码器的支持情况

编解码器及其所在设备或播放器的支持几乎肯定是导致您看到不一致结果的原因。 (如果您不知道,编解码器基本上是一个可重复的数学公式,它告诉系统如何将打包成文件的比特和字节转换为动态图像(反之亦然))

目前有各种不同的视频编解码器在视频文件中使用。由于视频分发的历史,对这些编解码器的支持方式极为不一致。许多设备不支持某些编码的流。其中许多原因包括:晦涩难懂或者许可证成本高昂等。

例如,在几年前,几乎所有视频都是以 .FLV 容器和 On2 VP6/VP7/VP8 编码进行编码的。这导致现在的问题是,虽然 On2 拥有这些编解码器,但他们对许可证进行了严格的控制。这直到 .FLV 开始失去影响力之前才放松,因此现在几乎没有(合法的)软件可以使用 On2 编码的内容。

所有这些意味着并没有银弹。所有视频永远不会在所有设备上运行,至少不会在没有安装和使用自己的编解码器来解码流的视频播放器的帮助下实现。

当然,这并不包括工厂预安装的 Android 库为您和终端用户提供的库。

那么你该怎么做呢?除了制作一个携带自己编解码器的视频播放器之外,您可以通过以下两个步骤最有效地解决问题:

  1. 针对您想要应用程序适用的特定设备
  2. 将您的内容编码为使用在您想要目标设备上工作的视频编解码器。如果发现没有支持所有计划支持的设备的编解码器,则可能需要生成两个视频副本。

如今,最广泛的支持使用MP4容器和用H.264(AVC)编码的视频流。正如我所说,没有万能的解决方案,H.264的支持绝不是普遍的,但是由于其在现代桌面和移动环境中的普及和广泛支持,该格式将比您可以做出的任何其他单一选择更容易播放潜在用户。

以下是一些可能有用的工具:

  • MediaInfo 可以查看 MPEG 格式的视频容器中正在使用的编解码器。这将有助于确定哪些设备与哪些编解码器存在问题。
  • FFmpeg 是一个编码应用程序,可以将您的内容转换为 MP4/H.264
  • Android 支持的媒体格式:支持的媒体音频/视频格式列表。

祝你好运!


太棒了。所以,你想做的是通过研究(如果可以)和试错(如果必要)找出哪种编解码器/容器的组合可以在设备上播放,并且什么质量水平(视频比特率和分辨率是其中最重要的)可以流畅地回放。 - Umopepisdn
一旦找到了“甜点”——适合您的设备的容器、编解码器、分辨率、比特率、质量级别和播放流畅度的正确组合,请将所有内容转换为该格式。 - Umopepisdn
1
ffmpeg命令示例,支持几乎所有设备的Android视频格式:ffmpeg -i input.mp4 -f mp4 -r 30 -vcodec libx264 -bufsize 2k -ac 2 -ab 192k -preset veryslow -profile:v main -acodec aac output.mp4 -hide_banner - Stav Bodik

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接