我进行了一些研究,但找不到任何解决此问题的方法:我想播放 aMediaPlayer
并在给定时间暂停/停止它..(即:从第 6 秒播放到第 17 秒)。
我知道我可以用方法设置它的起点seekTo()
,但是我可以通过设置一个终点来暂停/停止它的播放(当然,在达到文件结束限制之前)?
我进行了一些研究,但找不到任何解决此问题的方法:我想播放 aMediaPlayer
并在给定时间暂停/停止它..(即:从第 6 秒播放到第 17 秒)。
我知道我可以用方法设置它的起点seekTo()
,但是我可以通过设置一个终点来暂停/停止它的播放(当然,在达到文件结束限制之前)?
有不同的方法可以做到这一点,这里有一个:
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 秒)。
您可以使用CountDownTimer
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
}
public void onFinish() {
mp.stop;
mp.relese();
}
}.start();
我知道这已经有了答案,但对于任何想要有效地为带有控件的视频执行此操作的人来说,这是一个替代方案。
我看到了一个不同的答案,涉及不断检查位置。
请注意,这假设您不需要一个视频的很多不同部分。即使在这种情况下,我也建议遵循以下内容。
如果您只需要播放视频的一部分并希望它在某个地方结束,那么为什么不使用免费的视频编辑软件并剪辑结尾呢?您仍然可以从任何地方使用它来启动它,seekTo()
但这样您就不必浪费资源检查某个位置(带控件的视频)。
如果您没有视频播放器控件,则接受的答案将起作用。但是,如果您确实有播放器控件,那么它不会因为用户可以暂停和播放视频。
videoView.start() 和准备播放的视频之间存在时间差,取决于视频格式,这些时间差可能超过 10 帧。
所以最好的方法是在 OnPreparedListener 内部启动计时器以最小化时间差,或者甚至更多地获取当前播放时长并在该点设置一个 postDelayed 计时器。