将实时视频从Raspberry Pi摄像头传输到Android应用

时间:2019-09-19 20:47:54

标签: amazon-s3 raspberry-pi video-streaming http-live-streaming amazon-kinesis

  1. 我在家里和办公室中都有多个带有本机摄像头的Raspberry Pi设备(出版商)。 -Publisher(Pi),它们位于防火墙/路由器后面的本地网络上,并已连接到Internet。
  2. 我有一个EC2网络服务器(代理)。可通过公共IP地址对其进行公共访问。
  3. 我的手机上有一个Android应用程序。它通过4G网络实现互联网连接。 (订阅者/消费者/客户)

我正在尝试在我的Android应用中查看每个覆盆子相机的实时供稿。这个问题比技术问题更具概念性。我无法决定在成本和延迟方面应该采用哪种正确的方法以及最有效的方法。

方法,根据我对此的研究得出了:-

方法1:
1.通过raspvid / ffmpeg在pi设备中的RTSP / RTMP中流式传输摄像机
2.在pi设备中有一个读取RTSP流的代码,将其保存到AWS S3
3.拥有一个可对RTSP流进行转码并将其保存为可通过S3网址

移动应用访问的格式的中间件。

方法2:
1.通过raspvid / ffmpeg在pi设备中的RTSP / RTMP中流式传输摄像机
2.在pi设备中有一个读取RTSP流的代码,将其推送到远程帧收集(ImageZMQ)服务器。 EC2可以在这里使用。
3.拥有一个中间件,该中间件将帧转码为RTSP流,并将其保存为S3格式,可通过公共可访问的S3 URL

访问移动应用

方法3:
1.通过启动网络浏览器以WebRTC格式流式传输摄像机。
2.将流发送到诸如Kurento之类的媒体服务器。 EC2可以在这里使用。
3.为每个流生成唯一的可公开访问的WebRTC网址
4.通过移动应用程序

访问webrtc视频

方法4:
1.通过raspvid / ffmpeg在pi设备中的RTSP / RTMP中流式传输摄像机
2.通过设备上安装的Amazon Kinesis客户端获取流。
3.将Kinesis流发布到AWS Cloud
4.拥有Lambda商店进行转码并将其存储在S3中
5.让移动应用通过可公开访问的S3网址

访问视频流

方法5:-(相当复杂,涉及STUN / TURN服务器绕过NAT)
1.通过raspvid / ffmpeg在pi设备中的RTSP / RTMP中流式传输摄像机
2.抓取流并将其发送到gstreamer之类的mediaserver。 EC2可以在这里使用。
3.使用live555代理或ngnix RTMP模块。 EC2可以在这里使用。
4.为每个设备生成一个唯一的可公共访问的链接,但在同一端口上运行
5.让移动应用通过设备链接

访问视频流

只要不使用任何第三方商业解决方案(例如wowza,antmedia,dataplicity,aws kinesis),我就可以使用任何视频格式。我拥有的最重要的限制是我的所有设备都没有头,只能通过ssh访问它们。因此,我排除了涉及手动设置或与PUBLISHERS(Pis)桌面界面进行交互的任何此类选项。我可以创建脚本来自动化所有这些。

最终目标是,我希望每个Raspberry PI cam都有公共URL,但所有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/

2 个答案:

答案 0 :(得分:0)

基本上,使用raspvid / ffmpeg可以使用简单的IP摄像机。因此,适用于这种情况的任何体系结构都将为您工作。例如,以look at this architecture为例,在您的AWS机器上安装Nimble Streamer的位置,然后在那里处理该流并获取要播放的URL(HLS或任何其他合适的协议)。您可以选择在任何硬件/软件播放器中播放该URL,并将其插入任何Web播放器中。

因此,使用HLS而不是WerRTC是您的方法3。

答案 1 :(得分:0)

哪种解决方案合适,主要取决于您是否在本地应用程序(例如VLC)中观看视频以及“实时”的含义-通常,“实时流式传输”使用HLS,通常会添加至少5下载和播放短视频文件序列时,通常会延迟30秒。

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

  • 如果您想要实时(延迟时间<0.300秒)并通过本机应用程序观看视频,则RTSP是最简单的解决方案。

  • 如果您需要实时的内容并想在Web浏览器中查看,Broadway.js,Media Source Extensions(MSE)和WebRTC是这三种可用的解决方案。 Broadway.js限于H.264 Baseline,并且仅在GPU加速的画布支持下才能正常运行-并非在所有浏览器上都支持。同样,并非所有浏览器都支持MSE。 WebRTC支持最好,但也是这三种支持中最复杂的。

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