2016-10-17 83 views
3

我一直在努力實現的網絡應用程序將能夠處理以下情形:流攝像頭使用socket.io

  • 視頻流/從客戶機到其他客戶端(實際上是一組特定的人聲音,無廣播)和服務器。數據源將是客戶端的網絡攝像機。
  • 此流數據必須實時顯示在其他客戶端的瀏覽器上以保存在服務器端用於「歸檔」目的。
  • 它必須在node.js + socket.io環境中實現。

把它放在一些更具體的上下文中......場景是有一個人爲他選擇的用戶提供了一種空間。選定的用戶加入房間後,創作者開始從他/她的內置設備(網絡攝像頭)流式傳輸視頻/音頻。所有的客人都會實時接收數據,而且數據正在被髮送到服務器,並在數據流和房間關閉後進行恢復。

我在考慮將Socket.IO與WebRTC混合使用。從理論上講,這兩者的結合似乎恰恰適合這項工作。 Socket.IO非常適合通過爲一個房間分配一些套接字並收集WebRTC要求的信令過程來收集特定用戶集合。 與此同時,WebRTC對於聚集在同一房間中的用戶之間的P2P連接來說非常棒,訪問攝像頭和其他可能想使用的內置設備也非常簡單。

所以是的,理論上所有的東西看起來相當不錯,但是我真的需要看到一些代碼,所以我可以嘗試自己實現它。此外,我看到一些問題:

  • 如何保存由P2P連接發送的流?很顯然,服務器無法訪問。我在想,我可能把服務器當作另一個「客戶」,所以它只是與房間創建者建立P2P連接的另一個端點。但不知何故,它感覺前衛。
  • 將服務器視爲創作者與客戶之間的中間人不是更好嗎?與P2P相比,有一點可能會延遲一些,但可能並不重要,但可能對所有客戶端來說都是一樣的。 (我試過,但我不能從攝像頭到完成服務器的流,這不過是因爲我有處理MediaStream問題,爲不同的問題的話題)

我一直在尋找一些不錯解決方案但沒有任何成功。我已經看到,有一個很好的P2P解決方案爲socket.io製作:http://socket.io/blog/socket-io-p2p/。事情是 - 我認爲它不會很好地處理數據流。這些例子只提到簡單的聊天應用程序,我需要一些比這更重要的東西。

我會非常感謝一些具體的例子,文檔,不管怎樣可能導致我更接近實施它,因爲我真的不知道如何處理它。

感謝提前:)

回答

1

視頻流至多個用戶的是,不幸的是需要大量的基礎設施建設,實現了真正的難題。您將無法通過websocket傳輸視頻數據。WebRTC對於你描述的內容來說也不是一個可行的解決方案,因爲正如你所提到的那樣,WebRTC協議是P2P的,因爲流媒體用戶需要直接連接到所有'觀衆'。這顯然不會超過一些「觀衆」。 WebRTC更適合Skype等直接視頻通話。

Here是一篇描述某種流行的直播流服務所使用的架構的文章。正如你所看到的以任何規模實現實時視頻都需要相當多的資源。

3

您可以使用開源WebRTC服務器解決您的任務。 例如,kurento

可以實現數據流的模式:

  • 一對一
  • 一對多
  • 多對多

WebRtc-server schema

客戶會互相連接扔webRtc服務器。 因此,在服務器端,您可以記錄流或將其發送到transciding。

webSocket用於comunicatind與服務器。

根據您的任務可以找到一些examples