【问题标题】:Android: attempt to call getduration without a valid mediaplayerAndroid:尝试在没有有效媒体播放器的情况下调用 getduration
【发布时间】:2011-04-19 02:22:09
【问题描述】:

我使用下面的代码从 URL 播放 MP4 视频(H.264、AAC 编解码器)(该 URL 非常好,没有重定向,404 或任何东西)。但是,我不断收到错误消息“尝试在没有有效媒体播放器的情况下调用 getduration”或 ERROR/MediaPlayer(382): error (1, -2147483648)。有谁知道如何解决它?谢谢

 VideoView video = (VideoView) findViewById(R.id.myvideo);

 Intent videoint=getIntent();
 String url =  videoint.getStringExtra("url"); //The url pointing to the mp4
 video.setVideoPath(url);
 video.requestFocus();
 video.setMediaController(new MediaController(this));
 video.start();

【问题讨论】:

    标签: android


    【解决方案1】:

    就我而言,问题在于搜索栏。在我的服务类中我改变了:

    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.start();}
    
    public getDur() { return mediaPalyer.getDuration} 
    

    int dr; //at the top inside Service class
    
    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.start();
        dr = player.getDuration();}
    
    public getDur() { return dr}
    

    【讨论】:

      【解决方案2】:

      从 onPrepared 回调中检索持续时间...这将确保在您尝试获取视频持续时间之前正确加载视频。

      final VideoView video = (VideoView) findViewById(R.id.videoplayer);
                  final MediaController controller = new MediaController(this);
      
                  video.setVideoURI(Uri.parse(getIntent().getStringExtra("url")));
                  video.setMediaController(controller);
                  controller.setMediaPlayer(video);
                  video.setOnPreparedListener(new OnPreparedListener() {
      
                         public void onPrepared(MediaPlayer mp) {
                             int duration = video.getDuration();
                             video.requestFocus();
                             video.start();
                             controller.show();
      
                         }
                     });
      

      【讨论】:

      • 这是一个相当普遍的错误,可能是任意数量的错误。上面进行了编辑以反映您可以尝试的一些新事物
      • @Joe MediaPlayer 怎么样?有什么建议可以解决这个错误吗?
      【解决方案3】:

      确保在设置和准备好媒体播放器后设置所有与它交互的控件。例如:

                  mediaPlayer.setDataSource(dataSource);
          mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
          mediaPlayer.setOnCompletionListener(this);
          mediaPlayer.prepare(); 
          progressBar = (ProgressBar) findViewById(R.id.progbar);
          progressBar.setVisibility(ProgressBar.VISIBLE);
                  progressBar.setProgress(0);
                  progressBar.setMax(mp.getDuration());
              mediaPlayer.start();
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多