7

我进行了一些研究,但找不到任何解决此问题的方法:我想播放 aMediaPlayer并在给定时间暂停/停止它..(即:从第 6 秒播放到第 17 秒)。

我知道我可以用方法设置它的起点seekTo(),但是我可以通过设置一个终点来暂停/停止它的播放(当然,在达到文件结束限制之前)?

4

5 回答 5

20

有不同的方法可以做到这一点,这里有一个:

int startFrom = 6000;
int endAt = 11000;

MediaPlayer mp;

Runnable stopPlayerTask = new Runnable(){
    @Override
    public void run() {
        mp.pause();
    }};

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    mp = MediaPlayer.create(this, R.raw.my_sound_file);  
    mp.seekTo(startFrom);
    mp.start();

    Handler handler = new Handler();
    handler.postDelayed(stopPlayerTask, endAt);
}

媒体播放器将在 6 秒后开始播放并在 11 秒后暂停(在第 17 秒)。

于 2013-06-21T09:08:20.120 回答
3

我认为您可以创建Timer并直接从其任务中调用 seekTo() 。然后在该定时器任务中调用 stop()/pause()。

也许这篇文章会对你有所帮助。

或者您可以使用处理程序来完成此任务,就像 Ken Wolf 向您展示的那样。

最良好的祝愿。

于 2013-06-21T09:14:29.733 回答
2

您可以使用CountDownTimer

new CountDownTimer(30000, 1000) {

     public void onTick(long millisUntilFinished) {

     }

     public void onFinish() {
         mp.stop;
         mp.relese();
     }
  }.start();
于 2013-06-21T09:09:26.407 回答
0

我知道这已经有了答案,但对于任何想要有效地为带有控件的视频执行此操作的人来说,这是一个替代方案。

我看到了一个不同的答案,涉及不断检查位置。

请注意,这假设您不需要一个视频的很多不同部分。即使在这种情况下,我也建议遵循以下内容。

如果您只需要播放视频的一部分并希望它在某个地方结束,那么为什么不使用免费的视频编辑软件并剪辑结尾呢?您仍然可以从任何地方使用它来启动它,seekTo()但这样您就不必浪费资源检查某个位置(带控件的视频)。

如果您没有视频播放器控件,则接受的答案将起作用。但是,如果您确实有播放器控件,那么它不会因为用户可以暂停和播放视频。

于 2015-03-11T22:18:17.520 回答
0

videoView.start() 和准备播放的视频之间存在时间差,取决于视频格式,这些时间差可能超过 10 帧。

所以最好的方法是在 OnPreparedListener 内部启动计时器以最小化时间差,或者甚至更多地获取当前播放时长并在该点设置一个 postDelayed 计时器。

于 2016-01-15T03:57:21.647 回答