由MediaPlayer和MediaMetadataRetriever检索的不同帧

问题描述

我正在使用 androidx.media2.player.MediaPlayer 在我的GlSurfaceView上显示视频。通常的流程是将表面纹理附加到mediaPlayer,调用mediaPlayer.seekTo(seekPos,MediaPlayer.SEEK_CLOSEST),等待onFrameAvailable()回调,然后通过surfaceTexture.updateTexImage()获取框架并将其呈现在View上。一切正常。

此外,我使用 android.media.MediaMetadataRetriever ,因为有时我需要一些帧作为位图。我只是调用retricer.getFrameAtTime(seekPos * 1000L,OPTION_CLOSEST)来获取帧并进行处理。尽管有点慢,它也可以正常工作。

但是有时由MediaPlayer和MediaMetadataReceiver检索到的帧不匹配。看起来它们获得了两个连续的帧,并且您可以清楚地看到它们之间的“运动”,尤其是在视频显示运动对象的情况下。即使我分别使用标志SEEK_CLOSEST和OPTION_CLOSEST,mediaPlayer.seekTo()和retricer.getFrameAt()是否有可能获得不同的帧吗?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)