2012-12-10 32 views
2

您好堆棧溢出社區同步,播放YouTube視頻中的多個客戶端

我是一個相當新手編碼器,但我有一個項目,我已經制定,看起來越來越複雜,每天和我不不知道從哪裏開始。

靈感來自Synchtube & Phonoblaster,我正在爲我的網站創建一些內容,讓訪問者能夠實時觀看YouTube視頻和播放列表。

因爲我想能夠把它放在我自己的網站的上下文中,我不能使用上面列出的服務已經這樣做 - 所以我想弄清楚如何推出我自己的。

有些東西已被寫入有關此主題的堆棧溢出,以及其他博客: HEREHERE

因爲我仍然認爲自己是一個新手程序員,並且我在Google和Stack上發現的很多信息往往會超過1或2年,所以我仍不確定從何處開始或者如果此信息已過時。具體來說,我應該學習哪些語言和工具。

從我到目前爲止所收集的內容來看,像Javascript,Node.JS和YouTube API這些東西將成爲問題的癥結所在。我以前沒有使用過這些,但有興趣看看其他有經驗的編碼人員是否會有他們自己的建議或意見,他們可以指向我。

我很感激你抽出時間閱讀這篇文章! 希望能儘快聽到你的一些:)

非常感謝。

+0

我覺得真的很難相信,這將是可能的,但我很感興趣地看到人與直接經驗的答案。 – Pointy

+0

我不知道確切的實現,但也許你可以有一個服務器推送到客戶端,告訴它播放視頻。當然,這會涉及到cometd或者長時間輪詢等技術,但事實是服務器需要以某種方式告訴客戶什麼時候玩。如果你想特別同步播放,也許你可以讓服務器在不久的將來設置一個播放時間,也許在服務器發出消息後2秒鐘。只是一個想法。 –

+0

這個問題相當含糊,但你在正確的軌道上。如果我今天這樣做,我可能會使用Node.js和一些WebSocket抽象庫,如[Socket.IO](http://socket.io/)。 –

回答

5

這部分聽起來像你需要從Youtube的直播流。你可以在這裏找到更多信息。 https://support.google.com/youtube/bin/answer.py?hl=en&answer=2474026

如果你能做到這一點,那麼在任意數量的用戶之間同步播放就像在瀏覽器中嵌入常規的youtube嵌入流一樣簡單。回顧一下,如果你想在任何數量的用戶中同步視頻播放,第一個大問題就是學習如何在視頻上設置時間。幸運的是,使用hashbang#t = seconds很容易。

例如:http://www.youtube.com/watch?v=m38RdUGqBPM&feature=g-high-rec#t=619s將以619秒的速度啓動此HuskyStarcraft視頻進入視頻。

下一步是讓一些後臺服務器跟蹤當前時間。 Node.js與Socket.io是難以置信的很容易設置。 Socket.io是一個很好的庫,它可以通過長輪詢和更多方式優雅地處理來自Web套接字的併發連接,即使在非常老的瀏覽器上也能正常工作。請注意,websocket甚至不是必需的,但將成爲您最現代和最全面的方法。否則,它的黑客和東西。

這可能有效的一種方法如下。

User1訪問您的網站並開始播放視頻。您的頁面上的腳本向您的服務器發送XHR請求,聲稱「視頻在時間X開始」。然後將X存儲爲開始時間。

在這一點上,你可以走2條路線。您可以使用Youtube API的客戶端腳本輪詢視頻並每秒獲取其當前狀態。如果狀態或時間改變,則發送另一個請求回到服務器以更新狀態。

另一種簡單的途徑將是對用戶2 +頁面加載,然後發送XHR請求,要求視頻播放時間。服務器發回User1的開始時間之間的差異,然後客戶端腳本在Youtube播放器上爲User2 +設置't'hashbang。這可讓您同步開始時間,但如果有用戶暫停或倒帶視頻,則這些狀態不會更新。但後續頁面刷新可能會這樣做。

整個應用程序的複雜性取決於你想有什麼要求。如果它只是同步開始時間,那麼路線#2應該工作得很好。不需要套接字,並且很容易處理jQuery或者直接的javascript。

如果你需要一個真正的同步體驗,任何用戶都可以啓動/停止/暫停/快進/快退視頻的話,你看無論是用規定的庫解決方案或編寫自己的。

對不起這個答案是一種開放式的,但這樣是你的問題。 =)

+0

非常感謝您迴應我半vegue問題:) 只是爲了澄清的時間和精力,視頻直播是除了最初的想法,但由於一些原因,我決定去探索這個大道,而這是我真正想要建立的東西。 – copyflake

+0

我將在下週探索Node.JS和Socket.io - 並記錄任何我最終構建的內容 - 如果您想聽聽的話。 我認爲這個概念很簡單 - 而且你解釋了它將如何完美地在幕後工作。我們希望建設它也不那麼困難!謝謝! – copyflake

+1

我很樂意看到你想出的任何東西。樂意效勞。 – Geuis