我研究了一下,但找不到任何解决这个问题的方法:
我想播放一个MediaPlayer
并在给定时间暂停/停止它。(即:从第二个6到第二个17)。
我知道我可以使用seekTo()
方法设置起点,但我可以通过设置终点(当然,在达到文件结束限制之前)暂停/停止播放吗?
答案 0 :(得分:17)
有不同的方法可以做到这一点,这里有一个:
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秒)。
答案 1 :(得分:3)
我认为您可以创建Timer并直接从其任务中调用seekTo()。然后在该Timer Task中调用stop()/ pause()。
也许this帖子对您有所帮助。
或者你可以使用处理程序完成这项任务,就像Ken Wolf向你展示的那样。
祝福。
答案 2 :(得分:1)
您可以使用CountDownTimer
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
mp.stop;
mp.relese();
}
}.start();
答案 3 :(得分:0)
我知道这已经有了答案,但对于想要有效控制视频的人来说,这里有一个替代方案。
我看到了一个不同的答案,不断检查位置。
请注意,这假设您不需要一个视频的很多不同部分。即使在这种情况下,我建议遵循以下内容。
如果您只需要播放视频的一部分并希望它在某处结束,那么为什么不使用免费的视频编辑软件并剪辑结束?您仍然可以使用seekTo()
从任何地方启动它,但这样您就不必浪费资源检查某个位置(带控件的视频)。
如果您没有视频播放器控件,则接受的答案将起作用。但是如果你确实有播放器控件那么它就不会因为用户可以暂停和播放视频了。
答案 4 :(得分:0)
videoView.start()和准备播放的视频之间的时差取决于视频格式,这些时差可能超过10帧。
因此,最好的方法是在OnPreparedListener中启动计时器以最小化时差,或者更多地获取当前播放持续时间并在此时设置postDelayed计时器。