0

Androidタブレットに読み込んでいるページにビデオ要素があります。次のイベントリスナーを備えたカスタム再生ボタンがあります。

play_button.addEventListener("click", function () 
   { video.play(); tap_to_play.innerHTML = ''; 
     video.currentTime = offset; 
     console.log(video.currentTime); }, false);

初めてボタンを押すと、間違った時間にスキップします。ビデオが約1400にスキップするように見えますが、ログに記録されるcurrentTimeは100になります。すでに再生しているときにボタンをもう一度押すか、一時停止してボタンをもう一度押すと、正しい時刻になります。初めて正しい場所にスキップするにはどうすればよいですか?

4

1 に答える 1

1

「シーク可能な」 TimeRange オブジェクトを使用し、ビデオ ファイルが実際にその位置までシークできるかどうかを判断できます。そうでない場合は機能しません。true目的の時間が範囲内にある場合に返される単純な関数を次に示します。

function isSeekable(video, time) {
  if(video.seekable && video.seekable.length>0) { 
    for(var i=0, l=video.seekable.length; i<l; i++) {
      if(time>video.seekable.start(i) && time<video.seekable.end(i)) 
        return true;
    }
  }
  return false;
}

Android 4.1 で動作する例については、以下の jsbin を確認してください。3.1 でも動作する可能性がありますが、2.3 以下をサポートするソリューションを見つけるのは難しいでしょう。

http://jsbin.com/udovax/1/edit

(接続するためのより良いイベントを見つけることに興味があります-私が使用したタイムアウトは、迅速で醜いハックでした)

于 2013-02-27T20:26:56.527 に答える