2011-12-07 76 views
13

我期待了解如何構建一個Web應用程序,允許多個用戶在他們的計算機上同步查看相同的YouTube視頻。例如,synchtube.comwatch2gether.com如何在多個客戶端上同步播放YouTube視頻?

我正在尋找一個簡單的方法,可以使用通用的技術,如PHPjQueryApache實施。我目前正在考慮沿着輪詢方式(或彗星長輪詢,但需要更復雜的服務器設置,我希望避免),類似於Ajax聊天應用程序的實現方式 - 即客戶端不斷檢查服務器以查看哪些視頻正在玩。不過,我懷疑這裏會有延遲問題,所以視頻不會完全同步。我想不出更好的方法。

對於開發人員社區,任何有關方法或代碼片段的幫助都非常感謝!

+0

我能想到的唯一的事情是讓每個用戶選擇準備好。一切準備就緒後,將視頻推送到所有人。我會用php來研究一個pub/sub服務。我不確定你在瀏覽什麼瀏覽器,但是我發現各種websocket技術對於pub/sub都非常方便。大多數現代瀏覽器都支持這一功能。 – agmcleod

+1

使用服務器來同步客戶端。然後,使用YouTube JavaScript播放器API播放視頻。見[這個答案](http://stackoverflow.com/questions/7443578/youtube-iframe-api-how-do-i-control-a-iframe-player-thats-already-in-the-html#7513356)爲一個簡單,易於理解的方法來播放視頻。對於更復雜的調用,例如獲取玩家的狀態和事件,請參閱[本答案](http://stackoverflow.com/questions/7988476/listening-for-youtube-event-in-jquery/7988536#7988536)。 –

+0

即使所有用戶都在同一時刻開始播放視頻,但只要其他應用程序沒有使用某些帶寬,只有部分用戶的連接速度較慢才能跟上視頻流,會發生什麼情況?你是否讓所有的客戶都暫停一下,這樣沒有人會落後? – nnnnnn

回答

1

你有幾個方法可以做到這一點:

  • 理想的解決方案是使用實時協作協議和服務器(如XMPPOpenFire)設置和開發自定義模塊這將允許你來回傳遞自定義節。不幸的是,它不僅不符合您對技術的要求,而且實施起來也相當複雜,但結果卻非常驚人。

  • 接下來,如果跨瀏覽器兼容性不是問題,您可以在HTML 5中使用WebSocket API。檢出this guy's example關於如何構建HTML 5 WebSocket啓用聊天。

  • 最後,您只剩下AJAX輪詢,無論是通常的方法還是長輪詢,都會阻止服務器端腳本執行,直到獲得一些數據。請參閱this link作進一步參考。

+0

另外,看看NTP協議在同步時鐘時如何處理網絡延遲 - 你可能想要實現類似的東西 – Basic

4

下面是使用的WebSockets和node.js中保持視頻同步的例子: http://softwareas.com/video-sync-with-websocket-and-node

我知道你不希望使用此技術,它只是一個很好的起點,以顯示什麼你可以做,如何。

由於要使用PHP和簡單起見那麼你最好的解決辦法是外包的實時通信層(用來保持同步用戶的視頻)的託管服務,如Pusher,誰我工作。這意味着您不需要維護持續連接,並且您可以使用Pusher在用戶/客戶端之間傳遞有關視頻狀態的實時事件。

如果您想使用YouTube視頻,並且HTML5並不總是可用,那麼您需要使用Player API。我看不到類似的timeupdated事件(在HTML5視頻中提供),因此您可能需要定期檢查視頻時間(請參閱player status API section。您可以註冊狀態更改事件,以便知道用戶何時暫停,停止視頻等。

@搶-W的評論提供了一些很好的洞察使用YouTube API

注:這實際上可能使一個非常有趣的博客文章,所以如果你有興趣讓我知道,我會看看我可以做。

0

對我來說,理想的解決方案是使用Vynch。利用這項技術,您可以在您自己的網站中嵌入一個可觀看同步視頻的房間。您可以創建播放列表並與朋友和用戶分享!還有一個聊天交換你的印象..