2012-03-26 13 views
6

再生中に特定の間隔でコールバックを設定しようとしているhtml5ビデオがあります。動画はvideo.play()でjavascriptから再生を開始します。今すぐ私のコードは'loadedmetadata'イベントを待ち受けてから、時間を問い合わせて、それらのコールバックを設定します。モバイルサファリでうまく動作しますが、Android(2.3.4および2.3.7)では動作しません。video.play()までAndroid video.durationが読み込まれない

Androidの場合、実際に有効期限が切れる前に'loadedmetadata'が放出されているようです。これをテストするために、ロードプロセスのすべてのステップで、実際にどこで読み取ることができるかを確認するために、コード内にデュレーションを記録しました。 video.play()まで、そして1つ後に'timeupdate'イベントが発生した場合、使用されているビデオに関係なく、video.durationプロパティは6000です。私はmp4ファイルと3gpファイルでこれをテストしました。これらの条件が満たされると、実際の継続時間が利用可能になります。

同様の問題[1]を持つこの他の投稿が見つかりました。受諾されなかった最高の投票回答は、もともと私がこれを設定した方法であり、iOSでは正常に動作します。受け入れられた答えもうまくいかず、これはWebkitの問題であることを示唆しています。 video.readyStateプロパティをログに記録し、ビデオが再生を開始する前に'4'であることを確認しますが、再生が開始され、最初の'timeupdate'イベントまでは再生できません。

現在の回避策はvideo.durationの値を照会し、video.duration !== 6000の場合にのみイベントコールバックを設定します。これはかなり醜いです、そして、私は、このハックが戻ってくるのを避けるために、その底に行きたいと思います。ここでの議論[2]は、問題がエンコーディングに関連している可能性があると示唆されたようです。つまり、正しくエンコードされていないため、アンドロイドは、ファイルがロードされるか、まったくまったくメタデータを読み取らず、別の方法でデュレーションを計算します。

私はこのクリーナーを作るために何かできますか、それとも今はハックに執着していますか?

[1] Problem retrieving HTML5 video duration

[2] http://www.broken-links.com/2010/07/08/making-html5-video-work-on-android-phones/

+2

私はv.addEventListener( 'durationchange'、repos、false);リスナーを使って変更を追跡しましたが、それはAndroidの多くのWebView/Videoの問題のようです。 – Offbeatmammal

+1

モバイルデバイスには独自の制限があるため、Androidブラウザではデスクトップブラウザの機能をすべて読み込まないため、再生するまで動画が呼び出されず、帯域幅が節約され、メモリやバッファの使用量が削減されます。それはデフォルトで再生し、あなたの目的を果たすべきである1-2秒後にビデオを停止するスクリプトを使用します。 – MarmiK

答えて

0

Idは時間が再帰的に利用可能であるかどうかを確認する関数を呼び出しのsetTimeoutを使用。

このようにして、どのような情報も利用できるようになるとすぐに機能が有効になり、表示時間などが変わります。

関連する問題