2016-03-02 6 views
7

Chromeで動画を探すときに問題が発生しています。私はconsole.log(video.currentTime)続く、video.currentTime = 5を呼び出すときに関係なく、私は何をすべきか何らかの理由でHTML5ビデオでChromeを検索する

video.seekable.end(0)は常に0

ですが、私はそれがビデオをリセットするように思われ、常に0である参照してください。

私はMP4とVP9ベースのwebm形式の両方を試しましたが、どちらも同じ結果でした。

さらに厄介なことは、Firefoxがすべてを完全に実行していることです。私が知っておくべきChromeについて特別なことはありますか?ここで

は(唯一のFirefoxで動作します)私のコードです:単にvideoDiv.play()を呼び出すと、実際に正しく両方のブラウザでビデオを再生しない

var videoDiv = $(".myvideo").children().get(0) 
videoDiv.load(); 
    videoDiv.addEventListener("loadeddata", function(){ 
    console.log("loaded"); 
    console.log(videoDiv.seekable.end(0)); //Why is this always 0 in Chrome, but not Firefox? 
    videoDiv.currentTime = 5; 
    console.log(videoDiv.currentTime); //Why is this also always 0 in Chrome, but not Firefox? 
    }); 

注:

 <div class="myvideo"> 
     <video width="500" height="300" id="video1" preload="auto"> 
      <source src="data/video1.webm" type="video/webm"/> 
      Your browser does not support videos. 
     </video> 
     </div> 

そして、ここではjavascriptのです。

ムービーファイルが完全にロードされた後、videoDiv.buffered.end(0)も両方のブラウザで正しい値を示します。

答えて

12

...

問題は、サーバー側であることが判明しました。私はすべてのビデオファイルを提供するためにJettyのバージョンを使用していました。 Jettyの簡単な設定はbyte servingをサポートしていませんでした。

FirefoxとChromeの違いは、サーバーがhttp code 206 (partial content)をサポートしていない場合でも、Firefoxがビデオファイル全体をダウンロードして検索できることです。一方、Chromeは、ファイル全体をダウンロードすることを拒否します(実際には小さくない場合を除き、約2〜3MBのように)。

だから、Chromeで動作しているように、HTML5ビデオのcurrentTimeパラメータを取得するには、この問題を持つ誰のHTTPコード206

をサポートするサーバーを必要とする、あなたはカールを使用してサーバの設定を再確認することができます:

curl -H Range:bytes=16- -I http://localhost:8080/GOPR0001.mp4 

これはコード206を返す必要があります。それはコード200を返した場合、Chromeはビデオを追求することはできませんが、Firefoxが原因ブラウザでこの問題を回避するには、なります。

そして最後のヒント:

npm install http-server -g 

そしてローカルフォルダを提供するために、それを実行します:あなたは、部分的なコンテンツをサポートするローカルフォルダのための単純なHTTPサーバーを取得するには、NPMのhttpサーバを使用することができます

http-server -p 8000 
+0

私は似たような問題を抱えていますが、それはMac上だけです。 Chromeは検索を拒否しますが、Firefoxは機能します。私はマシン上でhttp 206互換のサーバを実行しており、ネットワークログに206件のリクエストを見ることができます。たぶん私はSOの新しい質問をする必要があります。あなたは私たちがちょうどChromeで動作するように求める機能のための206のようにリターンコードを送信する必要が –

+0

を言っていますか? – vbNewbie

+0

いいえ、私は、206はサーバーから部分的なコンテンツを取得できるかどうかをチェックする方法だと言っています。独自のサーバーを作成する場合は、プロトコルに準拠する必要があります。 Chromeはこの情報を使用してストリーミングする前に動画全体をダウンロードする必要はありません。それは効率的です。 – Tovi7

0

ビデオタグには、MP4、OGG、WebMの3つの可能性があります。

すべてのブラウザですべてのフォーマットが動作するわけではありません。

WebMはFirefoxでは動作しますがChromeでは動作しないと考えていますので、MP4ファイルを参照する2番目のソースタグを含めることで、MP4とWebMファイルの両方の代替フォーマットを提供する必要があります。

など。 src = "data/video1.mp4" type = "video/mp4"

該当するバージョンがブラウザによって自動的に選択されます。

+0

質問で述べたように、私は実際にChromeでのMP4を使用してみました、そして、それは何の違いが行われていません。また、Googleが全フォーマットの背後にある主要な推進力であるため、Chromeでwebmが動作しないことを嬉しく思います。 – Tovi7

+0

申し訳ありません - あなたは右の両方のカウントにしている - 私は最初の質問をお読みください - はい、Chromeは確かにWebMの対処すべきです。イアンデブリンが正しい答えを持っているようです。 さておき、迅速として、私はH264の形式でないMP4ファイルに問題があった... –

0

私にも同様の問題がありました。私はビデオの終了イベントを聞いて、ビデオの途中にcurrentTimeを設定して、それを連続的にループしていました。 SafariやChromeでは動作しませんでした。

Safari/Chromeには、メディアが現在再生されていない限り、再生ヘッドの位置プロパティが利用できないバグがあると思います。

私の回避策は、ビデオが終了する直前にループを開始し、実際に終了させないことでした。

最初に再生を開始してテストしてから、機能を実行してSafari Chromeで動作するかどうかを確認してください。

+0

これは素晴らしい提案ですが、残念ながらそれは私の特定の問題のための助けにはなりませんでした。しかし、ありがとう! – Tovi7

1

loadeddataの代わりにcanplaythroughを待つと動作します。

this codepen exampleを参照してください。

それはそれを把握するために私にしばらく時間がかかった
+0

私はこれを試してみましたが、私はその財産についても気づいていませんでした。素晴らしい提案ですが、残念ながらそれは私のケースを修正しませんでした。私は新しい:-)が – Tovi7

+0

何かを学んだ原因あなたはすでにあなたの提案を使用していたので、上記のように、あなたの桟橋の構成を設定でしたが、私はしかし、問題を解決するために管理しましたが、それはサーバ側の問題であることが判明...私はあなたの答えをupvoted – vbNewbie

関連する問題