逐帧播放视频

8

我希望制作一个包含逐帧播放功能的应用程序。我猜想使用标准的Android工具不太可能实现。我尝试了VideoView和seekTo(current + 1000/framerate)方法,但它不起作用(我猜测它不能在暂停的视频上寻找)。我的问题是:我需要学习和使用什么工具和/或库才能使其成为可能?我是Android初学者,之前没有涉及过视频渲染,因此我对此的了解非常有限。


1
请查看MediaMetadataRetriever.getFrameAtTime()。它允许您获取特定的帧。 - Inon Stelman
1
@inistelm 我试过了,但似乎速度不够快,需要大约2-3秒才能更换帧,这绝对太长了。 - kborkows
你可以尝试提前缓存一些帧,这样对用户来说看起来就是无缝的。 - Inon Stelman
@inistel,这可能有效,但无论如何我需要另一个解决方案,因为我也想正常播放视频。就像PC上的Media Player Classic一样,您可以正常播放视频,但可以暂停并逐帧观看。 - kborkows
嗨,你找到解决办法了吗?我现在也在为同样的问题苦苦挣扎。 :-/ - Jerry
1个回答

3
几年过去了,但这个问题仍然存在。
关于此话题的简短回顾:假设您有一个压缩视频,像mp4文件。您所要求的是逐帧播放,但由于压缩,实际上并没有这些帧(请参见此维基中的i、p和b帧)。因此,Android需要为您生成这些帧。 这种生成可能远非最佳(在我的案例中跳过了约3%的帧),并且可能不受某些设备支持,因为使用了不同的编解码器。
如果您打算运行一些算法,请首先提取每个帧作为jpg图像,然后逐帧读取它们。
我使用了hiteshsondhi88的这个 ffmpeg封装程序来完成提取。它非常易于使用,并且运行流畅。
如果你还想用纯Java,那么Fadden的工作做得非常出色。这里有几个示例如何使用媒体编解码器并获取帧。
此外,我写了一个小例子,可以在我的Git存储库中找到。
还有一个关于另一个StackOverflow问题的讨论,但我还没有试过。

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