微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – 与mediaplayer和seekTo的奇怪行为

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

现在,问题是:

我不希望视频从头开始,而是从后面的位置开始.所以我做了一个寻求(16867).由于seekTo是异步的,我将mediaplayer(player.start())的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开发者列表的任何回复,并在网上发现了类似的问题,我得出结论,这是一个错误.我在http://code.google.com/p/android/issues/detail?id=9135提交了一份错误报告

原文地址:https://www.jb51.cc/android/430281.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐