0

MediaPlayer 类的 seekTo 有助于确定起点。如何设置终点?MediaPlayer 类中似乎没有任何可用的方法。例如,我只想播放 10 秒总媒体中 3 到 6 秒的部分。我确实看到了设置睡眠定时器和中断 MediaPlayer 的解决方案。还有其他更好的解决方案吗?

4

3 回答 3

0

可以使用睡眠计时器,但使用单独的线程可能更容易。这样您就不必担心您的 UI 线程正在做什么或中断它。

只需getCurrentPosition()在线程循环中使用来监视播放时间。当它到达目标“结束”时间时,就是stop()它。向线程添加睡眠延迟也是一个好主意。您不需要像循环运行一样快地检查它,也许每秒 5-10 次就可以了。

于 2013-09-18T12:57:28.430 回答
0

如果您没有找到答案,您可以尝试使用打开 html5-JS 网站的 web 视图来解决解决方案。

这是一个不完整的快速示例。(使用 jsfiddle 代码)

http://jsfiddle.net/mNPCP/5/

<audio id="audio2" 
   preload="auto" 
   src="http://upload.wikimedia.org/wikipedia/commons/a/a9/Tromboon-sample.ogg" >

   <p>Your browser does not support the audio element</p>
</audio>

<script>
  myAudio=document.getElementById('audio2');
  myAudio.addEventListener('canplaythrough', function() {
    this.currentTime = 12;
    this.play();
  });
</script>

从这个 Stackoverflow 问题

这不是最好的解决方案,但也许可以帮助一些事情..

祝你好运!

于 2013-09-18T13:19:41.433 回答
0

可能有点晚了:)但这是我解决问题的方法

private void singlePlayAudio(int start, int duration) {
    // duration = end_part - start_part;

    //in my case i need to pause
    //if other players are playing
    pauseMainPlayer();
    twoMediaPlayersPause();

    final boolean isPlaying = singleMediaPlayer.isPlaying();
    if (isPlaying) {
        singleMediaPlayHandler.removeCallbacks(singleAudioThread);
        singleMediaPlayer.pause();
        singleMediaPlayer.seekTo(start);
    }
    singleAudioThread = () -> {
        singleMediaPlayer.pause();
        singleMediaPlayer.seekTo(start);
        autoViewPagerScroller();
    };
    singleMediaPlayer.seekTo(start);
    singleMediaPlayer.start();
    singleMediaPlayHandler.postDelayed(singleAudioThread, duration);
}
private final Handler singleMediaPlayHandler = new Handler(Looper.getMainLooper());
private  Runnable singleAudioThread;
于 2022-02-13T10:12:33.607 回答