2012-05-09 37 views
6

背景:

我正在開發一個基於網絡的教學程序(使用Drupal 7,如果有的話),要求用戶按順序查看教育視頻。我想確保他們在訪問下一個視頻之前全部查看每個視頻。我對YouTube API非常不熟悉,但我梳理了PHP開發人員指南,並沒有找到任何有關如何執行此操作的信息。如何確保用戶觀看整個視頻?

我接受任何合理的方式來完成這一點。我在考慮檢查一個或兩個隨機時間碼是否被擊中,以及電影是否完成了播放,這將使得在沒有觀看視頻的情況下跳過它是相當困難的。

因此,要做到這一點,我需要弄清楚兩件事情:

  1. 如何讓服務器知道什麼時候被觀看的視頻已達到選定的時間碼,以及
  2. 如何讓服務器知道什麼時候視頻已結束。

如果有人能指出我在正確的方向,我將不勝感激。

+7

這對你的用戶來說是一件殘酷的事情,但我想你可以在下面的視頻中加入鏈接,將其視爲每個視頻結尾處可怕的可點擊註釋之一? – meagar

+0

我其實寫了類似的音頻文件。你應該看看寫一個自定義的JavaScript HTML視頻播放器或Flash視頻播放器。 –

+0

@meagar - 我需要根據視頻是否被觀看來分配角色,所以我需要服務器本身能夠被告知事件。 – beth

回答

1

使用YouTube API,您可以「ping服務器」

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

然後,您可以得到剪輯的持續時間。進一步使用api - 當用戶啓動和停止時應該允許你計算出用戶觀看剪輯的時間。 比較這個持續時間,如果它匹配(或足夠接近)觸發獎勵。

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

3

您只需在視頻播放器到達媒體文件末尾(或接近末尾)時ping服務器。

您可以編寫自己的(javascript或flash)視頻播放器或修改其中一個現有的視頻播放器。該技術不適用於HTML5 <video>標籤。

+0

如何?我想你可以用Youtube API做到這一點 –

+0

謝謝!你有關於如何觸發ping的任何信息?這是我在API/Dev指南中錯過的東西,還是有其他文檔介紹它?此外,這是否只能在視頻結束時完成,或者預先選擇的時間碼是否也會觸發ping? – beth

+0

如果您在最後/最後ping命令以驗證用戶是否已觀看完整視頻,則任何人都會跳到最後。沒有? –

0

在視頻結尾處設置驗證鏈接;使用鏈接作爲驗證他們收集令牌的方式。這不會解決檢查點的問題,觀衆可以按下播放和走開,但這可能會發生在檢查點。

Youtube視頻可以在課程中使用上傳器界面中的註釋功能插入鏈接。在過去的十五秒左右,將註釋中的編碼鏈接與站點的用戶身份驗證相結合,以創建服務器端憑證。

+1

我可以看到,作爲解決方案的一部分,但它仍然不會阻止跳到最後。我也不認爲讓網站從視頻中發現該鏈接是否顯示出來比使用API​​調用要容易得多或者更有效。 – beth

1

的Flash和JavaScript 球員 API引用包括功能,讓Playback Status,特別是:

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

我一直在尋找通過錯誤的API的參考,但最終發現了它。好極了。

0

我一直工作在相當類似的事情,我已經決定使用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請求,或更改您的佈局或視頻結尾處需要做的任何操作。

1

如果您使用html5和JavaScript,您可以本機檢查以查看是否播放了整個視頻或某些部分。

Html5的視頻API跟蹤所有已播放的時間範圍。查看<video>.played屬性和TimeRanges類的文檔。