【问题标题】:How To Re-Stream Web Camera Via Server如何通过服务器重新传输网络摄像头
【发布时间】:2017-06-19 09:52:34
【问题描述】:

我正在设计一个解决方案,该解决方案将允许来自连接到 Raspberry Pi 的网络摄像头的视频流式传输到我在 AWS 中的服务器,然后重新流式传输到访问 AWS 服务器上的网站的浏览器。许多 Pi 将参与其中,用户将根据需要触发并访问来自他们自己的 Pi 的提要。

这对我来说是一个陌生的领域,所以我真的不知道从哪里开始,我正在寻求关于最佳架构的建议。

到目前为止,我正在考虑每个 Pi 上的一个进程(理想情况下是 python),它将打开到服务器的 Web 套接字连接。服务器将根据与之相关的用户帐户跟踪每个套接字。然后,用户将连接到服务器,通过网络套接字触发信号以打开他们自己的 Pi 视频源,然后视频源将被发送到我的服务器。他们的想法是,他们应该通过我网站上的 URL 而不是通过 Pi 上的 URL 查看视频源 - 这将解决任何 NAT 访问问题。

如何将每个 Pi 网络摄像头的视频源发送到服务器,以使实时源看起来像是来自服务器本身?

这与here 的请求基本相同,但未收到答复。

【问题讨论】:

  • “这对我来说是一个陌生的领域”和“不要浪费我的时间建议......”真的不应该放在同一个帖子里。当你用你的问题询问别人的时间时,担心你的时间是非常傲慢的。
  • 点了。对不起我的“行李”。但它与我之前发布的一个问题有关,我在其中指出端口转发不是一个合适的解决方案,然后我被问到多个问题为什么。当我看到与我的类似问题(我作为链接提供)时,建议将端口转发作为与问题不匹配的解决方案,这让我想起了那件事,我只是想避免在这篇已经出现的帖子上进行不必要的对话涵盖在链接的帖子和(在我看来)另一个帖子上。我其实不是故意粗鲁的。

标签: video video-streaming mjpeg


【解决方案1】:

就您而言,最简单、最强大的工具是 cmets 中提到的 UV4L。除了其本机 p2p 功能外,我还会考虑将其用于互连许多对等点:https://www.linux-projects.org/rpi-videoconference-demo-os/

这本质上是一个用于 Raspberry Pi 的即用型操作系统映像,在启动时提供了一个音频/视频会议室(感谢 Janus SFU),许多 Raspberry Pi(包括运行操作系统的那个)带有摄像头、麦克风、显示器和连接的扬声器或个人电脑、智能手机等可以发布/订阅他们/其他的音频或视频流。运行操作系统的 Raspberry Pi 最终可以决定连接到互联网上的任何视频室,如上述链接中的上述链接,而不仅仅是“本地”视频室。 Rpi 端不需要浏览器,因为 UV4L 直接使用所有硬件并且原生支持 WebRTC(它甚至支持 H264 硬件编码/解码)。 Janus Gateway 和 UV4L 都可以设置任何给定的 STUN/TURN 服务器列表,并且也已成功用于 AWS 实例。

UV4L 中有一个内置网页,只需单击几下鼠标即可完成上述所有操作。但是,使用 UV4L RESTFul API(并在测试此 API 的面板的帮助下)您可以为特定目的编写/自定义您自己的 Web 应用程序(例如,创建一个带有密码保护的私人房间给定数量的发布者或订阅者符合您的案例要求)

【讨论】:

  • 感谢 spippulus。但是据我了解,如果 Pi 在 NAT 后面运行 UV4L 会议室,那么您可以从那里呼叫但您不能呼叫,因为 Pi 的端口/IP 是未知的,并且可能是受限的锥形 NAT,它不会接受除非它启动了事务。所以我计划的解决方案是在每个连接到 AWS 服务器的 Pi 上提供一个 Web 套接字服务。该服务器将要求 Pi 所有者登录,将登录名映射到套接字,通过套接字向 Pi 发送 Jitsi URL,并将相同的 URL 发送给调用者。
  • 然后按照我所说的在 AWS 上安装 Janus 并让 UV4L 连接到该实例。不要重新实现轮子。使用带有 TURN/STUN 的 WebRTC 来帮助对等方进行 NAT 穿越,因为这是克服所有这些困难的标准。很难通过 websocket 可靠地实现所有这些东西。
  • 对此的更新;我一直在努力让 UV4L 与 USB 相机配合使用。我已经重新映像并重新安装了大约 5 次以尝试各种方法,但始终得到相同的结果:UV4L-Server 上的 mjpeg 流工作正常,但使用 WebRTC 选项我只得到一个空白的摄像头馈送(但音频还可以)。到目前为止,我也没有收到他们的电子邮件表格的回复。
【解决方案2】:

跳过通过服务器进行流式传输的部分,直接使用 WebRTC。

它是点对点的,在浏览器中工作,具有自动编解码器协商,NAT 穿越,你需要的一切。然后,您只需要托管一个信令服务器和一个 TURN 服务器,以供两个对等方都受防火墙保护。

【讨论】:

  • 谢谢布拉德。我考虑过,但 WebRTC 不是仅在两个浏览器之间吗?我不会在 Pi 上运行客户端浏览器会话,只是在 Python 中运行后台进程。这也是我的理解,您需要通过浏览器接受入站 WebRTC 连接,并且我希望自动接受连接。我也错了吗?
  • @LeeMelbourne WebRTC 在您希望它在其之间工作的任何东西之间工作。它通常在浏览器之间使用,是的,但是没有理由说 Pi 也不能成为对等点。不,您不需要接受 WebRTC 连接。 WebRTC 连接也不是真正的入站或出站......有一个发起者发送第一个信令信息,然后两个对等方协商,并且他们连接的方向可以根据选择的 ICE 候选者进行。
  • 所以在没有浏览器的情况下设置 WebRTC 会话似乎并不容易。这篇文章没有回复stackoverflow.com/questions/29292852/…,而这篇文章stackoverflow.com/questions/27569445/webrtc-without-a-browser 表明我需要以某种方式使用本机 WebRTC 库......这似乎打开了一个蠕虫的编码罐。我会继续搜索,但我还没有找到一种简单的好方法来运行将启动或等待 WebRTC 连接的 Python 进程。这似乎是一种与浏览器密切相关的功能。
  • UV4L 好像添加了很多东西。感谢您的指点。很久以前看的,忘记了。
猜你喜欢
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多