2017-06-19 76 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

相关问题