2

我们有一个 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())?

4

2 回答 2

0

MediaPlayer不太可能在不久的将来随时为您提供您想要的东西。底层的原生播放器在某些方面还比较不成熟,更何况H.264因为专利问题已经在谷歌(和其他地方)失宠了。

您可能想研究在 Android 上使用 ffmpeg 本身。请参阅此处以获得一些帮助。在 Android 上使用 ffmpeg 并不少见,所以有很多关于如何做到这一点的信息。

将视频制作为所有 i 帧似乎是一种可怕的浪费。如果我是你,我会不惜一切代价避免这种情况。

于 2013-11-07T14:33:00.590 回答
0

3gp 对我来说很好用。但是,视频似乎重新开始了几帧。

于 2015-07-08T18:26:09.497 回答