V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
liuyulvv
V2EX  ›  程序员

客服端,服务器和树莓派

  •  
  •   liuyulvv · 2021-01-22 23:31:43 +08:00 via iPhone · 2810 次点击
    这是一个创建于 1183 天前的主题,其中的信息可能已经有所发展或是发生改变。

    在我现在有台服务器和树莓派,树莓派通过 4G 上网,有个摄像头,现在想开发个程序,实现以下功能:

    1. 客户端通过浏览器给服务器发送指令,打开,关闭摄像头,获取摄像头拍摄的内容。
    2. 服务器接受到客户的指令后控制树莓派打开,关闭摄像头,给客户端摄像头拍摄的内容。
    3. 树莓派接收服务器的指令打开,关闭摄像头,传输摄像头拍摄的内容给服务器。

    我想要的效果是用户打开摄像头(前端)后,服务器接受到这个请求后让树莓派打开摄像头,然后树莓派就把拍摄的内容传给服务器,服务器接收到树莓派的内容就传给前端。

    前端用 vue,服务器的服务端用 fastapi,现在就是不知道怎么把服务器和树莓派之间连起来。

    在服务器和树莓派这个环节中,树莓派更像是服务端,接收服务器的请求,可是树莓派没有公网 IP 。

    另一个问题就是怎么把树莓派摄像头拍摄的内容实时传给用户,因为用户是通过 http 访问服务器,树莓派和服务器是通过 tcp 交流(我是这么想的)

    请问各位大佬,服务器和树莓派该怎么连接达到我想要的效果,各位大佬能不能支点招。

    11 条回复    2021-01-25 09:35:12 +08:00
    lithiumii
        1
    lithiumii  
       2021-01-22 23:44:00 +08:00
    没公网 IP 简单,Zerotier 或者随便什么内网穿透技术安排上,确保派和服务器互联
    别的不懂。
    eason1874
        2
    eason1874  
       2021-01-22 23:47:40 +08:00
    没有公网 IP 的树莓派主动跟服务器建立通信不就行了。

    树莓派每分钟定时脚本,自动检查 websocket 连接,断了自动重连,服务器通过 websocket 下发任务。
    eason1874
        3
    eason1874  
       2021-01-22 23:49:35 +08:00
    视频聊天用 WebRTC
    niubee1
        4
    niubee1  
       2021-01-23 01:20:21 +08:00
    服务器上装 mqtt 的 broker,树莓派上用 mqtt 的 client,订阅一个频道用来接收服务器的控制指令,根据不同指令执行开、关摄像头的命令,打开摄像头后可以主动推流给服务端,如果自己不会部署 rtmp 流服务的话,直接推流给 B 站直播也是可以的,见: https://www.icxbk.com/article/detail/1898.html
    stevefan1999
        5
    stevefan1999  
       2021-01-23 02:15:26 +08:00
    你的意思是要個視像收集的 iot 設備,連去一個服務器中繼,然後這個中繼能把影像 multiplex 給用戶麼,這怎麼簡單的需求你爲什麼也不會?
    既然是 iot,那基本上是 LTE-M/NB-IOT 沒扯了把,那既然沒有公網地址,但你應該是有 IPV6 的,沒有就申請一個,然後用最簡單的你服務器向樹莓派用 IPV6 直連也可以了,什麼 VPN 也沒必要用的。
    硬是要說的話,ZT 也是原生支持 IOT 的,他們有個 libzt 本身是集成了一個 LwIP 的全虛擬網絡 TCP/IP 棧(什麼 connect/bind/send 全都有),你甚至能把他移植到裸機跑的樹莓派。如果只是 linux 用他們原生 TUNTAP 也可以,但你國的網絡環境...我有點質疑服務可靠性。
    (另外如果申請 ipv6 也不行直接自己弄個 SIT 中繼分配 IPV6 地址也行,不過麻煩點)
    stevefan1999
        6
    stevefan1999  
       2021-01-23 02:27:20 +08:00
    > 在服务器和树莓派这个环节中,树莓派更像是服务端,接收服务器的请求,可是树莓派没有公网 IP 。

    你到底知不知道根本上 C/S 架構就是個假像?互聯網這三個字已經提及了「互聯」這個最重要的性質,根本上兩邊都需要溝通過的,這就是 peering,理論上大家地位是對等的。

    C/S 架構只是把這個互聯的前提換成了服務器和客戶的功能性上不對等(譬如說,服務器會先和客戶端說話,反之亦然),但背後的連接依然是互聯的。

    那麼你直接從樹莓派連去服務器的時候你已經和服務器有互聯的關係了,那你的「服務器」也能直接「反向」把指令傳過去樹莓派再傳來傳去,中間搞個 heartbeat 豈不美哉?
    geekvcn
        7
    geekvcn  
       2021-01-23 02:48:05 +08:00
    很简单,用某翻墙软件的端口转发功能,vTwo 懂了没,很适用你所说的场景
    liuyulvv
        8
    liuyulvv  
    OP
       2021-01-23 10:09:25 +08:00
    @lithiumii @eason1874 @niubee1 @stevefan1999 @geekvcn 感谢各位大佬的指点,我之前编码的时候是服务器和树莓派用 pyzmq 建立 REP 、REQ 关系,但是发现 fastapi 的端口和 pyzmq 的端口不一样,所以没弄出来。websocket 我感觉应该是可以实现的,太菜啦,轻喷。
    Hconk
        9
    Hconk  
       2021-01-23 11:06:53 +08:00 via iPhone
    我的方式是服务端跑个 frps,树莓派跑 frp,然后服务器直接给外网 ip 加端口发消息就行了。安全性要自己考虑好。
    xiaochong0302
        10
    xiaochong0302  
       2021-01-23 11:07:27 +08:00 via iPhone
    mqtt, 我家里的树莓派连接摄像头,可以在手机上控制拍照,可以监控运行状态,可以播放音乐
    SmiteChow
        11
    SmiteChow  
       2021-01-25 09:35:12 +08:00
    webrtc
    树莓派跑 headless chrome
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2888 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 02:46 · PVG 10:46 · LAX 19:46 · JFK 22:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.