2013-11-14 51 views
2

我正在考慮使用多個Android設備(例如Nexus 7平板電腦)來構建照片/視頻牆,我想知道a)是否有可能以及b)如何同步所有這些設備的顯示。谷歌展示了它的Chrome racer實驗,很顯然,可以在許多設備上同步顯示。如何同步多個android設備的顯示?

因此,這裏是我的問題:

  • 我應該用什麼技術來顯示同步? Android的?鉻?如果可能,請指向現有的代碼。
  • 在這樣的設置中可以實現的設備之間的最小延遲是多少?
  • 視頻和聲音播放也可以在多個設備上同時開始(想想視頻牆)?
  • 這樣的項目應該考慮哪種架構?發送命令的集中式服務器?設備應該互相交談嗎?

我很好奇建議!

編輯: blinkendroid是我發現迄今爲止唯一可以完成這項工作的應用程序。優點?缺點?備擇方案?

+0

你設法讓blinkendroid工作嗎? –

回答

8

從技術上講,屏幕不共享,遊戲狀態是共享的,手機都按照他們的理解呈現狀態。

只是一點關於Chrome Racer的背景知識。我們有一個case-studyon here,但它不能完全覆蓋你所問的問題。

Racer中用於通信的主要技術是WebSockets。 WebSockets允許一個客戶端近乎實時地從服務器推送和接收消息。

Racer通過爲遊戲提供一個唯一的ID來啓動會話,併爲用戶保留一個Web Socket。任何後來加入遊戲的人都會被告知使用相同的ID,並且服務器也會爲他們創建一個Web套接字。現在服務器知道所有的參與者。

當遊戲開始時,向所有參與者廣播一條消息,要求他們準備好開始,在此階段,服務器正在計算將來回消息傳遞給所有客戶端需要多長時間。正是這樣做才能解決設備之間的任何延遲,從而試圖彌補較慢客戶端的延遲。

現在服務器知道遊戲可以正常啓動的客戶端。當用戶玩他們的遊戲時,他們的命令將通過Web套接字被推送到服務器。服務器將此消息轉發給所有連接的客戶端(如衛星),併爲連接到會話的每個單用戶執行相同的操作。這就是遊戲狀態如何共享。

當每個客戶端收到從服務器廣播給它的命令時,它會更新其遊戲的內部表示並將其呈現在屏幕上。

就是這樣。

其實,我們想使用WebRTC Data Channel,因爲它可以減少數據到達客戶端的跳數。在我們今天的解決方案中,客戶端ping服務器,服務器轉發消息(2跳),如果我們可以直接發送給其他用戶(這是WebRTC的目標),我們可以將延遲減少一半。不幸的是,WebRTC當時並不是無處不在,無法將其作爲解決方案進行部署。

+1

我是Racer後端(Rollit和Jam with Chrome)的主要開發人員,因此我可以爲Paul的恆星答案添加一點點: 100ms的延遲幾乎是絕對最大值。你可以達到300左右,但它很明顯。最小的是最好的! 至於播放視頻和音頻 - 每個客戶端在播放之前都需要準備好內容,並且您必須通過一些智能來計算設備之間的延遲,以確保所有設備都能立即啓動。只要確保你發送信號開始播放 - 而不是音頻/視頻本身。 查看代碼,查看Google Datarts的Tailbone庫。 – edhgoose

+0

@edhgoose我無法找到賽車代碼 - 你介意分享這個網址嗎? – memyself

+1

對不起,恐怕Racer的代碼不公開(我所指的代碼是Tailbone,它是一個具有類似功能的框架(檢查「Mesh」組件):https://github.com/ dataarts /尾骨 – edhgoose

0

Websockets表示web。您不需要網絡即可在同一個物理位置同步多臺設備......對於視頻/音樂同步,通過藍牙或WiFi等本地離線技術獲得的本地應用聽起來更可靠。

相關問題