4

我正在尝试创建一个绑定了 Mediaplayer 的自定义视图。我想要发生的是,一旦在屏幕上呈现第一帧,MediaPlayer 将暂停一两秒钟,然后完成视频。我在试图弄清楚第一帧何时出现在屏幕上时遇到了问题。我试过使用:

MediaPlayer.start() 然后在 Mediaplayer.pause() 之后 - 这不起作用,因为系统需要时间来加载视频并且当我这样做时屏幕是黑色的。

OnBufferingUpdateListener - 不起作用,因为它仅适用于来自互联网的视频

OnInfoListener MEDIA_INFO_VIDEO_RENDERING_START - API 是 17,太高了。

onDraw 在自定义视图中 - 目前正在测试,我不确定如何知道何时绘制视频帧。

我目前正在做的是在我的代码中设置一个计时器以等待 50 毫秒,然后在计时器完成后暂停视频一段时间。然而,这只是一个快速的解决方案,而不是一个长期的解决方案。

我觉得解决这个问题的唯一方法是设置某种自定义侦听器,或者使用一种在视频帧出现在屏幕上时调用的方法。但是,我的问题是我不知道该听什么,而且我还没有找到在视频开始播放时调用的方法。因此,我们将不胜感激任何解决此问题的帮助。

4

2 回答 2

1

你是对的:

mediaPlayer.start();
mediaPlayer.pause();

不会在第一帧停止。

mediaPlayer.seek(0);

更新并显示第一帧,并使其处于暂停状态。

于 2015-02-11T15:45:35.313 回答
0

我有类似的要求(最低 API lvl 15,显示第一帧然后暂停)。

我最终使用了来自https://stackoverflow.com/a/17450763/968451的答案,并在方法中添加了一些代码onSurfaceTextureUpdated来暂停MediaPlayer第一次调用。

于 2016-03-03T10:27:30.857 回答