我们有一个 iOS 应用程序,目前正在为 Android 重新构建。该应用程序依赖于能够以帧精度擦洗视频。我们有渲染为单帧的 3D 动画;我们将帧的子集构建成许多小的(1-2 秒)视频;该应用程序提供了擦洗这些视频并查看每个单独帧的能力。
我们最初创建的 MP4 视频在 iOS 上运行良好。当我们试图让他们在 Android 上工作时(使用 MediaPlayer 类),我们进入了一个痛苦的世界!我们需要做的是使用 MediaPlayer.seekTo() 找到一种可以在所有 Android 设备上播放并允许帧精确擦洗的视频格式。最初我们的目标是 Android 3.0 及更高版本,但我们可能希望在最初发布后回溯到 2.3.3。这是我到目前为止发现的:
(A) Android 声称 H264“基线配置文件”应该在任何地方都得到支持:(URL)。但是,其中还有许多其他设置可能受支持,也可能不受支持。任何地方都有更细粒度的列表吗?目前我们正在 MP4 容器中转换为 H264。
(B) 我还没有看到可以在不插入关键帧(“帧内帧”)的情况下准确擦除 H264 文件的 Android 设备。iOS 会很高兴地采用没有关键帧的H264 文件并提供准确的擦洗。看来,为了允许准确的擦洗,我们需要为视频的每一帧插入一个关键帧(相关的 ffmpeg 设置是“-g 1”)。这会显着增加文件大小。
(C) 但是,为每一帧插入一个关键帧会导致视频在三星 Galaxy Note 3(我相信是 Snapdragon 芯片组)上根本无法播放。将关键帧减少到每隔一帧或以上似乎有效(ffmpeg 设置“-g 2”)。
总结一下: MediaPlayer.seekTo() 似乎非常依赖于视频格式,并且因设备而异。这是本意吗?无论格式如何,seekTo() 是否应该提供基本行为级别?
什么视频格式将允许在所有 Android 设备(至少 3.0 及更高版本)上进行帧精确的擦除(使用 MediaPlayer.seekTo())?