V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
lollipogo
V2EX  ›  问与答

关于将摄像头的数据中转到外网的做法

  •  
  •   lollipogo · 2018-06-23 09:09:45 +08:00 · 4600 次点击
    这是一个创建于 2357 天前的主题,其中的信息可能已经有所发展或是发生改变。

    使用 Spring boot 写了程序,放在局域网中的一台机器上,通过 ngrok 对8082 端口做了一个端口映射,可以从外网访问数据库等内容。

    局域网内有多个摄像头,现在想要实现:可以通过对请求路径进行配置,访问指定的摄像头。

    最好能利用之前的 8082 端口(不过这一块我也不懂,希望大家指导一下)。

    想法:

    1. 使用 WebSocket,web 端请求后,后台打开摄像头,使用某种技术对视频进行截图或是发送数据流(数据流这一块不知道应该怎么处理),不断的发送到 web 端,web 端进行渲染。

    摄像头是海康的,在本机可以通过 rtsp 地址读取数据流。

    不知道我的需求应该查什么资料,希望大家指导一下方向。谢谢!

    第 1 条附言  ·  2018-06-23 13:24:22 +08:00

    试了一些方案,目前比较倾向于使用ffmpeg将rtsp码流转成hls的方法。

    思路如下:

    1. 局域网内安装nginx设置对hls的支持,将监听端口通过ngrok映射暴露到外网。目的是外网可以访问m3u8文件。
    2. 收到对某个摄像头(如:ip192.168.1.2,以及其他附加参数)的http请求后,启动执行ffmpeg,将对应的rtsp码流转成hls编码,写入到第一步中暴露的目录下:指定文件名(比如根据IP命名)的m3u8文件中。将文件访问路径通过http响应回复到前端。
    3. 前端通过video.js等,直接对m3u8文件进行播放。
    4. 生成的文件会被重复使用,所以不会不断增加。需要删除的话,也可以在恰当的时机(网页关闭、定时检查等)删除生成的文件即可。

    感觉可行性挺高,测试了一部分,挺好。现在还有一些别的问题。等大致完善了到时候再整理一下。

    6 条回复    2018-06-26 16:55:34 +08:00
    stephenyin
        1
    stephenyin  
       2018-06-23 09:50:43 +08:00
    外网传 ip:port 到内网, 摄像头直接推流到指定 ip:port
    icemanpro
        2
    icemanpro  
       2018-06-23 09:55:01 +08:00
    海康端口为 8000,
    萤石云可以直接看局域网内摄像头。
    也可用流媒体服务器做个代理,只需开一个端口。
    ivencooli
        3
    ivencooli  
       2018-06-23 20:14:37 +08:00 via Android
    帮朋友做过类似的毕设,不过摄像头是自己在树莓派上搭的。基本流程是,树莓派搭个 nginx,接收摄像头的 rtmp 或者是 hls 的流,部署在同一个 html 页面中,接着 frp 和服务器连接,直接访问这个 html 页面。
    lollipogo
        4
    lollipogo  
    OP
       2018-06-24 22:53:09 +08:00 via Android
    @ivencooli “部署在同一个 HTML 页面中”指的是? HTML 页面中引用的资源路径应该是外网可以访问的吧。本质上 HTML 就是一个文件,在外网访问 HTML 还是会解析它引用的资源发起请求的吧
    ivencooli
        5
    ivencooli  
       2018-06-25 18:40:28 +08:00 via Android
    @lollipogo [捂脸]兄弟,你没公网 ip 怎么在外网访问呢。我说的部署在同一个 html 的具体做法手机,nginx 先安装 rtmp 和 hls 的插件,html 里用 js 的形式引入 hls 流和 rtmp 流。nginx 可以解析出来的。具体可以搜树莓派 rtmp 直播,
    lollipogo
        6
    lollipogo  
    OP
       2018-06-26 16:55:34 +08:00
    @ivencooli 我明白你的做法,只是你说"部署"到 HTML 页面给我弄懵了,我以为你搞了什么奇技淫巧类似服务端渲染一样不用将直播流暴露到外网,只暴露 HTML 访问。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6049 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:03 · PVG 10:03 · LAX 18:03 · JFK 21:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.