4

Video.js をプロジェクトに統合していますが、いくつかの問題があります。

私はそれをHTMLに次のように持っています:

<video id="vidView" class="video-js vjs-default-skin" width="320" height="320" 
   poster="/siteImages/Dummy.png" preload="auto">
   <source type="video/mp4" src="" \>
</video>

そして、私のjavascriptでソースをロードして再生することができます。

var vidPlayer = _V_("vidView");
vidPlayer.src({ type: "video/mp4", src: vidlink });

vidPlayer.play();

プログラムでこれを行うだけで問題が発生しました。ソースと再生の毎秒のロードが機能します。video.js の準備が整う前に再生しようとしていたのではないかと考えたので、リスナーを使用して適切なタイミングで再生を開始しようとしました。

特定のイベントがまったく発生しないことがわかりました。「loadedalldata」イベントまたは「loadeddata」から何も取得できません。「loadstart」イベントは少なくとも発生するので、そこに .play() コマンドを入れます。

vidPlayer.addEvent("loadstart", function(){ console.log("LOAD START Fired" );
  var myPlayer = this;
  myPlayer.play(); 
} );

しかし、それはまだ信頼できません。コンソールに「再開しようとしています!」というメッセージが表示されます。数回。いくつかのビデオを再生しますが、時々動かなくなります。

「loadeddata」イベントを発生させる際に何か不足していますか?

また、関連する Q - イベント リスナーを削除するための構文が次のようにドキュメントに記載されていることに気付きました。

myPlayer.removeEvent("イベント名", myFunc);

そうですか?「myFunc」の部分が冗長なようで、ドキュメントのコピー/貼り付けエラー なのか、それとも正しい構文なのか疑問に思っています。

事前にt​​hx。

4

2 に答える 2

12

私と同じ問題に遭遇したのではないかと思います。ブラウザーが (Flash フォールバックではなく) HTML5 ビデオを使用している場合、loadedmetadataやなどの一部のイベントは、 loadeddataVideo.js がイベント リスナーをバインドする前に発生する場合があります。

これは、プリロードを行っている場合に特に当てはまり、ビデオのロード開始と Video.js の初期化の間に遅延があります。また、キャッシュされたコピーがある場合にも発生するようです。そのため、2 回目の更新ごとに動作します (キャッシュを無効にします)。

<head>解決策は、ドキュメントの下部ではなく、ビデオの初期化をスローすることです。それが理想的でない場合 (私たちにとってはそうではありませんでした)、イベント リスナーを に追加し<head>、プレーヤーを初期化した後にそれをチェックしました。例えば

<head>

<script>
var loadedmetadata = false;
if (window.addEventListener) {
    window.addEventListener('loadedmetadata', function(ev) {
            loadedmetadata = true;
    }, true);
}
</script>

そして、後でスクリプトで:

if (loadedmetadata === true && videoPlayer.techName === 'html5') {
    // call the callback you would have attached to
    // the event listener.
} else {
    // add event listener here
]

window.addEventListenerは IE7/8 ではサポートされていませんが、とにかく HTML5 ビデオをサポートしていないため問題ありません。IE9 はwindow.addEventListenerHTML5 ビデオをサポートしているため、期待どおりに動作します。

また、 Video.js オブジェクトを初期化するときに Flash プレーヤーが作成されるため、イベントが以前に発生していないことを確認しますtechNamehtml5

于 2013-05-03T00:30:40.937 に答える
1

loadeddata再生が始まる前に必ずしも発火するとは限りません。Flash ではそうではありません。HTML5 では、イベントは video 要素から中継されるため、ブラウザの動作に依存します。

loadedalldataこれはビデオ全体がダウンロードされるときであるため、再生が開始される前に発生する可能性はほとんどありません。

複数の関数をイベントにバインドできた可能性があるため、イベントから削除する関数を指定します。

vidPlayer.addEvent("play", onPlay1 );
vidPlayer.addEvent("play", onPlay2 );
vidPlayer.removeEvent("play", onPlay1 ); // onPlay2() would still be executed
于 2013-05-01T13:06:38.830 に答える