我正在尝试开发一个 android 应用程序来播放原始文件夹中的视频。正在使用自定义控制选项。 getduration() 返回 -1,因此我无法为我的搜索栏设置最大值。这是我的代码

private MediaController mediaController;
private VideoView videoView;
public TextView duration;
private int timeElapsed=0,finalTime=0;
private int forwardTime=2000, backwardTime=2000;
private SeekBar seekBar;
private Handler durationHandler = new Handler();

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initialize();

}
public void initialize()
{
    videoView =(VideoView)findViewById(R.id.videoView1);


    mediaController= new MediaController(this);
    mediaController.setAnchorView(videoView);


    String
    uri1="android.resource://"+getPackageName()+"/"+R.raw.materialdesign;

    Uri uri = Uri.parse(uri1);

    videoView.setMediaController(null);
    videoView.setVideoPath("android.resource://" + getPackageName() + "/" +
    R.raw.materialdesign);
    Log.e("finalTime", "" + finalTime);
    finalTime = videoView.getDuration();
    Log.e("finalTime", ""+finalTime);
    Log.e("finalTime", ""+videoView.getDuration());
    duration = (TextView) findViewById(R.id.songDuration);
    seekBar = (SeekBar) findViewById(R.id.seekBar);

    seekBar.setMax(finalTime);
    seekBar.setClickable(false);

    videoView.requestFocus();


}

最佳答案

如果您还没有找到解决方案,如果视频未处于播放状态,VideoView.getDuration() 将返回 -1。视频在准备好之前不会处于播放状态。所以设置URI后直接调用VideoView.getDuration()并不能保证视频已经准备好了。

我通过查看 VideoView 的来源发现了这一点:

@Override
public int getDuration() {
    if (isInPlaybackState()) {
        return mMediaPlayer.getDuration();
    }

    return -1;
}

解决方案是为您的 VideoView 设置一个 OnPreparedListener,并在视频准备好后获取持续时间。然后您可以使用 VideoView.getDuration()MediaPlayer.getDuration() ,它们几乎相同。

解决方案:
videoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        int duration = mp.getDuration();
        int videoDuration = videoView.getDuration();
        Log.d(TAG, String.format("onPrepared: duration=%d, videoDuration=%d", duration,
            videoDuration);
        }
        seekBar.setMax(videoDuration);
    });

关于android - videoview.getDuration() 返回 -1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31161290/

10-08 23:22