【问题标题】:How to know when first video frame is on screen using MediaPlayer如何使用 MediaPlayer 知道第一个视频帧何时出现在屏幕上
【发布时间】:2013-07-26 15:19:30
【问题描述】:

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

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

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

OnInfoListener MEDIA_INFO_VIDEO_RENDERING_START - API 是 17,太高了。

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

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

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

【问题讨论】:

  • 你解决了这个问题吗?
  • 不,我没有。我唯一能想到的就是使用 ffmpeg 多次复制第一帧并将其添加到视频的开头。这只是一个理论,虽然还没有通过它。

标签: android video media-player android-videoview android-custom-view


【解决方案1】:

你说得对:

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

不会在第一帧停止。

mediaPlayer.seek(0);

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-06-29
      • 2017-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多