2017-06-19 92 views
-1

我正在設計一種解決方案,它將允許連接到Raspberry Pi的網絡攝像頭的視頻流式傳輸到我在AWS中的服務器,然後重新流式傳輸到訪問網站上的瀏覽器AWS服務器。許多Pis都會參與其中,用戶可以根據需要觸發並訪問來自其自己的Pi的Feed。如何通過服務器重新流式傳輸網絡攝像機

這對我來說是陌生的領域,所以我真的不知道從哪裏開始,我正在尋求有關最佳建築的建議。

到目前爲止,我正在考慮在每個Pi上打開一個Web套接字連接到服務器的進程(理想情況下是python)。服務器會根據與其相關的用戶帳戶來跟蹤每個套接字。然後,用戶將連接到服務器,通過網絡套接字觸發信號以打開自己的Pi視頻饋送,並將視頻饋送發送到我的服務器。他們的想法是,他們應該通過我的網站上的URL而不是通過Pi上的URL來觀看視頻 - 這將解決任何NAT訪問問題。

如何將每個Pi網絡攝像頭的視頻源發送到服務器,以便它看起來實時饋送來自服務器本身?

它基本上是要求here沒有收到答案的相同的東西。

+0

「這對我來說是陌生的領土」和「不要浪費我的時間通過暗示......」真的不應該在同一篇文章中。當你問問其他人的時間與你的問題時,擔心你的時間是非常傲慢的。 – Brad

+0

採取了點。對不起,我的'行李'。但是,它涉及到我發佈的前一個問題,我指出端口轉發不是一個合適的解決方案,然後我被問及爲什麼會有多個問題。當我看到類似的問題(我提供了一個鏈接),端口轉發被認爲是一個解決方案,它不符合問題時,它讓我想起了這個事件,而我只是試圖避免在這篇文章中不必要的對話,在鏈接的帖子上和(在我的腦海中)在另一個上。我其實並不是無禮的。 –

回答

1

跳過您通過服務器流式傳輸的部分,然後使用WebRTC。

它是點對點,在瀏覽器中工作,具有自動編解碼器協商,NAT穿越,您需要的一切。所有你需要主機然後是一個信號服務器和TURN服務器,當兩個同伴被防火牆。

+0

謝謝布拉德。我認爲這只是兩個瀏覽器之間的WebRTC?我不會在Pi上運行客戶端瀏覽器會話,而只是在Python中執行後臺進程。這也是我的理解,您需要通過瀏覽器接受入站WebRTC連接,並且我希望自動接受連接。我錯了嗎? –

+0

@LeeMelbourne WebRTC可以在任何你想要的工作之間工作。它通常用在瀏覽器之間,是的,但沒有理由說它不能成爲同伴。不,你不需要接受WebRTC連接。 WebRTC連接也不是真正的入站或出站......有一個發起者發送第一個信令信息,然後兩個對等者進行協商,並且根據選擇的ICE候選者,他們連接的方向可以採取任何方式。 – Brad

+0

因此,在沒有瀏覽器的情況下設置WebRTC會話似乎並不那麼容易。這篇文章沒有回覆https://stackoverflow.com/questions/29292852/python-wrapper-for-webrtc-client-library和這篇文章https://stackoverflow.com/questions/27569445/webrtc-without-a瀏覽器表明我需要以某種方式使用本地WebRTC庫......這似乎是開放了一個蠕蟲編碼罐。我會繼續搜索,但我還沒有找到一個很好的簡單方法來運行啓動或等待WebRTC連接的Python進程。這看起來與瀏覽器非常相關。 –

1

爲了您的目的,最簡單和最強大的工具是UV4L正如評論中所述。除了它原生的P2P功能之外,我還會考慮將其用於互聯許多同行:https://www.linux-projects.org/rpi-videoconference-demo-os/

這實質上是對樹莓派在啓動提供音頻/視頻會議室(感謝Janus SFU)一個隨時可以使用的操作系統映像到許多樹莓派的(包括運行OS的一人),攝像頭,麥克風,顯示器和附帶揚聲器或PC,智能手機等可以發佈/訂閱其他音頻或視頻流。運行操作系統的Raspberry Pi最終可以決定連接到上面鏈接中的任何視頻聊天室,而不僅僅是「本地」視頻聊天室。由於UV4L直接使用所有硬件,並且對WebRTC(甚至支持H264硬件編碼/解碼)具有原生支持,因此Rpi端不需要瀏覽器。 Janus Gateway和UV4L都可以使用任何給定的STUN/TURN服務器列表進行設置,並且也可以與AWS實例一起成功使用。

在UV4L中有一個內置網頁,只需點擊幾下鼠標就可以完成上述任何操作。但是,通過使用面板測試此API的幫助,您可以爲特定目的編寫/定製您自己的Web應用程序(例如,創建一個私人的,受密碼保護的具有給定數量的發佈者的房間或用戶匹配您的情況下的要求)

+0

謝謝spippulus。據我瞭解,如果一個Pi在NAT後面運行UV4L會議室,那麼你可以從那裏呼叫,但是你不能呼入,因爲Pi的端口/ IP是未知的,並且可能是受限的錐形NAT,它不會接受除非它啓動交易。所以我計劃的解決方案是在每個Pi上連接到AWS服務器的Web套接字服務。該服務器將要求Pi所有者登錄,將登錄名映射到套接字,通過套接字將Jitsi URL發送到Pi,並將相同的URL發送給調用者。 –

+0

然後按照我的說法在AWS上安裝Janus,並將UV4L連接到該實例。不要重新實現車輪。使用帶有TURN/STUN的WebRTC來幫助同行進行NAT穿越,因爲這是克服所有困難的標準。這將很難通過websockets可靠地實現所有的東西。 – spippulus

相關問題