2016-01-25 6 views
0

Здесь мы хотим воспроизвести другое видео, где основное видео доходит до определенного момента времени. Поскольку videoview.seekTo не может достичь того, чего мы хотим, нам нужно запустить поток, чтобы уловить момент времени с помощью videooview.getCurrentPosition, что точно, как мы все знаем. На самом деле мы можем использовать start() и pause() вместо использования seekTo (когда какое-то другое видео готовится к запуску или только что закончилось), чтобы видео продолжалось с правильной точной временной точки. Следующее - наше усилие.Есть ли лучший способ для просмотра видео.seekto()?

private VideoView vv; 
public void load(String url) { 
    if (null != proxy) 
     proxy.destory(); 
    proxy = new HttpGetProxy1(9980); 
    this.url = proxy.getLocalURL(url, true); 
    vv.setVideoPath(this.url); 
    vv.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { 
    @Override 
    public void onCompletion(MediaPlayer mp) { 
      Log.e("onCompletion"); 
      state = VideoState.stop; 
      ivStart.setVisibility(View.VISIBLE); 
      ivStop.setVisibility(View.INVISIBLE); 
      ivPause.setVisibility(View.INVISIBLE); 
      if (null != callback) 
       callback.onComplete(); 
     } 
    }); 
    vv.setOnPreparedListener(new OnPreparedListener() { 
     @Override 
     public void onPrepared(MediaPlayer mp) { 
     } 

    }); 
    vv.setOnErrorListener(new OnErrorListener() { 

     @Override 
     public boolean onError(MediaPlayer mp, int what, int extra) { 
      Log.e("setOnErrorListener:" + what + "-" + extra); 
      load(ComponentVideo1.this.url); 
      return false; 
     } 
    }); 
    clearTimer(); 
    if (null == callback || null == questions || questions.size() == 0) 
     handler.post(runnable); 
} 

private Handler handler = new Handler(); 

private Runnable runnable = new Runnable() { 

    public void run() { 
     timeFormat.setText(getTimeFormat(vv.getCurrentPosition()) + "/" + getTimeFormat(vv.getDuration())); 
     handler.postDelayed(this, 100);  
     if (null == vv || null == callback || null == questions || questions.size() == 0 || index >= questions.size()) 
      return; 
     if (vv.getCurrentPosition() < questions.get(index).getMsec()) 
      return; 
     callback.call(questions.get(index++)); 
    } 
}; 

Для достижения этой цели, в работоспособной, время postDelay была снижена с 500 до 100 (0.5s до 0,1с) .Но есть огромное давление работает метод каждый 0.1s. Более разочаровывает то, что нам нужно делать изменения на каждом видеоресурсе, который мы собираемся сыграть

ответ

0

Снюплер этого кода от прослушивателя кнопки мыши в onCreate. Он используется для поиска и приостановки небольшого количества времени, примерно в несколько сотен миллисекунд. Он обновляет текстовое поле до тех пор, пока видеоролик не покажет нужное время, а затем остановится.

public void onClick(View v) { 
     if (!checkBox1.isChecked()&&loaded1) { 
      if (frame1Advanced) msec = videoView.getCurrentPosition(); 
      msec += msecAdd; 
      videoView.requestFocus(); 
      videoView.start(); 
      while (videoView.getCurrentPosition() < (msec-20)) { 
       textView1.setText(getMilliToString(videoView.getCurrentPosition())+ "+" + (int)(videoView.getCurrentPosition() - msec)); 
      } 
      videoView.pause(); 
+0

Спасибо и за ваш ответ, но, к сожалению, мы должны поставить слушатель на основном видео и пассивно привел к новому video.The добровольного событию не может сравниться it.If мы берем «а» цикл для работоспособных. .. это, кажется, прекрасный выбор, попробуем. – dougisadog

Смежные вопросы