我正在实现自定义视频播放器,因为我需要自定义视频控件。我有一个只有一个 Activity 的应用程序,启动后应立即开始播放视频。

现在,我遇到的问题是:

我不希望视频从头开始,而是从更高的位置开始。因此,我做了一次seekTo(16867)。由于seekTo是异步的,因此我将mediaplayer的开始调用(player.start())放在onSeekCompleteListener的onSeekComplete中。

我遇到的奇怪行为是,我可以从一开始就观看/收听视频几毫秒,然后才实际将其从所需位置播放/跳转到想要的位置。
但是-另一方面-我在player.start之前调用的Log输出返回了我想要的正确位置16867。


以下是相关的代码部分,完整的类位于http://pastebin.com/jqAAFsuX

(我在Nexus One/2.2 StageFright上)

private void playVideo(String url) {
    try {
        btnVideoPause.setEnabled(false);
        if (player==null) {
            player=new MediaPlayer();
            player.setScreenOnWhilePlaying(true);
        }
        else {
            player.stop();
            player.reset();
        }
        url = "/sdcard/myapp/main/videos/main.mp4";  // <--- just for test purposes hardcoded here now
        player.setDataSource(url);
        player.setDisplay(holder);
        player.setAudioStreamType(AudioManager.STREAM_MUSIC);
        player.setOnCompletionListener(this);
        player.setOnPreparedListener(this);

        player.setOnSeekCompleteListener(new MediaPlayer.OnSeekCompleteListener() {
            public void onSeekComplete(MediaPlayer mediaPlayer) {
                    Log.d("APP", "current pos... "+ player.getCurrentPosition() );
                    player.start();          // <------------------ start video on seek completed
                    player.setOnSeekCompleteListener(null);
                }
        });
        player.prepareAsync();
    }
    catch (Throwable t) {
        Log.e(TAG, "Exception in btnVideoPause prep", t);
    }
}

public void onPrepared(MediaPlayer mediaplayer) {
    width=player.getVideoWidth();
    height=player.getVideoHeight();
    if (width!=0 && height!=0) {
        holder.setFixedSize(width, height);
        progressBar.setProgress(0);
        progressBar.setMax(player.getDuration());
        player.seekTo(16867);                   // <------------------ seeking to position
    }
    btnVideoPause.setEnabled(true);
}

最佳答案

由于我也没有收到来自Android开发人员列表的任何答复,并且在网络上发现了类似的问题,因此我认为这是一个错误。我在ojota提交了错误报告

10-08 03:44