如何实现流媒体引擎,以便家庭网络上的树莓派视频流可以公开

Posted

技术标签:

【中文标题】如何实现流媒体引擎,以便家庭网络上的树莓派视频流可以公开【英文标题】:How to implement a streaming engine so that raspberry Pi video streaming on home network can become public 【发布时间】:2018-07-01 14:52:54 【问题描述】:

我已经使用 HTTP 线程服务器和开放式 CV 在树莓派上实现了运动检测 + 网络摄像头视频流。现在我想在我的 pi 在家庭网络上时公开访问它。我知道有三种方法可以做到这一点:

    端口转发 反向隧道 使用打孔(dataplicity 和 remot3.it 的作用)

我想知道是否有一个简单的脚本可以帮助实现 3,即 dataplicity 的作用,流中的哪个位置到达云服务器,然后该云服务器为请求提供服务。

我确信这可以用几行代码来实现,但如果可以提供一个工作示例,那将非常有帮助。任何脚本/语言的代码都可以。我还需要了解在创建此解决方案时需要考虑什么。

就我而言,我只关心几个最大的树莓派设备。此外,最多可以有 1-2 个连接,因此最多可能有 4 个同时流,这意味着如果示例代码对于高负载来说不够坚固,那完全可以。

【问题讨论】:

这似乎可以解决问题? (一种)。在云机器上运行 UDP 服务器侦听数据包,(B)。 pi 设备上的客户端不断将数据包发送到此云计算机,以由 UDP 服务器接收。 (C) 对于家庭网络上的每个设备,即,对于我们要连接到云服务器的每个树莓派,我们应该在云服务器上使用一些唯一的标识符,然后可以使用它来存储临时接收到的针对该设备的消息在某些缓冲区 (D) 在云服务器上运行 Web 服务器,并公开一个 API,该 API 接受设备 ID 并提供通过 UDP 服务器接收到的数据? 【参考方案1】:

在 Raspberry Pi 上使用 autossh 将网络摄像头端口转发到远程服务器上的端口。 autossh 将确保连接保持活动状态,并在必要时重新打开它。

sudo apt-get install autossh

您可以使用分配了公共 IP 的免费套餐合格 AWS EC2 实例作为远程服务器。在创建期间,您将获得一个用于连接到实例的 .pem 密钥对文件。将此文件上传到树莓派。

autossh 命令如下所示:

autossh -l ubuntu -N -R 80:localhost:webcamPort serverIP -p 22 -i /path/to/key.pem -oStrictHostKeyChecking=no

如果使用 AWS AMI linux 映像,请将用户名从“ubuntu”更改为“ec2-user”。

您可能还需要编辑 ssh 配置并在 AWS linux 服务器上启用 GatewayPorts。将以下内容添加到 /etc/ssh/sshd_config

GatewayPorts yes

一旦建立连接,您就可以通过浏览http://serverIP/ 来访问它。

【讨论】:

虽然这可能有效,但在实践中,我需要了解如何实现打孔。只是出于好奇,我如何能够连接到 pi 上的多个摄像头流视频? 这将是反向隧道,而不是打孔。请参阅unix.stackexchange.com/questions/46235/… 以了解其工作原理。如果您想转发多个流,有几种方法可以做到,但最简单的方法是将流#2 转发到服务器上的不同端口,例如端口 81。然后您可以在serverIP 获得一个流和serverIP:81

以上是关于如何实现流媒体引擎,以便家庭网络上的树莓派视频流可以公开的主要内容,如果未能解决你的问题,请参考以下文章

基于树莓派4B设计的音视频播放器(从0开始)

树莓派+Flask实现视频流媒体WEB服务器

树莓派安装DLNA实现流媒体服务器

基于树莓派的家庭智能监控系统如何实现?

树莓派安装DLNA实现流媒体服务器

《树莓派4B家庭服务器搭建指南》第七期:使用树莓派解锁网易云灰色音乐