【发布时间】:2019-09-19 20:47:54
【问题描述】:
- 我的家和办公室 (PUBLISHERS) 有多个带有本机摄像头的 Raspberry Pi 设备。 - Publisher(Pi) 他们位于防火墙/路由器后面的本地网络上并连接到互联网。
- 我有一个 EC2 网络服务器 (BROKER)。它可通过公共 IP 地址公开访问。
- 我的手机上有一个 Android 应用程序。它通过 4G 网络连接互联网。 (订阅者/消费者/客户)
我正在尝试在我的 Android 应用上查看每个覆盆子相机的实时信息。这个问题更多是概念性的而不是技术性的。在成本和延迟方面,我无法决定什么是正确的方法和最有效的方法来实现这一目标。
方法,我根据对此的研究得出了结论:-
方法一:
1. 通过 raspvid/ffmpeg 在 pi 设备中以 RTSP / RTMP 流式传输相机
2. 在读取 RTSP 流的 pi 设备中有一个代码将其保存到 AWS S3
3. 有一个中间件,对 RTSP 流进行转码,并将其保存为移动应用可通过 S3 url 访问的格式
方法 2:
1. 通过 raspvid/ffmpeg 在 pi 设备中以 RTSP / RTMP 流式传输相机
2. 在读取 RTSP 流的 pi 设备中有一个代码将其推送到远程帧收集 (ImageZMQ) 服务器。 EC2 可以在这里使用。
3. 有一个中间件,将帧转码为 RTSP 流,并将其保存为 S3 上的格式,移动应用可以通过可公开访问的 S3 URL 访问该格式
方法 3:
1. 通过启动 Web 浏览器以 WebRTC 格式流式传输相机。
2. 将流发送到像 Kurento 这样的媒体服务器。 EC2 可以在这里使用。
3. 为每个流生成一个唯一的 webrtc 可公开访问的 url
4.通过手机应用访问webrtc视频
方法 4:
1. 通过 raspvid/ffmpeg 在 pi 设备中以 RTSP / RTMP 流式传输相机
2. 通过设备上安装的 Amazon Kinesis 客户端获取流。
3. 将 Kinesis 流发布到 AWS 云
4. 有一个 Lambda 存储对其进行转码并存储在 S3
5. 让移动应用通过可公开访问的 S3 url 访问视频流
方法 5: - (相当复杂的涉及 STUN/TURN 服务器绕过 NAT)
1. 通过 raspvid/ffmpeg 在 pi 设备中以 RTSP / RTMP 流式传输相机
2. 抓取流并将其发送到媒体服务器,如 gstreamer。 EC2 可以在这里使用。
3. 使用 live555 代理或 ngnix RTMP 模块。 EC2 可以在这里使用。
4. 为每个设备生成一个唯一的可公开访问的链接,但在同一端口上运行
5. 让移动应用通过设备链接访问视频流
只要我不使用任何第三方商业解决方案(如 wowza、antmedia、dataplicity、aws kinesis),我对任何视频格式都持开放态度。我拥有的最重要的限制是我的所有设备都是无头的,我只能通过 ssh 访问它们。因此,我排除了涉及手动设置或与 PUBLISHERS(Pis) 的桌面界面交互的任何此类选项。我可以创建脚本来自动化所有这些。
最终目标是我希望为每个 Raspberry PI 摄像头提供公共 url,但它们都在相同的套接字/端口号上运行,如下所示:-
rtsp://cam1-frontdesk.mycompany.com:554/
rtsp://cam2-backoffice.mycompany.com:554/
rtsp://cam3-home.mycompany.com:554/
rtsp://cam4-club.mycompany.com:554/
【问题讨论】:
-
还有“UDP打孔”绕过NAT,为什么不使用公共的Asterisk服务器; STUN/TURN 和 VOIP 客户端,您可以通过 Vedio 呼叫呼叫您的 Rasberry PI,并将所有 Raspberry 配置为自动接受任何呼叫;我认为这是最便宜的,因为呼叫是点对点的
标签: amazon-s3 raspberry-pi video-streaming http-live-streaming amazon-kinesis