7

バックグラウンド:

私は、ユーザーが教育用ビデオを順番に視聴することを要求するWebベースの教育プログラム(重要な場合はDrupal 7を使用)を開発しています。次の動画にアクセスする前に、各動画を完全に視聴していることを確認したいと思います。私はYouTubeAPIにかなり慣れていませんが、PHP開発者ガイドを調べたところ、これを行う方法についての情報が見つかりませんでした。

私はこれを達成するための合理的な方法を受け入れています。ランダムなタイムコードが1つか2つヒットしたかどうか、また映画の再生が終了したかどうかを確認すると、ビデオを見ずにスキップするのがかなり難しくなると思いました。

したがって、これを達成するには、2つのことを理解する必要があります。

  1. 視聴中のビデオが選択したタイムコードに到達したことをサーバーに通知する方法、および
  2. ビデオの終わりに達したときにサーバーに通知する方法。

誰かが私を正しい方向に向けることができれば、私は大いに感謝します。

4

6 に答える 6

3

ビデオプレーヤーがメディアファイルの終わり(または終わり近く)に達したときにサーバーにpingを実行するだけです。

独自の(javascriptまたはflash)ビデオプレーヤーを作成するか、既存のビデオプレーヤーの1つを変更することができます。この手法は、HTML5<video>タグでは機能しません。

于 2012-05-09T15:50:52.700 に答える
1

私は非常によく似たものに取り組んできましたが、iframe api https://developers.google.com/youtube/iframe_api_referenceを使用してカスタムプレーヤーを使用し、デフォルトのクロムを削除して、スキップしないようにすることにしました。 。

// api has been loaded
function onYouTubeIframeAPIReady(){
    var player = new YT.Player(el, {
        videoId: video_id,
        width: 700,
        playerVars: {
            controls: 0,
            modestbranding: 1,
            rel: 0              
        }, 
        events: {
            onStateChange: function(d){
                switch(d.data){
                    case YT.PlayerState.ENDED:
                        // send notification of video ended
                }
            }
        }
    });
}

    // async load of api
var tag = document.createElement('script');
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

この関数は、YouTube APIが完全に読み込まれ、iframeプレーヤーをセットアップしているときに呼び出されます。elはビデオに置き換えるdomオブジェクトであり、video_idロードするビデオのIDです。controls: 0プレーヤーのクロムを隠す魔法のビットです。次に、このonStateChange関数でajaxリクエストを送信したり、レイアウトを変更したり、ビデオの最後で行う必要があることを変更したりできます。

于 2012-09-13T19:01:49.967 に答える
1

FlashおよびJavaScriptPlayerAPIリファレンスには、特に次のように、再生ステータスを取得するための関数が含まれています。

player.getCurrentTime():Number
Returns the elapsed time in seconds since the video started playing.

間違ったAPI参照を調べていましたが、最終的には見つかりました。わーい。

于 2012-05-10T20:27:24.930 に答える
1

YouTube APIを使用すると、「サーバーにpingを実行」できます。

  function onPlayerStateChange(evt) {       
       if (evt.data == 0){
       alert (player.getDuration())
     }
 }

その後、クリップの長さを取得できます。apiをさらに使用すると、ユーザーが開始および停止するタイミングにより、ユーザーがクリップの表示に費やした時間を計算できます。これを期間と比較し、一致する(または十分に近い)場合は報酬をトリガーします。

https://developers.google.com/youtube/js_api_reference

于 2012-05-22T11:15:44.393 に答える
1

html5とJavaScriptを使用している場合は、ビデオ全体または特定の部分が再生されたかどうかをネイティブに確認できます。

Html5のビデオAPIは、再生されたすべての時間範囲を追跡します。<video>.played属性とTimeRangesクラスのドキュメントを見てください。

于 2013-09-06T06:03:31.780 に答える
0

ビデオの最後に認証リンクを配置します。トークンを収集したことを確認する方法としてリンクを使用します。これはチェックポイントの問題を解決せず、視聴者は再生を押して立ち去ることができますが、それはチェックポイントで発生する可能性があります。

YouTubeの動画には、アップローダーインターフェイスのアノテーション機能を使用して、コース中にリンクを挿入できます。過去15秒間程度の注釈にコード化されたリンクをサイトのユーザー認証と組み合わせて、サーバー側の資格情報を作成します。

于 2012-05-09T17:46:59.187 に答える