【问题标题】:Stream live video from Raspberry Pi Camera to Android App将实时视频从 Raspberry Pi 摄像头流式传输到 Android 应用程序
【发布时间】:2019-09-19 20:47:54
【问题描述】:
  1. 我的家和办公室 (PUBLISHERS) 有多个带有本机摄像头的 Raspberry Pi 设备。 - Publisher(Pi) 他们位于防火墙/路由器后面的本地网络上并连接到互联网。
  2. 我有一个 EC2 网络服务器 (BROKER)。它可通过公共 IP 地址公开访问。
  3. 我的手机上有一个 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


【解决方案1】:

基本上,使用 raspvid/ffmpeg,您就有了一个简单的 IP 摄像机。因此,适用于这种情况的任何架构都适合您。例如,以look at this architecture 为例,在您的 AWS 机器上安装 Nimble Streamer,然后在那里处理该流并获取用于播放的 URL(HLS 或任何其他合适的协议)。该 URL 可以根据您的选择在任何硬件/软件播放器中播放,也可以插入到任何网络播放器中。

所以你的方法 3 是 HLS 而不是 WerRTC。

【讨论】:

    【解决方案2】:

    哪种解决方案合适主要取决于您是否在本机应用程序(例如 VLC)中观看视频,以及您所说的“直播”是什么意思——通常,“直播”使用 HLS,它通常会添加至少 5 个并且在下载和播放一系列短视频文件时,通常会有接近 30 秒的延迟。

    • 如果您可以容忍延迟,HLS 是最简单的解决方案。

    • 如果您想要实时(

    • 如果您想要实时内容并希望在 Web 浏览器中查看它,Broadway.js、媒体源扩展 (MSE) 和 WebRTC 是三种可用的解决方案。 Broadway.js 仅限于 H.264 基线,并且仅在 GPU 加速画布支持的情况下表现良好——并非所有浏览器都支持。同样,并非所有浏览器都支持 MSE。 WebRTC 支持最好,但也是三者中最复杂的。

    对于可在任何浏览器中运行的 Raspberry Pi 的实时视频,请查看Alohacam.io(完整披露:我是作者)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-28
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-14
      • 1970-01-01
      相关资源
      最近更新 更多