首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从Raspberry Pi相机到Android应用程序的实时视频流

从Raspberry Pi相机到Android应用程序的实时视频流
EN

Stack Overflow用户
提问于 2019-09-19 20:47:54
回答 2查看 2K关注 0票数 1
  1. 我有多个Raspberry Pi设备与本机相机在我的家里和办公室(出版商)。- Publisher(Pi),它们位于防火墙/路由器后面的本地网络上,并连接到互联网上。
  2. 我有一个EC2 EC2服务器(代理)。它可以通过公共IP地址公开访问。
  3. 我手机上有个安卓应用程序。它通过4G网络连接互联网。(订户/消费者/客户)

我正试着在我的Android应用程序上查看每个覆盆子摄像头的实时提要。这个问题与其说是技术性的,不如说是概念性的。就成本和延迟而言,我无法决定实现这一目标的正确方法和最有效的方法是什么。

方法,我已经根据我对此的研究得出如下结论:

方法1:

  1. 通过raspvid/ffmpeg在pi设备中通过raspvid/ffmpeg传输RTSP / RTMP中的摄像机
  2. 在pi设备中有一个读取RTSP流的代码,将其保存到AWS S3
  3. 拥有一个中间件,可以对RTSP流进行代码转换,并以移动应用程序可通过S3 url访问的格式保存它。

方法2:

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

方法3:

  1. 通过启动web浏览器,以WebRTC格式对摄像机进行流。
  2. 将流发送到像Kurento这样的媒体服务器。EC2可以在这里使用。
  3. 为每个流生成一个唯一的webrtc公开访问的url
  4. 通过移动应用程序访问webrtc视频

方法4:

  1. 通过raspvid/ffmpeg在pi设备中通过raspvid/ffmpeg传输RTSP / RTMP中的摄像机
  2. 通过安装在设备上的Amazon客户端获取流。
  3. 将动态流发布到AWS云中
  4. 有一个Lambda商店将其转码并存储在S3中
  5. 让移动应用程序通过可公开访问的S3 url访问视频流

方法5: -(相当复杂的涉及STUN/转身服务器以绕过NAT)

  1. 通过raspvid/ffmpeg在pi设备中通过raspvid/ffmpeg传输RTSP / RTMP中的摄像机
  2. 抓取该流并将其发送到像gstreamer一样的媒体服务器。EC2可以在这里使用。
  3. 使用live555代理或ngnix模块。EC2可以在这里使用。
  4. 为每个设备生成一个唯一的可公开访问的链接,但运行在同一个端口上。
  5. 让移动应用程序通过设备链接访问视频流

我是开放的任何视频格式,只要我不使用任何第三方的商业解决方案,如wowza,反媒体,数据性,aws运动。最重要的限制是我所有的设备都是无头的,我只能通过ssh访问它们。因此,我排除了涉及手动设置或与发布程序(Pis)的桌面接口交互的任何此类选项。我可以创建脚本来自动化所有这些。

最终目标是我希望为每个Raspberry PI摄像机设置公共urls,但它们都运行在相同的套接字/端口号上,如下所示:

rtsp://cam1-frontdesk.mycompany.com:554/ rtsp://cam2-backoffice.mycompany.com:554/ rtsp://cam3-home.mycompany.com:554/ rtsp://cam4-club.mycompany.com:554/

EN

回答 2

Stack Overflow用户

发布于 2019-09-20 04:09:14

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

所以,这是您的方法3,它是HLS而不是WerRTC。

票数 0
EN

Stack Overflow用户

发布于 2019-09-21 05:09:35

哪种解决方案是合适的,主要取决于您是否在本地应用程序(例如VLC)中查看视频,以及您所说的“现场直播”指的是什么--通常,“实况流”使用HLS,它通常会增加至少5秒的延迟时间,并且通常在下载和播放短视频文件序列时增加30秒的延迟时间。

  • 如果您能够容忍延迟,那么HLS是最简单的解决方案。
  • 如果你想要实时的东西(< 0.300秒的延迟),并且通过一个本地应用程序观看视频,那么RTSP是最简单的解决方案。
  • 如果您想要的东西是实时的,并且想要在web浏览器中查看它,Broadway.js、媒体源扩展和WebRTC是三种可用的解决方案。Broadway.js仅限于H.264基线,并且只在GPU(加速画布支持)中执行得很得体,而不是在所有浏览器上都支持。同样,并非所有浏览器都支持MSE。WebRTC有最好的支持,但也是三者中最复杂的。

要想获得在任何浏览器中工作的Raspberry Pi的实时视频,请看一看Alohacam.io (完全公开:我是作者)。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58018751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档